import javax.servlet.*;
import java.io.*;
import javax.servlet.http.*;public class LoginServlet2 extends HttpServlet
{
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
               throws ServletException,IOException
    {
        String action=req.getParameter("action");
        if("chk".equals(action))
        {
            String name=req.getParameter("user");
            String pwd=req.getParameter("password");
            if((name!=null) && (pwd!=null))
            {
                if(name.equals("zhangsan") && pwd.equals("1234"))
                {   
                    StringBuffer sb=new StringBuffer();
                    sb.append("username=");
                    sb.append(name);
                    sb.append("&password=");
                    sb.append(pwd);
                    Cookie cookie=new Cookie("userinfo",sb.toString());
                    cookie.setMaxAge(1800);
                    resp.addCookie(cookie);
                    resp.sendRedirect("greet2");
                    return;
                }
                else
                {
                    resp.setContentType("text/html;charset=gb2312");
                    PrintWriter out=resp.getWriter();
                    out.println("用户名或密码错误,请<a href=login2>重新登录</a>");
                    return;
                }
            }
        }
        else
        {
            resp.setContentType("text/html;charset=gb2312");
            PrintWriter out=resp.getWriter();
            out.println("<html>");
            out.println("<meta http-equiv=\"Pragma\" content=\"no-cache\">");
            out.println("<head><title>登录页面</title></head>");
            out.println("<body>");
            out.println("<p>");
            out.println("<form method=post action=login2?action=chk>");
        
            out.println("<table>");
            
            out.println("<tr>");
            out.println("<td>请输入用户名</td>");
            out.println("<td><input type=text name=user></td>");
            out.println("</tr>");
            
            out.println("<tr>");
            out.println("<td>请输入密码</td>");
            out.println("<td><input type=password name=password></td>");
            out.println("</tr>");
            
            out.println("<tr>");
            out.println("<td><input type=reset value=重填></td>");
            out.println("<td><input type=submit value=登录></td>");
            out.println("</tr>");
            
            out.println("</table></form></body></html>");        
            out.close();
        }
    }
    
    public void doPost(HttpServletRequest req, HttpServletResponse resp)
               throws ServletException,IOException
    {
        doGet(req,resp);
    }
}
package org.sunxin.lesson.jsp.ch09;import javax.servlet.*;
import java.io.*;
import javax.servlet.http.*;public class GreetServlet2 extends HttpServlet
{
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
               throws ServletException,IOException
    {
        Cookie[] cookies=req.getCookies();           
        if(null!=cookies && cookies.length!=0)
        {           
            String name=null;
            String pwd=null;
             for(int i=0;i<cookies.length;i++)
             {
                Cookie cookie=cookies[i];
                String cName=cookie.getName();
                
                if(cName.equals("userinfo"))
                {
                    String cValue=cookie.getValue();
                    String[] userInfo=cValue.split("&");
                    for(int j=0;j<userInfo.length;j++)
                    {
                        String[] value=userInfo[j].split("=");
                        if(value[0].equals("username"))
                        {
                            name=value[1];
                        }
                        if(value[0].equals("password"))
                        {
                            pwd=value[1];
                        }
                    }
                }
            }
            if("zhangsan".equals(name) && "1234".equals(pwd))
            {
                resp.setContentType("text/html;charset=gb2312");
                PrintWriter out=resp.getWriter();
                out.println("<html>");
                out.println("<meta http-equiv=\"Pragma\" content=\"no-cache\">");
                out.println("<head><title>欢迎页面</title></head>");
                out.println("<body>");
                out.println(name+",欢迎你");
                out.println("<a href=login2>重新登录</a>");
                out.println("</body></html>");            
                out.close();
                return;
            }
        }
       
        RequestDispatcher rd=req.getRequestDispatcher("login2");
        rd.forward(req,resp);    
    }
}
在LoginServlet2里输入了zhangsan 和密码 1234
在 if(value[0].equals("username"))
    {
        name=value[1];
    }跳了错误是:严重: Servlet.service() for servlet GreetServlet2 threw exception
java.lang.ArrayIndexOutOfBoundsException: 1
at org.sunxin.lesson.jsp.ch09.GreetServlet2.doGet(GreetServlet2.java:31)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:856)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:565)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1509)
at java.lang.Thread.run(Thread.java:595)

解决方案 »

  1.   


    String[] value=userInfo[j].split("="); 当userInfo[j]中没"="时, if(value[0].equals("username")) 
        { 
            name=value[1]; 
        } 就不能使用value[1]了.建议先判断是否有"=";
      

  2.   

    if(value[0].equals("username")) 
        { 
            name=value[1]; 
        } 
    有问题。
      

  3.   


    StringBuffer sb=new StringBuffer(); 
                        sb.append("username="); 
                        sb.append(name); 
                        sb.append("&password="); 
                        sb.append(pwd); 在上面的代码中 是这样添加的 他是有 = & 这2个符号的