浅谈如何实现Session持久化,Session的生命周期以及其特点;
声明使用的Tomcat9&JDK9 进行测试;session作为一个容器,首先要知道的就是session 存在的位置 :在服务器的内存中 ;session的特点有以下2个【应用场景】:①共享request域;② 可用于 :保存用户信息, 来判断用户是否登录 ;比如,在登录案例中 ,把 form表单提交的 user 数据,保存到 session中,通过 cookie 把...
声明使用的Tomcat9&JDK9 进行测试;
session作为一个容器,首先要知道的就是session 存在的位置 :在服务器的内存中 ;
session的特点有以下2个【应用场景】:
①共享request域;
② 可用于 :保存用户信息, 来判断用户是否登录 ;比如,在登录案例中 ,把 form表单提交的 user 数据,保存到 session中,通过 cookie 把 session持久化【由于session 存在唯一的 id : JSESSIONID 可用于辨别 session】,从session中获取 user 数据,判断 user 的内容,从而知道用户是否在 登录的状态,或者是哪一个用户在登录;
下面演示一个判断用户登录与否,登录可下载,否则不能下载,跳转到登录页面的demo;
通过把session作为参数,持久化 cookie 来达到持久化session的目的【浏览器可以识别cookie ,从中获取session】;
session的常用方法:
//void setAttribute(String name,Object value) 储存
//Object getAttribute( String name) 获取数据
//void removeAttribute(String name) 删除session中的数据
//String sessionId = session.getId();获取id
session的生命周期:
在Tomcat 中默认存活30分钟,可以在web.xml中配置更改存活时间,如下:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
启动Tomcat,访问servlet 会创建session ,结果如下:
关闭浏览器再次访问 ,session 的name 以及 id 没有发生变化平【说明 session没有被新建】:
package com.baidu.session;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
@WebServlet(name = "Demo1", urlPatterns = "/demo1")
public class Demo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);//
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
HttpSession session = request.getSession();//获取session,设置session
session.setAttribute("name", "张三啊");
Object name = session.getAttribute("name");//获取name &id
String id = session.getId();
response.getWriter().print(name + "session的id" + id);
//通过持久化cookie
Cookie sessionName = new Cookie("sessionName", name.toString());
Cookie sessionId = new Cookie("JSESSIONID", id); //JSESSIONID 作为session的idName
sessionName.setMaxAge(60 * 30);//设置30min 存活时间
sessionId.setMaxAge(60 * 30);
response.addCookie(sessionName);
response.addCookie(sessionId);
}
//获取session,设置session ,输出到浏览器
//
}
下面演示一个判断用户登录与否,登录可下载,否则不能下载,跳转到登录页面的 demo;
①在下载的页面,点击下载 【访问 downloadservlet】,对登录进行判断;
②login.jsp 进行 form表单提交,访问 loginservlet 【设置session,并跳转至下载页面】
package www.baidu.servlets;
import www.baidu.bean.User;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
@WebServlet(name = "DownloadServlet", urlPatterns = "/DownloadServlet")
public class DownloadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);//
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User user = (User) request.getSession().getAttribute("user");
//user进行非空判断 ,若空说明没有登录,若不空,说明就已登录
if (user == null) {
response.sendRedirect("/login.jsp");
} else {// 可以进行下载
String filename = request.getParameter("filename");
//设置 urlencode
String encode = URLEncoder.encode(filename, "utf-8");
String realPath = request.getServletContext().getRealPath("WEB-INF/" + encode);
String mimeType = request.getServletContext().getMimeType(filename);
//设置header
response.setContentType(mimeType); //告知浏览器类型
response.setHeader("Content-Disposition", "attachment;filename=" + filename);//告知以附件形式下载
//循环读写下载
File file = new File(realPath);
FileInputStream fis = new FileInputStream(file);
ServletOutputStream os = response.getOutputStream();
int len = -1;
byte[] buf = new byte[1024];
while ((len = fis.read(buf)) != -1) {
os.write(buf, 0, len);
}
//关闭流
os.close();
fis.close();
}
}
}
loginservlet 的核心代码:
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = new User();
user.setName(username);
user.setPassword(password);
//获取session 将用户信息保存在session中
request.getSession().setAttribute("user",user);
//去下载页面进行下载
response.sendRedirect("download.html");
更多推荐
所有评论(0)