【JavaWeb】Cookie、Session和ServletContext

导读:Cookie和Session用来保存用户的信息,常用在“XXX天内自动登录”。而ServletContext是全局对象,可以用于页尾版权信息。


Cookie: 

创建Cookie:

首先创建一个Cookie对象,是一个键值对的形式。然后对这个cookie对象进行设置,比如保存时限。最后,需要在响应中使用addCookie添加这个cookie对象,将其保存在浏览器端

@WebServlet("/cookies/login")
public class CookieLoginServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建Cookie对象
        Cookie cookie = new Cookie("user","admin");
        //设置Cookie保存时限
        cookie.setMaxAge(60*60*24*7);
        //在响应中添加Cookie对象,使之保存在浏览器端
        response.addCookie(cookie);
    }
}

在浏览器端可以查看添加的Cookie信息,名称、值和时限。

                                               【JavaWeb】Cookie、Session和ServletContext_第1张图片

获取Cookie:

由于Cookie存储在了浏览器端,当浏览器发送请求的时候,也包含了Cookie信息,需要用request.getCookies这个方法来获取。然后就可以用cookies信息,进行登录判断。

@WebServlet( "/cookies/get")
public class CookieGetServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取所有Cookies
        Cookie[] cookies=request.getCookies();
        //如果cookies为空,则没有登录
        if(cookies==null){
            response.getWriter().println("No User login");
            return;
        }
        String user=null;
        //遍历所有cookies,如果cookie的名称为"user",就获取其对应的值,稍后输出校验
        for(Cookie cookie:cookies){
            System.out.println(cookie.getName()+" :"+cookie.getValue());
            if(cookie.getName().equals("user")){
                user=cookie.getValue();
                break;
            }
        }
        //cookies中没有名为"user"的cookie
        if(user==null){
            response.getWriter().println("No User login");
        }else{
            response.getWriter().println("user"+user);
        }
    }
}

Session:

相比Cookie,Session将数据保存在服务器端,更为安全,同时有唯一SessionId进行指定,不必在大量Cookies中进行筛选。

创建Session:

Session需要在请求中进行创建。如果请求中包含了getSession,服务器端就会添加一个SessionId指向这个Session。

@WebServlet("/session/login")
public class SessionLoginServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //在请求中获取Session对象
        HttpSession session=request.getSession();
        //设置session键值对
        session.setAttribute("user","Admin");
        request.getRequestDispatcher("/session/get").forward(request,response);
    }
}

获取Session:

还是用getSession来获得请求中的session,利用session.getAttribute和getId方法,来获取session中的内容和ID。

@WebServlet("/session/get")
public class SessionGetServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求中的Session
        HttpSession session=request.getSession();
        //获取user
        String user=(String)session.getAttribute("user");
        //获取sessionId
        String sessionId=session.getId();
        response.getWriter().println("user:"+user);
    }
}

当浏览器关闭后,session也会消失,下一次请求将会分配不同的sessionId。


ServletContext

创建ServletContext:

为了后期方便维护,一般将全局信息放在web.xml的配置文件中:



    title
    XXX网
    

    copyright
    2019 xxx.com copyright

首先,创建一个初始化ServletContext的InitServlet,用getServletContext方法,即可获取全局Servlet对象。然后用context对象的getInitParameter方法,获取web.xml中的配置信息。最后,使用context.setAttribute方法,设置全局Servlet对象的属性。

@WebServlet("/servletcontext/init")
public class ServletContextInitServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext context=getServletContext();
        String copyright=context.getInitParameter("copyright");
        String title=context.getInitParameter("title");
        context.setAttribute("copyright",copyright);
        context.setAttribute("title",title);
    }
}

 获取ServletContext:

首先还是要先获取ServletContext对象,然后利用这个对象的getAttribute方法获取属性,最后输出。

@WebServlet("/servletcontext/get")
public class ServletContextGetServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext context=getServletContext();
        String copyright=(String)context.getAttribute("copyright");
        String title=(String)context.getAttribute("title");
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println("

"+title+"

"+copyright); } }

JavaWeb三大作用域对象

有HttpServletRequest—请求对象,HttpSession—会话对象和ServletContext—全局对象。

请求对象,只要浏览器返回响应后,就会消亡;会话对象存在的时间更长,30分钟无访问才会销毁;而全局对象,会一直存在,直到WEB服务器关闭。

一般情况下,尽量使用请求对象,会话对象和全局对象存在时间长,比较浪费资源。

你可能感兴趣的:(Java,JavaWeb)