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" )
}
)
或者在web.xml
的根标签下填写:
<servlet><servlet-name>MyServlet</servlet-name><servlet-class>MyServlet</servlet-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>name1</param-name><param-value>value1</param-value></init-param>
</servlet>
<servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/my-servlet</url-pattern>
</servlet-mapping>
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流、资源文件在文件系统的绝对路径等。