(15)ServletConfig对象详解
1,作用
主要是用于加载servlet的初始化参数。在一个web应用可以存在多个ServletConfig对象(一个Servlet对应一个ServletConfig对象)
2,创建时机和对象的获取
创建时机: 在创建完servlet对象之后,在调用init方法之前创建。对象的创建是系统完成的。
得到对象: 直接从Servlet有参数的init方法中得到。
3,servlet的初始化参数配置
每个servlet类和url映射都可以配置对应的初始化参数,初始化参数在web.xml文件中配置。
配置有两种方式,直接操作web.xml文件 或者 在描述中配置。
a,直接操作web.xml文件
<servlet> <description>Register</description> <display-name>Register</display-name> <servlet-name>registerServlet</servlet-name> <servlet-class>servlets.user.registerServlet</servlet-class> <init-param> <param-name>name</param-name> <param-value>project</param-value> </init-param> <init-param> <param-name>user</param-name> <param-value>yang</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>registerServlet</servlet-name> <url-pattern>/register</url-pattern> </servlet-mapping>
其中的<init-param>标签就是配置servlet初始化参数的。
b,在web.xml的design中配置
4,ServletConfig对象的获取
a,从Servlet带参数的init方法中获取
public class registerServlet extends HttpServlet { private static final long serialVersionUID = 1L; private ServletConfig config = null; public void init(ServletConfig config) throws ServletException{ this.config = config; super.init(); }
b,从Servlet对象获取
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.config = this.getServletConfig(); this.config = getServletConfig(); System.out.println(config.getInitParameter("name")); // doPost(request, response); }
注意,两种方式不要一起用,不要既在init方法中获取ServletConfig对象,又通过getServletConfig()方法获取,否则会报错:
java.lang.NullPointerException servlets.user.registerServlet.doGet(registerServlet.java:30) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
因为已经通过init方法获取到ServletConfig对象了,这样 getServletConfig() 方法就获取不到对象了。
5,常用接口方法
a,获取Servlet名称
getServletConfig().getServletName()
b,获取初始化参数名列表
getServletConfig().getInitParameterNames() 这里返回的是枚举对象
c,获取初始化参数值
getServletConfig().getInitParameter(initParaName)
d,返回上下文对象
getServletConfig().getServletContext()
接口使用代码
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(getServletConfig().getServletName()); Enumeration<String> enumeration = getServletConfig().getInitParameterNames(); while (enumeration.hasMoreElements()) { String initParaName = (String) enumeration.nextElement(); System.out.println(getServletConfig().getInitParameter(initParaName)); } System.out.println(getServletConfig().getServletContext()); // doPost(request, response); }
console打印日志
egisterServlet project yang org.apache.catalina.core.ApplicationContextFacade@994c146