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 23 name 4latinyTest3 5
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中添加过大的数据。