(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

 

posted on 2017-12-24 22:41  洋子哥哥  阅读(317)  评论(0编辑  收藏  举报