创建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信息,名称、值和时限。
获取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);
}
}
}
相比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:
为了后期方便维护,一般将全局信息放在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);
}
}
有HttpServletRequest—请求对象,HttpSession—会话对象和ServletContext—全局对象。
请求对象,只要浏览器返回响应后,就会消亡;会话对象存在的时间更长,30分钟无访问才会销毁;而全局对象,会一直存在,直到WEB服务器关闭。
一般情况下,尽量使用请求对象,会话对象和全局对象存在时间长,比较浪费资源。