1.什么是Session
Session是在服务器保存客户端信息的一种技术
2.使用HttpSession管理会话
在java中,使用javax.servlet.http.HttpSession类来实现session会话。每个请求者对应一个Session对象,客户的所有状态信息都保存在该对象里。当用户第一次请求服务器时,就创建Session对象。它以key-value的形式进行保存,通过getAttribute(String key)和setAttribute(String key,Object value)方法读写客户状态信息。Servlet里通过request.getSession()方法获取该客户的Session对象,
例如:
HttpSession session = request.getSession(); // 获取Session对象
session.setAttribute(“loginTime”, new Date()); // 设置Session中的属性
Session应用:
一、在Session中保存数据
public class Session01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决乱码问题
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");//用于设置发送到客户端的响应的内容类型
// 获取Session
HttpSession session = req.getSession();
// 在session中保存数据
session.setAttribute("userName","中国人");
// 获取Session的id
String sessionId = session.getId();
//判断Session是不是新创建的
// isNew()该方法用于判断当前用户是否为新用户,可以判断用户是否刷新了当前页面。
// 它的返回值为 boolean 类型。返回值:如果当前用户是新用户则返回 true,否则返回 false。
if (session.isNew()){
resp.getWriter().print("session创建成功,ID"+sessionId);
}else {
resp.getWriter().print("session以及在服务器中存在了,ID"+sessionId);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
二、获取Session中保存的数据
public class sessionGetData extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决乱码
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");//用于设置发送到客户端的响应的内容类型
//获取Session
HttpSession session = req.getSession();
String userName = (String) session.getAttribute("userName");
resp.getWriter().print(userName);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
三、手动注销毁Session
public class Session02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
session.removeAttribute("userName");
// 手动注销Session
session.invalidate();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
四、配置web.xml
<servlet>
<servlet-name>Session01</servlet-name>
<servlet-class>com.Zeng.session.Session01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Session01</servlet-name>
<url-pattern>/session01</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Session02</servlet-name>
<servlet-class>com.Zeng.session.Session02</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Session02</servlet-name>
<url-pattern>/session02</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>sessionGetData</servlet-name>
<servlet-class>com.Zeng.session.sessionGetData</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sessionGetData</servlet-name>
<url-pattern>/sessionGetData</url-pattern>
</servlet-mapping>
五、设置Session的有效时间在web.xml配置
<!--设置Session有效时间-->
<session-config>
<session-timeout>15</session-timeout>//设置Session有效时间为15min
</session-config>