Servlet和JSP学习总结(八)--Session
Session是另一种记录客户状态的机制,与Cookie将客户状态保存在客户端浏览器中的形式不同,Session将客户状态保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。客户端浏览器再次访问时只需要从该Session中查找该客户的状态即可。
HttpSession接口是Java对Session机制的实现规范,它位于javax.servlet.http包中。
HttpSession对象在用户第一次访问网站的时候自动被创建,你可以通过调用HttpServletRequest的getSession方法获取该对象。getSession有两个重载方法:
HttpSession getSession()
HttpSession getSession(boolean create)
没有参数的getSession方法会返回当前的HttpSession,若当前没有,则创建一个返回。getSession(false)返回当前HttpSession,如当前会话不存在,则返回null。getSession(true)与没有参数的getSession方法一致,也是返回当前HttpSession,若当前没有,则创建一个。
可以通过HttpSession的setAttribute方法将值放入HttpSession,该方法签名如下:
void setAttribute(String name, Object value)
调用setAttribute方法时,若传入的name参数此前已经使用过,则会用新值覆盖旧值。
通过调用HttpSession的getAttribute方法可以取回之前放入的对象,该方法的签名如下:
Object getAttribute(String name)
注意,所有保存在HttpSession的数据不会被发送到客户端。
可以通过调用HttpSession的getId方法来读取Session的ID。Servlet容器为每个HttpSession生成唯一的标识,并为这个标识创建一个名为JSESSIONID的cookie。在后续的请求中,浏览器会将标识提交给服务端,这样服务器就可以识别该请求是由哪个用户发起的。
下面是几种使Session失效的方法:
- 在项目的部署描述文件中进行设置:
<session-config>
<session-timeout>1</session-timeout>
</session-config>
该Session会在最后一次访问一分钟后失效
- 直接在应用服务器中设置。如果是tomcat,可以在tomcat目录下conf/web.xml中找到<session-config>元素,tomcat默认设置是30分钟,只要修改这个值即可。
- 对HttpSession调用setMaxInactiveInterval方法来设定其超时时间:
void setMaxInactiveInterval(int seconds)
- 对HttpSession调用invalidate方法强制使会话过期。
下面我们编写程序来创建一个Session:
package com.mc.hello;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet(urlPatterns = { "/mysession" })
public class SessionDemoServlet extends HttpServlet {
private static final long serialVersionUID = 36L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
session.setAttribute("name", "maconn");
Cookie[] cookies = request.getCookies();
if(cookies != null) {
for (Cookie cookie : cookies) {
out.print(cookie.getName() + " = " + session.getId());
}
}
else
out.print("no cookie");
}
}
第一次打开页面,由于之前此时还不存在Session,也就不存在JSESSIONID对应的cookie,此时网页上会显示"no cookie"。再次刷新页面,就会看到Session对应的JSESSIONID。
上一篇: SqlServer 常用函数
下一篇: 如何设置屏幕保护色 博客分类: 记录备忘
推荐阅读
-
Servlet+JSP(十):Session 学习
-
Servlet和JSP学习总结(八)--Session
-
jsp和servlet中实现页面跳转的方式实例总结
-
也谈session在JSP和Servlet中不一致问题
-
jsp和servlet知识点总结(转载)
-
JSP学习之Cookie、Session的介绍和使用
-
51单片机学习总结(八)ADDA(XPT2046)和PWM方波控制舵机
-
vue入门学习知识要点总结(八),Vue在脚手架的使用,过渡与动画,AJAX和插槽
-
MySQL学习总结(八)DDL语言之常见约束/六大约束/添加约束/列级约束/表级约束/列级约束和表级约束的区别/复合主键/主键和唯一的区别/修改表时删除约束
-
Servlet、Jsp学习小总结