原文: https://beginnersbook.com/2013/05/http-session/

HttpSession对象用于会话管理。会话包含特定于整个应用中的特定用户的信息。当用户第一次通过request.getSession()获得HttpSession时进入网站(或在线应用)时,将为用户提供唯一 ID 以标识其会话。此唯一 ID 可以存储在 cookie 或请求参数中。

HttpSession保持活动状态,直到它的使用时间超过部署描述符文件(web.xml)中标签中指定的超时值。默认超时值为 30 分钟,如果未在标记中指定值,则使用此值。这意味着当用户未访问指定的 Web 应用时间时,会话将被 servlet 容器销毁。后续请求将不再从此会话提供,servlet 容器将创建新会话。

这是您创建HttpSession对象的方法。

  1. protected void doPost(HttpServletRequest req,
  2. HttpServletResponse res)
  3. throws ServletException, IOException {
  4. HttpSession session = req.getSession();
  5. }

您可以使用setAttribute()方法将用户信息存储到会话对象中,稍后在需要时可以从会话中获取此信息。这是您在会话中存储信息的方式。这里我们分别在属性名称为uNameuemailIduAge的会话中存储用户名,emailiduserage

  1. session.setAttribute("uName", "ChaitanyaSingh");
  2. session.setAttribute("uemailId", "[email protected]");
  3. session.setAttribute("uAge", "30");

第一个参数是属性名称,第二个是属性值。对于例如uName是属性名称,ChaitanyaSingh是上面代码中的属性值。

要从会话中获取值,我们使用HttpSession接口的getAttribute()方法。这里我们使用属性名称获取属性值。

  1. String userName = (String) session.getAttribute("uName");
  2. String userEmailId = (String) session.getAttribute("uemailId");
  3. String userAge = (String) session.getAttribute("uAge");

HttpSession的方法

public void setAttribute(String name,Object value):使用名称绑定对象,并将名称/值对存储为 HttpSession 对象的属性。如果属性已存在,则此方法将替换现有属性。

public Object getAttribute(String name):从会话对象返回参数中指定的String对象。如果未找到指定属性的对象,则getAttribute()方法返回null

public Enumeration getAttributeNames():返回一个Enumeration,其中包含作为会话对象的属性绑定的所有对象的名称。

public void removeAttribute(String name):从会话中删除给定的属性。

setMaxInactiveInterval(int interval):以秒为单位设置会话不活动时间。这是以秒为单位的时间,指定自客户端上次收到请求后会话保持活动状态的时间。

有关方法的完整列表,请参阅官方文档

会话示例

index.html

  1. <form action="login">
  2. User Name:<input type="text" name="userName"/><br/>
  3. Password:<input type="password" name="userPassword"/><br/>
  4. <input type="submit" value="submit"/>
  5. </form>

MyServlet1.java

  1. import java.io.*;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. public class MyServlet1 extends HttpServlet {
  5. public void doGet(HttpServletRequest request, HttpServletResponse response){
  6. try{
  7. response.setContentType("text/html");
  8. PrintWriter pwriter = response.getWriter();
  9. String name = request.getParameter("userName");
  10. String password = request.getParameter("userPassword");
  11. pwriter.print("Hello "+name);
  12. pwriter.print("Your Password is: "+password);
  13. HttpSession session=request.getSession();
  14. session.setAttribute("uname",name);
  15. session.setAttribute("upass",password);
  16. pwriter.print("<a href='welcome'>view details</a>");
  17. pwriter.close();
  18. }catch(Exception exp){
  19. System.out.println(exp);
  20. }
  21. }
  22. }

MyServlet2.java

  1. import java.io.*;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. public class MyServlet2 extends HttpServlet {
  5. public void doGet(HttpServletRequest request, HttpServletResponse response){
  6. try{
  7. response.setContentType("text/html");
  8. PrintWriter pwriter = response.getWriter();
  9. HttpSession session=request.getSession(false);
  10. String myName=(String)session.getAttribute("uname");
  11. String myPass=(String)session.getAttribute("upass");
  12. pwriter.print("Name: "+myName+" Pass: "+myPass);
  13. pwriter.close();
  14. }catch(Exception exp){
  15. System.out.println(exp);
  16. }
  17. }
  18. }

web.xml

  1. <web-app>
  2. <servlet>
  3. <servlet-name>Servlet1</servlet-name>
  4. <servlet-class>MyServlet1</servlet-class>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>Servlet1</servlet-name>
  8. <url-pattern>/login</url-pattern>
  9. </servlet-mapping>
  10. <servlet>
  11. <servlet-name>Servlet2</servlet-name>
  12. <servlet-class>MyServlet2</servlet-class>
  13. </servlet>
  14. <servlet-mapping>
  15. <servlet-name>Servlet2</servlet-name>
  16. <url-pattern>/welcome</url-pattern>
  17. </servlet-mapping>
  18. </web-app>

输出:

第一个界面:

Servlet 中的`HttpSession` - 图1

点击提交后:

Servlet 中的`HttpSession` - 图2

点击查看详细信息后:

Servlet 中的`HttpSession` - 图3