ServletContext概述
服务器会为每个应用创建一个ServletContext对象,ServletContext:
- 它是servlet三大域对象之一.
- ServletContext它是只有一个实例的对象,一个web应用只有一个ServletContext。
- ServletContext对象的创建是在服务器启动时完成的。
- ServletContext对象的销毁是在服务器关闭时完成的。
ServletContext的功能
1、域功能,内部有Map,可以用来存取数据。
servletContext.setAttributr("name","zhangsan");//在ServletContext域中保存了一个名为name的数据。
servletContext.setAttributr("name","lisi");//替换名为name的数据。
String name=(String)servletContext.getAttributr("name");//获取ServletContext中名为name的数据。
servletContext.removeAttribute("name");//移除ServletContext中名为name的属性。
Enumeration e=servletContext.getAttributNames();//获取所有ServletContext域所有属性名称。
在ServletContext中保存的数据可以供当前应用程序中任何动态资源共享。
2、访问当前web应用的资源
String getRealPath(String path);//获取指定资源的真实路径。
将路径/WEB-INF/abc.txt自动识别补全:F:/a/b/c/webapps/hello/WEB-INF/abc.txt,省去了一系列麻烦。
3、获取资源流
可以通过ServletContext获取资源流,即把资源以输入流的方式获取。
- 获取a.txt资源流:
InputStream in=servletContext.getResourceAsStream("/a.txt");
当前项目路径。 - 获取b.txt资源流:
InputStream in=servletContext.getResourceAsStream("/WEB-INF/b.txt");
4、获取指定目录下所有资源路径
例如获取/WEB-INF下所有资源的路径:
Set set=context.getResourcePath("/WEB-INF");
System.out.println(set);
5、获取web.xml中配置的应用初始化参数。
String xx=servletContext.getInitParameter("xxx");
6、获取ServletContext对象
- ServletContext context=servletConfig.getServletContext()
- GenericServlet类本身也有getServletContext()方法,如果你的Servlet是它的子类,那么可以使用this.getServletContext();
访问量统计
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* 1、获取application
* 2、获取application中的count
* 3、判断count是否存在
* 4、如果为null,说明还没开始计数,说明是第一次访问,设置count的值
* 5、如果不为null,说明不是第一次访问,那么count保存的值加一即可
* 6、输出count给客户端
* 7、把count保存在application中
*/
ServletContext application = this.getServletContext();
Integer count = (Integer) application.getAttribute("count");
if(count !=null) {
count++;//让访问次数加一
} else {
count = 1;
}
/*
* 下面方法两个功能
* 1、设置getWrite()这个字符流的编码为utf-8
* 2、在响应中添加Coutent-Type这个头,指定为utf-8
*
*
* setContentType("text/html;charset=UTF-8");
* 等同于
* response.setHeader("ContentType",text/html;charset=UTF-8");
*/
response.setContentType("text/html;charset=UTF-8");
response.getWriter().print("本页面是第"+count+"次访问");
application.setAttribute("count", count);
}