<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 <form action="BadCodeServlet" method="get">
   <!-- use_name:<input type="text" name="use_name"/><br/>
   password:<input type="text" name="password"/><br/>
   code:
   <textarea rows="7" cols="20" name="code"></textarea>
   <input type="submit" value="submit"/> -->
  use_name:<input type="text" name="name"/><br/>
  age:<input type="text" name="age"/><br/>
  job:<input type="text" name="job"/><br/>
  <input type="submit" value="submit"/>
 </form>
</body>
</html>package testPackage;import java.io.*;
import java.lang.reflect.InvocationTargetException;import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;
import org.apache.commons.beanutils.*;
import coreservlets.ServletUtilities;/** Servlet that reads a code snippet from the request
 *  and displays it inside a PRE tag. Fails to filter
 *  the special HTML characters.
 *  <P>
 *  Taken from Core Servlets and JavaServer Pages 2nd Edition
 *  from Prentice Hall and Sun Microsystems Press,
 *  http://www.coreservlets.com/.
 *  &copy; 2003 Marty Hall; may be freely used or adapted.
 */
@WebServlet("/BadCodeServlet")
public class BadCodeServlet extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    YourInformation you=new YourInformation();
  
try {
BeanUtils.populate(you, request.getParameterMap());
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String title = "Code Sample";
    String docType =
      "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
      "Transitional//EN\">\n";
    out.println(docType +
                "<HTML>\n" +
                "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" +
                "<BODY BGCOLOR=\"#FDF5E6\">\n" +
                "<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" +
                "name:"+you.getName()+
                "name:"+request.getParameterMap()+
                "<br/>job:"+you.getJob()+
                "<br/>age:"+you.getAge()+
                
                "</BODY></HTML>");
    
    } 
   protected String getCode(HttpServletRequest request) {
    return ServletUtilities.filter(request.getParameter("code"));
  }
}class YourInformation{
String name;
String job;
    int age;
    public void setName(String name){
     this.name=name;
    }
public String getName(){
return name;
}
public void setJob(String job){
     this.job=job;
    }
public String getJob(){
return job;
}
public void setAge(int age){
     this.age=age;
    }
public int getAge(){
return age;
}

}咋会总不对呢

解决方案 »

  1.   

    java.lang.reflect.InvocationTargetException: Cannot set name
    at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:922)
    at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:726)
    at testPackage.BadCodeServlet.doGet(BadCodeServlet.java:32)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.NoSuchMethodException: Property 'name' has no setter method
    at org.apache.commons.beanutils.PropertyUtils.setSimpleProperty(PropertyUtils.java:1649)
    at org.apache.commons.beanutils.PropertyUtils.setNestedProperty(PropertyUtils.java:1551)
    at org.apache.commons.beanutils.PropertyUtils.setProperty(PropertyUtils.java:1580)
    at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:919)
    ... 20 more
      

  2.   

    java.lang.NoSuchMethodException: Property 'name' has no setter method?
    找不到方法
    属性"name"没set方法
      

  3.   

    YourInformation 这个类楼主你放在单独的class文件设置成public试下,可能void org.apache.commons.beanutils.BeanUtils.populate(Object bean, Map properties)这个方法有限制条件
      

  4.   


    我找到文档啦The class must be public, and provide a public constructor that accepts no arguments. This allows tools and applications to dynamically create new instances of your bean, without necessarily knowing what Java class name will be used ahead of time, like this:
      

  5.   

    楼主建议你把YourInformation这个类单独生成一个public class,这种bean文件最好是单独一个class。