Servlet-cookies机制

通过cookies,可以保存用户的使用习惯,优化用户体验,同时能减轻服务端压力.下面说下在Servlet中cookies机制的使用

就用保存用户登录数据来举例子:

打开网页的处理Servlet:

package com.zhangwei;

import java.io.*;
import javax.servlet.http.*;

public class CookiesPreCheck extends HttpServlet{
    
    //处理get请求
    public void doGet(HttpServletRequest req, HttpServletResponse res){
        res.setContentType("text/html; charset=GBK");
        Cookie[] cookiearray = req.getCookies();
        if(cookiearray != null){
            String username = null;
            String password = null;
            try{
                PrintWriter pw = res.getWriter();
                for(int i = 0; i<cookiearray.length;i++){
                    Cookie temp = cookiearray[i];
                    if(temp.getName().equals("username")){
                        username = new String(temp.getValue());
                    }
                    if(temp.getName().equals("password")){
                        password = new String(temp.getValue());
                    }
                }
                pw.print(username+password);
                if(username!=null && password!= null){
                    HttpSession hs = req.getSession(true);
                    hs.setAttribute("username",username);
                    hs.setAttribute("password",password);
                    res.sendRedirect("account");
                    return ;
                }
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        try{
            res.sendRedirect("login");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public void doPost(HttpServletRequest req, HttpServletResponse res){
        
        this.doGet(req,res);
    }
}

主要做了一件事情,检测本地的cookies,看里面是否保存了用户信息,如果有,那么就将用户信息写到session,如果没有就跳转到登录页面.

用户信息页面主要是从会话中获取并显示用户信息

登录页面主要是实现用户登录,并且将用户账号密码通过表单传递到登录处理页面

登录处理页面:

package com.zhangwei;

import java.io.*;
import javax.servlet.http.*;

public class LoginCL extends HttpServlet{
    
    //处理get请求
    public void doGet(HttpServletRequest req, HttpServletResponse res){
        res.setContentType("text/html; charset=GBK");
        this.doPost(req,res);
    }
    public void doPost(HttpServletRequest req, HttpServletResponse res){

        String username = req.getParameter("username");
        String passwd = req.getParameter("passwd");
        //验证,并且将用户数据写入session和cookies
        try{
            HttpSession hs = req.getSession(true);
            hs.setAttribute("username",username);
            hs.setAttribute("password",passwd);
            Cookie c = new Cookie("username",username);
            Cookie e = new Cookie("password",passwd);
            //不设置有效时间的话cookies就不会被保存
            c.setMaxAge(30);
            e.setMaxAge(30);
            //res.sendRedirect("account");
            res.addCookie(c);
            res.addCookie(e);
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }
}

用户处理页面主要做的事情是验证用户信息,如果通过,就将用户信息写入session和cookies,然后跳转到用户页面(当然也可以只写入cookies,然后跳转到根目录)

原文地址:https://www.cnblogs.com/color-my-life/p/3980493.html