Servlet中HttpSession使用
1 HttpSession会话跟踪原理
服务器会为每一个用户创建一个独立的HttpSession对象。
- 当用户第一次访问Servlet时,服务器端会给用户创建一个独立的HttpSession对象,并且生成一个Session ID,这个Session ID在响应浏览器的时候会被装进Cookie中,从而被保存到浏览器中。
- 当用户再一次访问Servlet时,请求中会携带着Cookie中的Session ID去访问
- 服务器会根据这个Session ID去查看是否有对应的HttpSession对象。有就拿出来使用(服务器会认为用户已经访问过);没有就创建一个新的HttpSession (服务器这时会认为用户第一次访问)
2 如何获得HttpSession对象
HttpServletRequest接口提供了两种方法来获取HttpSession的对象:
方法名称 | 说明 |
---|---|
public HttpSession getSession() | 返回与此请求关联的当前会话,或者如果该请求没有会话,则创建一个。 |
public HttpSession getSession(boolean create) | 返回与此请求关联的当前HttpSession,或者,如果没有当前会话且create为true,则返回一个新会话。 |
3 HttpSession常用方法
方法名称 | 说明 |
---|---|
public String getId() | 返回包含唯一标识符值的字符串。 |
public long getCreationTime() | 返回创建此会话的时间,以1970年1月1日0点以来的格林威治标准时间(为毫秒数单位)。 |
public long getLastAccessedTime() | 返回客户端最后一次发送与此会话相关联的请求的时间,以1970年1月1日0点以来的格林威治标准时间(为毫秒数单位)。 |
public void invalidate() | 使此会话无效,把绑定到HttpSession的所有对象解绑。 |
4 HttpSession的案例
在下面的示例中,我们在一个Servlet的会话范围内设置属性,并从另一个Servlet的会话范围获取该值。为了在会话范围内设置属性,我们使用了HttpSession接口的setAttribute()方法,并且为了获取属性,我们使用了getAttribute方法。
4.1 编写页面
index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>一点教程网-HttpSession案例</title>
</head>
<body>
<form action="servlet1">
用户名:<input type="text" name="userName"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
4.2 编写FirstServlet
FirstServlet:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
/**
* 一点教程网 - http://www.yiidian.com
*/
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try{
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String n=request.getParameter("userName");
out.print("欢迎 "+n);
HttpSession session=request.getSession();
session.setAttribute("uname",n);
out.print("<a href='servlet2'>访问</a>");
out.close();
}catch(Exception e){
System.out.println(e);
}
}
}
4.3 编写SecondServlet
SecondServlet:
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
/**
* 一点教程网 - http://www.yiidian.com
*/
public class SecondServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try{
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
HttpSession session=request.getSession(false);
String n=(String)session.getAttribute("uname");
out.print("你好 "+n);
out.close();
}catch(Exception e){
System.out.println(e);
}
}
}
4.4 配置web.xml
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/servlet1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>SecondServlet</servlet-name>
<servlet-class>SecondServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SecondServlet</servlet-name>
<url-pattern>/servlet2</url-pattern>
</servlet-mapping>
</web-app>
4.5 运行测试
点击“提交”,如下:
点击“访问”,如下:
热门文章
优秀文章