HttpSession
1. 什么是HttpSession?
其实就是一个服务器与用户之间的一个对话。当用户第一次访问Servlet的时候,服务器端会给用户创建一个独立的Session,相当于创建了一个独立的房间,这个房间有唯一的ID,也就是sessionID。服务器会将sessionID以cookie的方式发送给浏览器。当浏览器再次访问服务器时,会将sessionID发送过来,服务器依据sessionID就可以找到对应的session对象。
2. 直接看例子
这里用两个数相加后再进行平方的运算作为例子,内含注释简单易懂
(1)Addnumber类
package com.xiaoming;
import java.io.IOException;
import java.net.http.HttpRequest;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class Addnumber extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest req , HttpServletResponse res) throws IOException, ServletException{
int i = Integer.parseInt(req.getParameter("num1"));//从请求中获取到num1的值
int j = Integer.parseInt(req.getParameter("num2"));//从请求中获取到num2的值
int count = i + j;
// 创建session
HttpSession session = req.getSession();
session.setAttribute("count", count);
// 注意,这里的是set,把key=count以及它的值value=i + j构成(key,value)放进session里面
res.sendRedirect("sq");//把请求重定向到sq
}
}
(2)Sqnumber类
package com.xiaoming;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class Sqnumber extends HttpServlet{
public void doGet(HttpServletRequest req , HttpServletResponse res) throws IOException{
// 创建session对象
HttpSession session = req.getSession();
// 注意,这里是get,获取session中key=count的值,注意类型转换
int k = (int) session.getAttribute("count");
session.removeAttribute("count");//调用该方法移除session中的count
k = k * k;
PrintWriter out = res.getWriter();
out.println("Result is " + k);
System.out.println("Sqnumber called");
}
}
(3)index.html
<!DOCTYPE html>
<html>
<body>
<form action="add" method="get">
<!-- 注意,上面action定向到add,方法是get -->
输入第一个数 : <input type="text" name="num1"><br>
输入第二个数 : <input type="text" name="num2"><br>
<input type="submit">
</form>
</body>
</html>
(4)web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_7.xsd" id="WebApp_ID" version="3.1">
<servlet>
<servlet-name>addnumber</servlet-name>
<servlet-class>com.xiaoming.Addnumber</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>addnumber</servlet-name>
<url-pattern>/add</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>sqnumber</servlet-name>
<servlet-class>com.xiaoming.Sqnumber</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sqnumber</servlet-name>
<url-pattern>/sq</url-pattern>
</servlet-mapping>
</web-app>
3. 运行index.html
如图所示,输入4,3
点击提交,结果如图,注意地址栏的变化,这里的变化与web.xml文件有关,可以看看为什么变了