Day51
*重定向:
<body>
<a href="redirect?name=query">查询</a><br>
<a href="redirect?name=insert">删除</a>
</body>
String name = req.getParameter("name");
//通过name 来判断 重定向的目标资源文件
switch (name){
case "query":
resp.sendRedirect("query.jsp");
break;
case "insert":
resp.sendRedirect("insert.jsp");
break;
}
*Cookie:一般用于网页登录的用户名,密码保存;或者多长时间内自动登录功能
String username = req.getParameter("username");
String password = req.getParameter("password");
//创建cookie对象,将用户设置到cookie中
Cookie usernameCookie = new Cookie("username",username);
//给cookie设置过期时间,单位是秒
usernameCookie.setMaxAge(10);
Cookie passwordCookie = new Cookie("password",password);
passwordCookie.setMaxAge(10);
resp.addCookie(usernameCookie);
resp.addCookie(passwordCookie);
cookie信息是保存在客户端的(浏览器),而不是服务器中。如果不设置cookie的过期时间,则当浏览器被关闭时,就会被销毁;而设置了时间,则是过了时间之后才会被销毁。如果用户清理了浏览器的信息,同样也会删除这些信息
//获取所有的cookie信息
Cookie[] cookies = req.getCookies();
if(cookies != null){
for(Cookie c : cookies){
System.out.println(c.getName()+"="+c.getValue());
}
}
*Session:用例:淘宝网在不登录的情况下,点开一些网页,然后在某个网页登录,再将别的网页刷新一遍会发现,全都自动登录上了。
I. 代码部分
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//这里是将user对象保存到了session对象中
User user = new User();
user.setId(1);
user.setName("张三");
req.getSession().setAttribute("user",user);
}
使用jsp中自带的session对象可以直接获取
<body>
欢迎您:<%=session.getAttribute("user")%>
</body>
II. 流程图
session对象是保存在服务器端的,sessionid保存在客户端。当服务器被关闭时,所有的session对象都会被销毁,重启之后,虽然服务器发送请求时,在请求头中还是有sessionid,但是服务器无法通过此id找到对应的session对象了。当客户端被关闭之后,sessionid就会被销毁,再次访问服务器时,就相当于第一次访问,虽然上一次的session对象还是保存在服务器中,但是没有sessionid根本访问不到
*ServletContext(application):这是一个全局对象,在整个项目中,只会存在一个
<body>
<%
Integer i = (Integer) application.getAttribute("count");
//如果是空,则代表是第一次访问
if(i == null){
application.setAttribute("count",1);
}else {
//如果不是第一次访问,就在上一次访问的基础上加1
application.setAttribute("count",++i);
}
%>
您是第<%=application.getAttribute("count") %>个访问该页面的用户<br>
<!-- 这里可以看到打印的是true,所以jsp中的application也是ServletContext对象 -->
<%= application == request.getServletContext()%>
</body>ication == request.getServletContext()%>
</body>
ServletContext对象是保存在服务器中的,有且只有一个,服务器被关闭时才会被销毁