1、Session
Session就是服务器数据共享技术,能够将一次请求内的不同Servlet的数据共享。
原理:
用户使用浏览器第一次向服务器发送请求,服务器在接受到请求后,调用对应的Servlet进行处理。在处理过程中会给用户创建一个session对象,用来存储用户请求处理相关的公共数据,并将session对象的JSESSIONID以Cookie的形式存储在浏览器中(临时存储,浏览器关闭即失效)。用户在发起第二次请求后及后续请求时,请求信息中会附带JSESSIONID,服务器在接收到请求后,调用对应的Servlet进行请求处理,同时根据JSESSIONID返回其对应的session对象。
作用域:
一次会话。
代码:
1 public class SessionServlet extends HttpServlet { 2 @Override 3 protected void service(HttpServletRequest req, HttpServletResponse resp) 4 throws ServletException, IOException { 5 //设置请求编码格式 6 req.setCharacterEncoding("utf-8"); 7 //设置响应编码格式 8 resp.setContentType("text/html;charset=utf-8"); 9 //获取请求信息 10 String name="随机"; 11 //处理请求信息 12 //创建session对象 13 HttpSession hs=req.getSession(); 14 //设置session的存储时间 15 //hs.setMaxInactiveInterval(5); 16 System.out.println(hs.getId()); 17 //设置session强制失效 18 //hs.invalidate(); 19 //存储数据 20 hs.setAttribute("name",name); 21 } 22 }
2、ServletContext
针对不同用户之间的数据共享问题。
原理:
ServletContext对象由服务器进行创建,一个项目只有一个对象。不管在项目的任意位置进行获取得到的都是同一个对象,该对象由所有的用户共同拥有。
生命周期:
服务器启动到服务器关闭。
代码:
1 public class ServletContextServlet extends HttpServlet { 2 @Override 3 protected void service(HttpServletRequest req, HttpServletResponse resp) 4 throws ServletException, IOException { 5 //获取ServletContext对象 6 //第一种方式: 7 ServletContext sc=this.getServletContext(); 8 //第二种方式: 9 ServletContext sc2=this.getServletConfig().getServletContext(); 10 //第三种方式: 11 ServletContext sc3=req.getSession().getServletContext(); 12 System.out.println(sc==sc2); 13 System.out.println(sc==sc3); 14 //使用ServletContext对象完成数据共享 15 //数据存储 16 sc.setAttribute("str", "ServletContext对象学习"); 17 //获取项目web.xml的全局配置数据 18 String str = sc.getInitParameter("name2"); 19 System.out.println("全局配置参数:"+str); 20 //获取项目根目录下的资源的绝对路径 21 //String path="D:\\apache-tomcat-7.0.56\\webapps\\sc\\doc\\1.txt"; 22 String path=sc.getRealPath("/doc/1.txt"); 23 System.out.println(path); 24 //获取项目根目录下资源的流对象 25 InputStream is = sc.getResourceAsStream("/doc/1.txt"); 26 27 } 28 }
关于怎么在XML进行ServletContext的配置:
1 <servlet> 2 <init-param> 3 <param-name>config</param-name> 4 <param-value>utf-8</param-value> 5 </init-param> 6 </servlet>