2、ServletContext详解
ServletContext是servlet与servlet容器之间的直接通讯的接口。Servlet容器在启动一个Webapp时,会为它建立一个ServletContext对象,即servlet上下文环境。每一个webapp都有惟一的ServletContext对象。同一个webapp的全部servlet对象共享一个ServeltContext,servlet对象能够经过ServletContext来访问容器中的各类资源。
ServletContext接口提供的方法分为如下几种类型:
用于在Webapp范围内存取共享数据的方法。
注:webapp范围具备如下两层含义:
(1) 表示有webapp的生命周期构成的时间段。
(2) 表示在webapp的生命周期内全部web组件的集合。
◆ setAttribute(String name, java.lang.Object object):以键值对的形式,把一个java对象和一个属性名绑定,并存放到ServletContext中,参数name指定属性名,参数Object表示共享数据。
◆ getAttribute(String name):根据参数给定的属性名,返回一个Object类型的对象。
◆ getAttributeNames():返回一个Enumeration对象,该对象包含了全部存放在ServletContext中的属性名。
◆ removeAttribute(String name):根据参数指定的属性名,从servletContext对象中删除匹配的属性。
访问当前Webapp的资源
◆ getContextpath():返回当前webapp的URL入口。
◆ getInitParameter(String name):返回webapp配置文件中匹配的初始化参数值。在web.xml中<web-app>元素中<context-param>子元素表示Webapp应用范围内的初始参数。
◆ getInitParameterNames():返回一个Enumeration对象,该对象包含了全部存放在web.xml中<web-app>元素中<context-param>子元素的初始化参数名。
◆ getServletContextName():返回webapp名称。即<web-app>元素中<display-name>子元素的值。
◆ getRequestDispatcher(String path):返回一个用于向其余web组件转发请求的RequestDispatcher对象。
访问servlet容器的相关信息
◆ getContext(String uripath):根据参数指定的url,返回当前servlet容器中其余web应用的servletContext()对象。
访问web容器的相关信息
◆ getMajorVersion():返回servlet容器支持的java servlet API 的主版本号。
◆ getMinorVersion():返回servlet容器支持的java Servlet API的次版本号。
◆ getServerInfo():返回servlet容器的名字和版本。
访问服务器端的文件系统资源
◆ getRealPath(String path):根据参数指定的虚拟路径,返回文件系统中的一个真实的路径。
◆ getResource(String path):返回一个映射到参数指定的路径的url。
◆ getResourceAsStream(String path):返回一个用于读取参数指定的文件的输入流。(把文件读到输入流中去)
◆ getMimeType(String file):返回参数指定的文件的MIME类型。
输出日志
◆ log(String msg):向servlet的日志文件中写日志。
◆ log(String message, java.lang.Throwable throwable):向servlet的日志文件中写错误日志,以及异常的堆栈信息。
ServletContext对象得到几种方式:
javax.servlet.http.HttpSession.getServletContext()
javax.servlet.jsp.PageContext.getServletContext()
javax.servlet.ServletConfig.getServletContext()
以上是servlet2.5版本及之前的获取方法。
servlet3.0中新增方法:
javax.servlet.ServletRequest.getServletContext()
3、ServletConfig详解
Jsp/Servlet容器初始化一个Servlet类型的对象时,会为这个Servlet对象建立一个ServletConfig对象。在ServletConfig对象中包含了Servlet的初始化参数信息。此外,ServletConfig对象还与ServletContext对象关联。Jsp/Servlet容器在调用Servlet对象的init(ServletConfig config)方法时,会把ServletConfig类型的对象当作参数传递给servlet对象。Init(ServletConfig config)方法会使得当前servlet对象与ServletConfig类型的对象创建关联关系。
ServletConfig接口中定义了如下方法:
◆ getInitParameter(String name):根据给定的初始化参数,返回匹配的初始化参数值。
◆ getInitParameterNames():返回一个Enumeration对象,该对象包含了全部存放在web.xml中<web-app>元素<servlet>子元素<init-param>中的全部的初始化参数名。
◆ getServletContext():返回一个servletContext()对象,
◆ getServltName():返回servlet的名字,即web.xml中的相对应的servlet的子元素<servlet-name>的值。若是没有配置这个子元素,则返回servlet类的全局限定名。
Example:
<servlet>
<servlet-name>actionServlet</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>first</param-name>
<param-value>netfish</param-value>
</init-param>
<init-param>
<param-name>last</param-name>
<param-value>blog</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>actionServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
如上,红色标记处为初始化参数,至关于servlet共享参数。
在servlet中:
public class BlogServlet extends HttpServlet {
String first = this.getInitParameter("first");
String last = this.getInitParameter("last");
System.out.println("第一个参数:" + first + "第二个参数:" + last);
}
注:HttpServlet类继承了GenericServlet类,而GenericServlet类实现了ServletConfig接口,所以在HttpServlet类和GenericServlet类及子类中均可以直接调用ServletConfig接口中的方法。
4、ServletContext和ServletConfig两者区别
从做用范围来讲,ServletConfig做用于某个特定的Servlet,即从该Servlet实例化,那么就开始有效,可是该Servlet以外的其余Servlet不能访问;ServletContext做用于某个webapp,即在一个webapp中至关于一个全局对象,在Servlet容器启动时就已经加载,对于不一样的webapp,有不一样的ServletContext。
其次,来看一下两者参数的使用。若是一个参数为整个webapp所用,那么就配置为ServletContext参数,以下所示:
<context-param>
<param-name>ContextParam</param-name>
<param-value>hello, this is ServletContext param.</param-value>
</context-param>
若是一个参数仅为一个Servlet所用,那么就应该配置为ServletConfig参数,以下所示:
<servlet>
<servlet-name>servlet名称</servlet-name>
<servlet-class>servlet全局限定名</servlet-class>
<init-param>
<param-name>ServletParam</param-name>
<param-value>hello, this is ServletConfig param.</param-value>
</init-param>
</servlet>
最后,说明一下参数的获取。访问ServletConfig参数,取得ServletConfig对象后,调用getInitParameter()方法;访问ServletContext对象,只要调用现有的ServletConfig对象的getServletContext()便可,而后一样调用getInitParamter()方法就能获取参数。例如对于上面的参数,能够经过以下方法获取各自参数。
public class GetParam extends HttpServlet {
ServletConfig config;
public void init(ServletConfig config) {
this.config=config;
}
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
String servletparam=(String)config.getInitParameter("ServletParam");
System.out.println(servletparam);
String contextparam = (String)config.getServletContext().getInitParameter("ContextParam");
System.out.println(contextparam);
}
public void destroy() {
}
}
对上面Servlet编译后,部署到Tomcat中,启动,在浏览器中输入http://localhost:8080/webapp名称/GetParam(该连接地址在webx.xml中配置)访问,就能够分别在控制台输出hello, this is ServletConfig param.
hello, this is ServletContext param.
转载来自http://blog.csdn.net/u012077981/article/details/17137705