1.6 ServletConfig接口 接口方法
方法
描述
String getInitParameter(String name)
获取具有给定名称的初始化参数的值。
Enumeration<String> getInitParameterNames()
以Enumeration<String>
对象的形式返回servlet
的初始化参数的名称,如果servlet
没有初始化参数,则返回空的Enumeration
。
ServletContext getServletContext()
返回与所在项目关联的ServletContext
的引用。
String getServletName()
返回此servlet
实例的名称。
接口描述 当Servlet
容器初始化Servlet
时,Servlet
容器会给 Servlet
的init
方法传入一个ServletConfig
对象。ServletConfig
封装可以通过@WebServlet
或者通过部署描述符来传给Servlet
的配置信息。这样传入的每一条信息就叫一个初始参数。一个初始参数有key
和value
两个部分。 为了从Servlet
内部获取到初始参数的值,要在 Servlet
容器传给Servlet
的init
方法的ServletConfig
中调用 getInitParameter
方法。getInitParameter
的方法签名如 下:
1 java.lang.String getInitParameter (java.lang.String name)
此外,getInitParameterNames
方法则是返回所有初 始参数名称的一个Enumeration
:
1 java.util.Enumeration<java.lang.String> getInitParameterNames()
例如,为了获取contactName
参数值,要使用下面的方法签名:
1 2 String contactName = servletConfig.getInitParameter("contactName" );
除getInitParameter
和getInitParameterNames
外,ServletConfig
还提供了另一个很有用的方法: getServletContext
。利用这个方法可以从Servlet
内部获取ServletContext
。关于这个对象的深入探讨,请查阅本 章1.7节。
实例 下面举一个ServletConfig
的范例,在app01a
项目中的src
目录中的app01a
包中添加 一个名为ServletConfigDemoServlet
的Servlet
。这个新的 Servlet
如下所示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 package app01a;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.Servlet;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebInitParam;import javax.servlet.annotation.WebServlet;@WebServlet( name = "ServletConfigDemoServlet", urlPatterns = {"/servletConfigDemo"}, // 设置Servlet的初始化参数 initParams = { @WebInitParam( name = "admin", value = "Harry Taciak" ), @WebInitParam( name = "email", value = "admin@example.com" )} ) public class ServletConfigDemoServlet implements Servlet { private transient ServletConfig servletConfig; @Override public ServletConfig getServletConfig () { return servletConfig; } @Override public void init (ServletConfig servletConfig) throws ServletException { this .servletConfig = servletConfig; } @Override public void service (ServletRequest request, ServletResponse response) throws ServletException,IOException { ServletConfig servletConfig = getServletConfig(); String admin = servletConfig.getInitParameter("admin" ); String email = servletConfig.getInitParameter("email" ); String servletName = servletConfig.getServletName(); response.setContentType("text/html" ); PrintWriter writer = response.getWriter(); writer.print("<html>" + "<head>" + "</head>" + "<body>" + "Admin: " + admin + "<br/>" + "Email: " + email + "<br/>" + "ServletName: " + servletName + "<br/>" + "</body>" + "</html>" ); } @Override public String getServletInfo () { return "ServletConfig demo" ; } @Override public void destroy () {} }
在@WebServlet
的initParams
属性 中,给Servlet
传入了两个初始参数(admin
和email
):
1 2 3 4 5 6 7 8 9 10 11 12 13 @WebServlet( name = "ServletConfigDemoServlet", urlPatterns ={"/servletConfigDemo"}, initParams ={ @WebInitParam( name = "admin", value = "Harry Taciak" ), @WebInitParam( name = "email", value = "admin@example.com" )} )
运行效果 注意这里的urlPatterns
是对于项目路径而言,/servletConfigDemo
在Hello
项目中的路径.加上项目路径,可以调用ServletConfigDemoServlet
,如下所示:http://localhost:8080/app01a/servletConfigDemo 浏览器将会显示以下文本:
1 2 3 Admin: Harry Taciak Email: admin@example.com ServletName: ServletConfigDemoServlet
部署描述符中设置Servlet的初始化参数 另一种方法是,在部署描述符中传入初始参数。使用部署描述符设置Servlet
的初始参数 ,比使用@WebServlet
更容易,因为部署描述符是一个文本文件,不需要重新编译Servlet
类 ,就可以对它进行编辑。部署描述符将在本章后续”使用部署描述符”小节以及第13章中详细讲解。
总结
ServletConfig
操作的是Servlet
的初始化参数。