每日一记--session/servletContext

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>
原文地址:https://www.cnblogs.com/ZNwithLC/p/9532125.html