河南网站建设,广州自助网站制作,wordpress当前位置调用,房地产政策最新消息1 HttpSession 概述
在 Java Servlet API 中引入 session 机制来跟踪客户的状态。session 指的是在一段时间内#xff0c;单个客户与 Web 服务器的一连串相关的交互过程。在一个 session 中#xff0c;客户可能会多次请求访问同一个网页#xff0c;也有可能请求访问各种不同…1 HttpSession 概述
在 Java Servlet API 中引入 session 机制来跟踪客户的状态。session 指的是在一段时间内单个客户与 Web 服务器的一连串相关的交互过程。在一个 session 中客户可能会多次请求访问同一个网页也有可能请求访问各种不同的服务器资源。
在 Servlet API 中定义了 javax.servlet.http.HttpSession 接口Servlet 容器必须实现这个接口。当一个 session 开始时Servlet 容器创建一个 HttpSession 对象并同时在内存中为其开辟一个空间在 HttpSession 对象中可以存放客户状态的信息例如购物车。Servlet容器为 HttpSession 分配一个唯一标识符称为 SessionID。Servlet 容器把 SessionID 保存在客户的浏览器中。每次客户发出 HTTP 请求时Servlet 容器可以从 HttpRequest 对象中读取SessionID然后根据 SessionID 找到相应的 HttpSession 对象从而获取客户的状态信息。
Session 的运行机制如下图所示。 2 HttpSession 的创建与使用
1创建
Servlet 中的 HttpServletRequest 对象为我们提供了以下两种创建和获取 HttpSession 对象的方法
HttpSession sessionrequest.getSession(boolean value);HttpSession sessionrequest.getSession();
那么这两种方法有什么区别呢
在第一种方法中布尔值为 true 时如果存在与当前请求关联的会话就返回该会话。否则创建一个新的会话并把该会话返回。布尔值为 false 时如果存在与当前请求关联的会话就返回该会话。否则返回 null不再创建会话。
第二种方法等同于第一种方法中的布尔参数值为 true 时的情况。
2使用
在 javax.servlet.http.HttpSession 接口中定义的方法我们常用的是有关进行数据存取的方法。
session.setAttribute(String name,Object value) ;session.getAttribute(String name);
setAttribute(String name,Object value)是把一个对象 value 保存在 HttpSession 对象中并为其指定引用名称为 name。当我们想使用已经存储在 session 中的数据时我们可以使用 session.getAttribute(String name)方法把数据取出来。其中 name 为我们在存入数据时指定的引用名称。值得注意的是session.getAttribute(String name)方法的返回值是 Object类型所以在取出数据时我们要对其进行数据类型转换而且必须与我们存入的数据类型一致。如 String valueStringsession.getAttribute(String name); 3 HttpSession 对象的存在周期
3.1 HttpSession 对象的创建
当客户端浏览器第一次访问服务器时服务器为每个浏览器创建不同的 HttpSession 对象。在服务器端使用 request.getSession()方法来获得 HttpSession 对象并以此来使用HttpSession 接口为我们提供的方法。
3.2 HttpSession 对象的使用
在创建 HttpSession 对象后,使用该对象进行数据的存取以进行数据的传递。在此过程中我们常用的方法如下。
1void setAttribute(String name,Object value )进行数据的保存。
2Object getAttribute( String name)进行数据的读取。
3.3 HttpSession 对象的结束
在以下 3 种情况下可以结束 session。
1关闭浏览器关闭 session。
2调用 HttpSession 的 invalidate()方法删除 HttpSession 对象和数据。
3两次访问时间间隔大于 session 定义的非活动时间间隔。
在 session 结束时服务器会清空当前浏览器相关的数据信息。
4 HttpSession 实现新闻系统的用户登录
UserServlet 为处理用户注册以及登录的 Servlet其代码如下
package com.example.demo;public class UserServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponseresponse)throws ServletException, IOException {//设置编码格式 // response.setContentType(text/html;charsetUTF-8); // request.setCharacterEncoding(utf-8); //接收用户信息 String userName request.getParameter(username);String password request.getParameter(password);String email request.getParameter(email);String method request.getParameter(method);//调用 Service 方法进行业务逻辑处理 UserServiceImpl userService new UserServiceImpl();UserDao userDao new UserDaoImpl();userService.setUserDao(userDao);boolean bLogin false;User user new User();user.setUserName(userName);user.setPassword(password);if (method ! null method.equals(addUser)){user.setEmail(email);user.setUserType(Constants.USER_TYPE_COMMON);bLogin userService.addUser(user);}else{bLogin userService.isLogin(userName, password);System.out.println(bloginbLogin);}if (bLogin){request.getSession().setAttribute(admin,userName);request.getSession().setAttribute(user,user);}//响应页面 request.getRequestDispatcher(index.jsp).forward(request,response);// response.sendRedirect(index.jsp); }protected void doPost(HttpServletRequest request, HttpServletResponseresponse) throws ServletException, IOException {doGet(request, response);}
} 以上代码的黑体部分就是 HttpSession 的使用用户登录成功后将用户信息保存到会话中。