1.6 ServletConfig接口

1.6 ServletConfig接口

接口方法

方法 描述
String getInitParameter(String name) 获取具有给定名称的初始化参数的值。
Enumeration<String> getInitParameterNames() Enumeration<String>对象的形式返回servlet的初始化参数的名称,如果servlet没有初始化参数,则返回空的Enumeration
ServletContext getServletContext() 返回与所在项目关联的ServletContext的引用。
String getServletName() 返回此servlet实例的名称。

接口描述

Servlet容器初始化Servlet时,Servlet容器会给 Servletinit方法传入一个ServletConfig对象。ServletConfig 封装可以通过@WebServlet或者通过部署描述符来传给Servlet 的配置信息。这样传入的每一条信息就叫一个初始参数。一个初始参数有keyvalue两个部分。 为了从Servlet内部获取到初始参数的值,要在 Servlet容器传给Servletinit方法的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");

getInitParametergetInitParameterNames外,ServletConfig还提供了另一个很有用的方法: getServletContext。利用这个方法可以从Servlet内部获取ServletContext。关于这个对象的深入探讨,请查阅本 章1.7节。

实例

下面举一个ServletConfig的范例,在app01a项目中的src目录中的app01a包中添加 一个名为ServletConfigDemoServletServlet。这个新的 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 servletConfig = getServletConfig();
// 获取Servlet的初始化参数
String admin = servletConfig.getInitParameter("admin");
String email = servletConfig.getInitParameter("email");
// 获取Servlet的名称
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()
{}
}

@WebServletinitParams属性 中,给Servlet传入了两个初始参数(adminemail):

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是对于项目路径而言,/servletConfigDemoHello项目中的路径.加上项目路径,可以调用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的初始化参数。