session机制代码实现
public class SessionA extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求编码格式
request.setCharacterEncoding("utf-8");
//设置响应编码格式
response.setContentType("text/html;charset=utf-8");
//获取请求信息
String uname=request.getParameter("uname");
//处理请求信息
HttpSession session=request.getSession();
session.setAttribute("uname",uname);
System.out.println("SessionA"+uname);
System.out.println(session.getId());
//响应处理结果
//重定向
response.sendRedirect("b");
}
}
public class SessionB extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求编码格式
request.setCharacterEncoding("utf-8");
//设置响应编码格式
response.setContentType("text/html;charset=utf-8");
//获取请求信息
//创建session对象
HttpSession session=request.getSession();
//获取A处理的数据
String uname=(String) session.getAttribute("uname");
System.out.println("SessionB"+uname);
//处理请求信息
}
}
实现步骤 创建两个servlet 分别是SessionA和SessionB url分别为/a和/b SessionA中重定向到SessionB 请求/a时附带参数 利用session技术在SessionB中拿到参数 从而解决了重定向技术中的数据流转的获取问题 以下是实现结果
可以看到 在请求/a时 服务器创建了一个session对象 并把session的ID以cookie的形式发送给客户端浏览器(可在图2的响应头中看到) 而重定向请求/b时 浏览器带上了这个session-ID的cookie发送给服务器(具体可见图3的请求头) 服务器根据这个ID找到对应的session对象 而不用创建新的session对象了 后台根据session对象拿到了uname数据