一、servletContext图解
正如上图所示:因为ServletContext数据长期保存在服务器,会占用内存,因此建议不要像服务器中添加过大的数据。
二、ServletContext与session、cookie有什么异同
1,servletContext和session一样保存在服务端。
2,servletContext在服务器单独为它开辟内存空间,可以被所有用户共享。
3,ServletContext当web应用启动的时候自动被创建。
4,ServletContext当tomcat关闭,或者web应用reload的时候,servletContext自动销毁。
三、ServletContext使用场景
1,网页计数器
2,在线用户显示
3,简单的聊天系统等。
总之:如果是不同页面共享数据,而这些数据量不大,同时又不想操作数据库我们就可以考虑使用ServletContext。
四、ServletContext如何使用?
1,得到ServletContext
this.getServletContext();或 this.getServletConfig().getServletContext();
2,添加属性
servletContext.setAttribute(String,Object);
3,获取属性
servletContext.getAttribute("属性名");
4,删除属性
servletContext.removeAttribute("属性名");
五、ServletContext特殊使用
1,获取web应用初始化参数
<context-param>
<param-name>username</param-name>
<param-value>scott</param-value>
</context-param>
2,使用ServletContext实现跳转
this.getServletContext().getRequestDispatcher("/login").forward(req, resp);
3,读取文件
(1)【web目录或WEB-INF下的文件】
InputStream inputStream=this.getServletContext().getResourceAsStream("dbinfo.Properties");
//创建Properties
Properties pp=new Properties();
pp.load(inputStream);
String username=pp.getProperty("username");
String password=pp.getProperty("password");
out.println("username="+username+" password="+password);
(2)如果文件放在src目录下则用类加载器进行加载
InputStream is =Servlet5.class.getClass().getResourceAsStream("dbinfo.Properties");
(3)获取文件全路径,加载文件
String path = getServletContext().getRealPath("/imag/bg.jpg");
System.out.println("path = "+path);
InputStream inputStream = this.getServletContext().getResourceAsStream(path);
六、ServletConfig
(1)servletConfig主要用于读取servlet的配置信息(即:读取web.xlm)
<servlet>
<servlet-name>ConfigTest</servlet-name>
<servlet-class>com.hsp.model.ConfigTest</servlet-class>
<!-- 这里可以给servlet配置信息,这里配置的信息只能被该servlet读取 -->
<init-param>
<param-name>encoding</param-name>
<param-value>gbk</param-value>
</init-param>
<!-- 1表示该servlet被初始化的顺序 -->
<load-on-startup>1</load-on-startup>
</servlet>
针对上面配置,读取配置信息。
String encoding=this.getServletConfig().getInitParameter("encoding");
(2)针对某个servlet配置,读取该servlet所有配置参数信息
Enumeration<String> names=this.getServletConfig().getInitParameterNames();
while(names.hasMoreElements()){
String name=names.nextElement();
System.out.println(name);
System.out.println(this.getServletConfig().getInitParameter(name));
}
}