ServletConfig接口
在Servlet
运行期间,需要一些配置信息,这些信息都可以在@WebServlet
注解的属性中配置。当Tomcat初始化一个Servlet
时,会将该Servlet
的配置信息封装到一个ServletConfig
对象中,通过调用init(ServletConfig config)
方法将ServletConfig
对象传递给Servlet
。ServletConfig定义了一系列获取配置信息的方法。
Servlet
容器前面的注解:
@WebServlet(name = "MyServlet", urlPatterns = "/my-servlet",
initParams = {
@WebInitParam(name = "encoding", value = "UTF-8" ),
@WebInitParam(name = "name1", value = "value1" )
}
)
getInitParameter(name)
可以直接调用getInitParameter(name)
,也可以初始化ServletConfig
对象,用ServletConfig
对象来调用getInitParameter(name)
。
Servlet
有ServletConfig
对象和ServletContext
,直接调用get...()
方法是获取的ServletConfig
的内容,如果要获得ServletContext
的内容,一定要用ServletContext
对象。
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
String encoding = getInitParameter("encoding");
String name1 = getInitParameter("name1");
System.out.println("encoding = " + encoding);
}
getInitParameterNames()
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
Enumeration<String> initParameterNames = getServletConfig().getInitParameterNames();
while (initParameterNames.hasMoreElements()) {
String name = initParameterNames.nextElement();
String value = getServletConfig().getInitParameter(name);
System.out.println(name + " = " + value);
}
}
getServletName()
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
System.out.println("Servlet name is " + getServletName());
}
ServletContext接口
当Servlet
容器启动时,会为每个Web应用创建一个唯一的ServletContext
对象代表当前Web应用。ServletContext
对象不仅封装了当前Web应用的所有信息,而且实现了多个Servlet
之间数据的共享。
在web.xml文件中,可以配置Servlet
的初始化信息,还可以配置整个Web应用的初始化信息。Web应用初始化参数的配置方式具体如下所示。
<context-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</context-param>
在调用时需要先初始化一个ServletContext
对象:
ServletContext context = getServletContext();
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
ServletContext context = getServletContext();
Enumeration<String> initParameterNames = context.getInitParameterNames();
while (initParameterNames.hasMoreElements()) {
String name = initParameterNames.nextElement();
String value = context.getInitParameter(name);
System.out.println(name + " = " + value);
}
}
实现多个Servlet对象共享数据
由于一个Web应用中的所有Servlet
共享同一个ServletContext对象,所以ServletContext对象的域属性可以被该Web应用中的所有Servlet
访问。ServletContext接口中定义了用于增加、删除、设置ServletContext域属性的四个方法。
读取Web应用下的资源文件
ServletContext接口定义了一些读取Web资源的方法,这些方法是依靠Servlet
容器来实现的。Servlet
容器根据资源文件相对于Web应用的路径,返回关联资源文件的IO流、资源文件在文件系统的绝对路径等。