目录
一、ServletContext概述
二、获取ServletContext
三、域对象的功能
四、获取项目初始化参数
五、获取资源相关方法
6 练习:访问量统计
=====================================
一、ServletContext概述
服务器会为每一个项目建立一个ServletContext对象,一个项目只有一个ServletContext上下文对象!
咱们能够在N多个Servlet中来获取这个惟一的对象,使用它能够给多个Servlet传递数据!
与服务器同寿!!!这个对象在Tomcat启动时就建立,在Tomcat关闭时才会被销毁死去!
做用: 在整个Web应用的动态资源之间共享数据!
例如:在AServlet中向ServletContext对象中保存一个值,而后在BServlet中就能够获取这个值,这就是共享数据了。html
二、获取ServletContext
* ServletConfig 接口中 getServletContext()方法;
* GenericServlet 类中 getServletContext()方法;web
在Servlet接口中获取ServletContext对象:
* 在void init(ServletConfig config)中:
ServletContext context = config.getServletContext();
ServletConfig类的getServletContext()方法能够用来获取ServletContext对象;
在GenericeServlet或HttpServlet中获取ServletContext对象:
* GenericServlet类有getServletContext()方法,因此能够直接使用this.getServletContext()来获取;
public class MyServlet implements Servlet {
public void init(ServletConfig config) {
ServletContext context = config.getServletContext();
}
…
}
public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) {
ServletContext context = this.getServletContext();
}
}tomcat
三、域对象的功能
ServletContext是JavaWeb四大域对象之一:
* PageContext;
* ServletRequest;
* HttpSession;
* ServletContext;
全部域对象都有存取数据的功能,由于域对象内部有一个Map,用来存储数据,下面是ServletContext对象用来操做数据的方法:
* void setAttribute(String name, Object value):用来存储一个对象,也能够称之为存储一个域属性。
* Object getAttribute(String name):用来获取ServletContext中的数据,当前在获取以前须要先去存储才行。
* void removeAttribute(String name):用来移除ServletContext中的域属性,若是参数name指定的域属性不存在,
那么本方法什么都不作;
* Enumeration getAttributeNames():获取全部域属性的名称;服务器
四、获取项目初始化参数
* 一个Servlet只能获取本身的初始化参数,不能获取别人的,即初始化参数只为一个Servlet准备!
* 能够配置公共的初始化参数,为全部Servlet而用!这须要使用ServletContext才能使用!
还可使用ServletContext来获取在项目web.xml文件中配置的应用初始化参数!
注意,项目初始化参数与Servlet初始化参数不一样:
web.xml
<web-app>
...
<context-param> [配置了两个应用初始化参数]
<param-name>paramName1</param-name>
<param-value>paramValue1</param-value>
</context-param>app
<context-param>
<param-name>paramName2</param-name>
<param-value>paramValue2</param-value>
</context-param>
</web-app>
ServletContext context = this.getServletContext(); [获取ServletContext对象]
String value1 = context.getInitParameter("paramName1");
String value2 = context.getInitParameter("paramName2");webapp
Enumeration names = context.getInitParameterNames();[获取全部应用初始化参数名称]
while(names.hasMoreElements()) {
System.out.println(names.nextElement()); //会获得 paramName1,paramName2
}网站
五、获取资源相关方法
5.一、获取真实路径(*****)
还可使用ServletContext对象来获取Web应用下的资源,例如在hello应用的根目录下建立a.txt文件,
如今想在Servlet中获取这个资源,就可使用ServletContext来获取。
* 获取a.txt的真实路径:String realPath = servletContext.getRealPath(“/a.txt”),
realPath的值为a.txt文件的绝对路径:F:\tomcat6\webapps\hello\a.txt;
* 获取b.txt的真实路径:String realPath = servletContext.getRealPath(“/WEB-INF/b.txt”);this
5.二、获取资源流
不仅能够获取资源的路径,还能够经过ServletContext获取资源流,即把资源以输入流的方式获取:
* 获取a.txt资源流:InputStream in = servletContext.getResourceAsStream(“/a.txt”);
* 获取b.txt资源流:InputStream in = servletContext.getResourceAsStream(“/WEB-INF/b.txt”);编码
5.三、获取指定目录下全部资源路径
还可使用ServletContext获取指定目录下全部资源路径,例如获取/WEB-INF下全部资源的路径:
Set set = context.getResourcePaths("/WEB-INF");
System.out.println(set);
[/WEB-INF/lib/, /WEB-INF/classes/, /WEB-INF/b.txt, /WEB-INF/web.xml]
注意,本方法必须以“/”开头!!!xml
6 练习:访问量统计
一个项目中全部的资源被访问都要对访问量进行累加!
建立一个int类型的变量,用来保存访问量,而后把它保存到ServletContext的域中,这样能够保存全部的Servlet均可以访问到!
相信各位必定见过不少访问量统计的网站,即“本页面被访问过XXX次”。由于不管是哪一个用户访问指定页面, 都会累计访问量,因此这个访问量统计应该是整个项目共享的!很明显,这须要使用ServletContext来保存访问量。 ServletContext application = this.getServletContext(); [获取ServletContext对象] Integer count = (Integer)application.getAttribute("count") [获取ServletContext对象中的count属性]; if(count == null) { count = 1; [若是在ServletContext中不存在count属性,那么设置count的值为1,表示第一次被访问。] } else { count++; [若是在ServletContext中存在count属性,说明之前被访问过,那么让count在原来的基础上加1。]; } response.setContentType("text/html;charset=utf-8"); // response.setHeader("Content-Type","text/html;charset=utf-8"); 设置头信息(文本类型和编码),等同于上面 response.getWriter().print("<h1>本页面一共被访问" + count + "次!</h1>")[向客户端响应本页面被访问的次数。]; application.setAttribute("count", count);[覆盖保存count的值到ServletContext对象中。] ---------------------