8 ServletContext

1 为什么需要ServletContext 技术

显示网站多少人在线,显示当前登录者是第几位登录者等信息。

 

2 什么是ServletContext

  可以把它想象成一个服务器上的公共空间,每个用户都可以访问到它。 Web 容器在启动时,它会为每个Web 应用程序都创建一个对应的ServletContext对象,它代表当前web应用。

① ServletContext 在服务器端

② ServletContext 被所有客户端共享

③ ServletContext 当Web应用启动时,自动创建

④ web应用关闭/tomcat关闭/reload,ServletContext自动消亡

 

3 创建

ServletContext 对象可以通过 getServletConfig().getServletContext()方法获得,也可以通过this.getServletContext()获得。

 

4 删除

ServletContext.removeAttribute("counter");

5 实际应用

① 获取web应用的初始化参数

 1 <!-- 所有servlet都可以访问 -->
 2   <context-param>
 3       <param-name>name</param-name>
 4       <param-value>latinyTest3</param-value>
 5   </context-param>
6 //获取: 7 ServletContext serCon = this.getServletContext(); 8 String name = serCon.getInitParameter("name"); 9
10 //如果文件在src下,应该使用类加载器读取 11 InputStream 12 inpStr2= ContextTest5.class.getClassLoader().getResourceAsStream("dbinfo.properties");

② 跳转页面技术

//1 response.sendRedirect("/web应用名/资源名");
//2 request.getRequestDispatcher("/资源名").forward(request, response);
//3 this.getServletContext().getRequestDispatcher("/url").forward(request, response);

③ 读取资源文件

//a 创建资源文件,dbinfo.properties
username=latiny
password=123456abc
age=28
sex=male

  

//b读取资源文件
ServletContext serCon = this.getServletContext();
//1 首先读取到文件
InputStream inpStr = serCon.getResourceAsStream("dbinfo.properties");
//2 创建Properties,然后loadinStr到Properties对象里
Properties proper= new Properties();
proper.load(inpStr);
        
//根据Properties对象的key获取value
String name=proper.getProperty("username");
String password=proper.getProperty("password");

  

④ 获取文件全路径

ServletContext serCon = this.getServletContext();
//读取到文件全路径
String path = serCon.getRealPath("/images/2.png");
String path = serCon.getRealPath("2.png");

⑤ web网站实际应用

网站计数器;网站在线用户显示;简单聊天系统;

如果涉及到不同用户共享数据,并且这些数据量不大,同时又不希望写入到数据库中,则可以考虑ServletContext实现;

 

实现网站计数器功能时,用户每刷新一次会自动增加一次访问记录,如何避免表单重复提交:

使用sendRedirect 访问即可:

response.sendRedirect("/UserManager4/MainFrame");

 

⑥ 使用ServletContext注意事项

ServletContext会长时间保存在服务器内存中,因此建议不要想ServletContext中添加过大的数据。

原文地址:https://www.cnblogs.com/Latiny/p/8458539.html