贴上代码
public class UserPostServlet extends HttpServlet { /**
 * Constructor of the object.
 */
int i=0;
String ii;
public UserPostServlet() {
super();
} /**
 * Destruction of the servlet. <br>
 */
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
} /**
 * The doGet method of the servlet. <br>
 *
 * This method is called when a form has its tag value method equals to get.
 * 
 * @param request the request send by the client to the server
 * @param response the response send by the server to the client
 * @throws ServletException if an error occurred
 * @throws IOException if an error occurred
 */
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println("  <BODY>");
out.print("    This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println("  </BODY>");
out.println("</HTML>");
out.flush();
out.close();
} /**
 * The doPost method of the servlet. <br>
 *
 * This method is called when a form has its tag value method equals to post.
 * 
 * @param request the request send by the client to the server
 * @param response the response send by the server to the client
 * @throws ServletException if an error occurred
 * @throws IOException if an error occurred
 */
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//--获取隐藏在网页中的前面所有用户的信息存入新建立的相应数组中保存下来
String hide=request.getParameter("ii");
i = Integer.parseInt(hide);
i++;
String userName[]=new String[100];
String userPassword[]=new String[100];
String userLikes[][]=new String[100][];
for(int j=1;j<i;j++){
userName[j]=request.getParameter("userName[j]");
//userName[j]=new String(userName[j].getBytes("iso-8859-1"),"utf-8");
userPassword[j]=request.getParameter("userPassword[j]");
userLikes[j]=request.getParameterValues("userLikes[j]");
}
///-----将新产生的第i个用户的信息存入相应数组中
userName[i]=request.getParameter("username");
userName[i]=new String(userName[i].getBytes("iso-8859-1"),"utf-8");
userPassword[i]=request.getParameter("password");
userLikes[i]=request.getParameterValues("userLike");
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();


out.println("<HTML>");
out.println("  <HEAD><meta    http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"></HEAD>");
out.println("  <BODY>");

out.println("<table border=-3>");
out.println("<tr><th>用户名</th><th>爱好</th>");
for(int j=1;j<=i;j++){
out.println("<tr><th><input  name='userName[j]' value="+userName[j]+"></th><th>");
out.println("<input  name='userLikes[j]' value=");
for(String str:userLikes[j]) out.print(str+"  ");
out.println("/></th>"); out.println("<input  type='hidden' name='userPassword[j]' value="+userPassword[j]+">");
}
ii = String.valueOf(i);
out.println("</table>");
out.println("</h1>");
out.println("<form   method=\"post\"    action=\"/first/servlet/UserPostServlet\">");
out.println("用户名:<input type='text' name='username'  ><br/>");
out.println(" 密     码 :<input type='password' name='password'/><br/>");
out.println("爱好:<input name='userLike' type='checkbox' value='music'>音乐&nbsp;");
out.println(" <input name='userLike' type='checkbox' value='sport'>运动&nbsp;");
out.println("<input name='userLike' type='checkbox' value='literal'>文学<br/>");
    out.println("<input type='submit' value='提交'/>");
    out.println("<input  type='hidden' name='ii' value="+ii+">");
    out.println("</form>");/**/ out.println("  </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
/**
 * Initialization of the servlet. <br>
 *
 * @throws ServletException if an error occurs
 */
public void init() throws ServletException {
// Put your code here
}}//**************************************************************************************另外起始页面userPost.html<html>
    <head>
<meta    http-equiv="content-type" 
             content="text/html; charset=UTF-8">
    </head>
<body>
<form   method="post"  
            action="/first/servlet/UserPostServlet">
    用户名:<input type="text" name="username" />
   <br/>
     密      码 :<input type="password" name="password"/>
   <br/>
    爱好:<input name="userLike" type="checkbox" value="music">音乐&nbsp;
      <input name="userLike" type="checkbox" value="sport">运动&nbsp;
      <input name="userLike" type="checkbox" value="literal">文学<br/>
     <input type="submit" value="提交"/>
     <input   type="hidden"   name="ii"  value="0">
    
     
</form></body>
</html>

解决方案 »

  1.   

    1.
     String hide=request.getParameter("ii"); //这里可能是空值 加上判断,下面类似的最好都做处理
            i = Integer.parseInt(hide);
    2. for(int j=1;j<i;j++){
                userName[j]=request.getParameter("userName[j]");//这里和下面的 userName[j]都有问题,应该为"userName["+j+"]",下同
                //userName[j]=new String(userName[j].getBytes("iso-8859-1"),"utf-8");
                userPassword[j]=request.getParameter("userPassword[j]");
                userLikes[j]=request.getParameterValues("userLikes[j]");
            }
      

  2.   


    ii不是空值啊,
    在userPost.html里面有 <input   type="hidden"   name="ii"  value="0">我先说一下,我想实现的功能是,通过userPost.html首次传入用户数据,然后通过dopost方法将其存入数组中利用显示输出和hidden隐式输出实现继续保存这些数据,然后用户再输入新的数据,重新调用dopost将原先通过显式和隐式输出保存下来的数据和新添加的一个用户数据再次保存在新的数组中,就这样循环实现动态输出用户信息表单。
      

  3.   

    try,catch 一下就知道哪里空指针了。就是因为你要保存,所以那样写才有问题。不能都是一个变量名字 "userName[j]" 引号里的都是字符串。应该为"userName["+j+"]"。这样就是多个变量了
    如 userName[0]
    userName[1]
    userName[2]像你的只有
    userName[j]
    userName[j]
    userName[j]
    userName[j]
    userName[j]
      

  4.   


    嗯嗯,你刚才一说我就把它们全改过了,但是还是空指针问题,劳您看看我是不是数组定义有问题?我基础知识学的不是很牢不知该怎么改,我发现运行起来前面输入的信息都没有成功的传进数组保存起来,但是新添加的却可以动态的显示近表单,但前面都是空值null
    也就是说:问题在这里for(int j=1;j<i;j++){
    userName[j]=request.getParameter("userName["+j+"]");
    // userName[j]=new String(userName[j].getBytes("iso-8859-1"),"utf-8");
    userPassword[j]=request.getParameter("userPassword["+j+"]");
    userLikes[j]=request.getParameterValues("userLikes["+j+"]");
    }
    而这一段 userName[i]=request.getParameter("username");
    userName[i]=new String(userName[i].getBytes("iso-8859-1"),"utf-8");
    userPassword[i]=request.getParameter("password");
    userLikes[i]=request.getParameterValues("userLike");
    response.setContentType("text/html; charset=UTF-8");
    PrintWriter out = response.getWriter();是正确的
    还有着一段中有一点问题for(int j=1;j<=i;j++){
    out.println("<tr><th>"+j+"<input  name='userName["+j+"]' value="+userName[j]+"></th><th>");
    out.println("<input  name='userLikes["+j+"]' value=");
    // for(String str:userLikes[j]) out.print(str+"  ");
    out.println("/></th>"); out.println("<input  type='hidden' name='userPassword[j]' value="+userPassword[j]+">");
    }
    其他的应该也没有问题,但是我就是不知道怎么改,应该是属于基础定义的小问题吧……( ̄▽ ̄)"||
      

  5.   

    亲!亲!我知道问题在哪了!!
    这一段out.println("<table border=-3>");
        out.println("<tr><th>用户名</th><th>爱好</th>");
        for(int j=1;j<=i;j++){
            out.println("<tr><th><input  name='userName[j]' value="+userName[j]+"></th><th>");
            out.println("<input  name='userLikes[j]' value=");
            for(String str:userLikes[j]) out.print(str+"  ");
            out.println("/></th>");        out.println("<input  type='hidden' name='userPassword[j]' value="+userPassword[j]+">");
        }
        ii = String.valueOf(i);
        out.println("</table>");
        out.println("</h1>");
        out.println("<form   method=\"post\"    action=\"/first/servlet/UserPostServlet\">");
    因该把out.println("<form   method=\"post\"    action=\"/first/servlet/UserPostServlet\">");这句放在最上面,表单根本就没有用到servlet当然保存不了,天那我真是白痴……