2.7.5 访问Servlet的配置参数

2.7.5 访问Servlet的配置参数

配置Servlet时,还可以增加额外的配置参数。通过使用配置参数,可以实现提供更好的可移植性,避免将参数以硬编码方式写在程序代码中。

Servlet配置参数方式

Servlet配置参数有两种方式。

  1. 通过aWebServletinitParams属性来指定。
  2. 通过在web.xml文件的<servlet>元素中添加<init-param>子元素来指定

第二种方式与为JSP配置初始化参数极其相似,因为JSP的实质就是Servlet,而且配置JSP的实质就是把JSPServlet使用。

ServletConfig

访问Servlet配置参数通过ServletConfig对象完成,ServletConfig提供如下方法:

  • java.lang.String getInitParameter(java.lang.String name):用于获取初始化参数。

JSP的内置对象config就是此处的ServletConfig

程序示例

下面的Servlet将会连接数据库,并执行SQL查询,但程序并未直接给出数据库连接信息,而是将数据库连接信息放在web.xml文件中进行管理。

TestServlet.java

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
package lee;

import java.sql.*;
import javax.servlet.http.*;
import javax.servlet.*;
import javax.servlet.annotation.*;
import java.io.*;

@WebServlet(
name = "testServlet",
urlPatterns = { "/testServlet" },
initParams = {
@WebInitParam(name = "driver", value = "com.mysql.jdbc.Driver"),
@WebInitParam(name = "url", value = "jdbc:mysql://localhost:3306/javaee"),
@WebInitParam(name = "user", value = "root"),
@WebInitParam(name = "pass", value = "32147") }
)
public class TestServlet extends HttpServlet {
// 重写init方法
public void init(ServletConfig config) throws ServletException {
// 重写该方法,应该首先调用父类的init()方法
super.init(config);
}

// 响应客户端请求的方法
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
try {
// 获取ServletConfig对象
ServletConfig config = getServletConfig();
// 通过ServletConfig对象获取配置参数:dirver
String driver = config.getInitParameter("driver");
// 通过ServletConfig对象获取配置参数:url
String url = config.getInitParameter("url");
// 通过ServletConfig对象获取配置参数:user
String user = config.getInitParameter("user");
// 通过ServletConfig对象获取配置参数:pass
String pass = config.getInitParameter("pass");
// 注册驱动
Class.forName(driver);
// 获取数据库连接
Connection conn = DriverManager.getConnection(url, user, pass);
// 创建Statement对象
Statement stmt = conn.createStatement();
// 执行查询,获取ResuletSet对象
ResultSet rs = stmt.executeQuery("select * from news_inf");
response.setContentType("text/html;charSet=gbk");
// 获取页面输出流
PrintStream out = new PrintStream(response.getOutputStream());
// 输出HTML标签
out.println("<html>");
out.println("<head>");
out.println("<title>访问Servlet初始化参数测试</title>");
out.println("</head>");
out.println("<body>");
out.println("<table bgcolor=\"#9999dd\" border=\"1\"" + "width=\"480\">");
// 遍历结果集
while (rs.next()) {
// 输出结果集内容
out.println("<tr>");
out.println("<td>" + rs.getString(1) + "</td>");
out.println("<td>" + rs.getString(2) + "</td>");
out.println("</tr>");
}
out.println("</table>");
out.println("</body>");
out.println("</html>");
} catch (Exception e) {
e.printStackTrace();
}
}
}

@WebServlet的initParams属性

ServletConfig获取配置参数的方法和ServletContext获取配置参数的方法完全一样,只是ServletConfig是取得当前Servlet的配置参数,而ServletContext是获取整个Web应用的配置参数。

以上程序中@WebServlet中的initParams属性:

@WebServlet(
    name = "testServlet", 
    urlPatterns = { "/testServlet" }, 
    initParams = {
        @WebInitParam(name = "driver", value = "com.mysql.jdbc.Driver"),
        @WebInitParam(name = "url", value = "jdbc:mysql://localhost:3306/javaee"),
        @WebInitParam(name = "user", value = "root"), 
        @WebInitParam(name = "pass", value = "32147") }
)

用于为该Servlet配置参数,initParams属性值的每个@WebInitParam配置一个初始化参数.

@WebInitParam的属性

每个@WebInitParam可指定如下两个属性。

  • name:指定参数名。
  • value:指定参数值。

servlet元素的子元素init-param的子元素

类似地,在web.xml文件中为Servlet配置参数使用<init-param>元素,该元素可以接受如下两子元素:

  • param-name:指定配置参数名。
  • param-Value:指定配置参数值。

对应的web.xml配置

下面是该Servletweb.xml文件中的配置片段。

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
<servlet>
<!-- 配置Servlet名 -->
<servlet-name>testServlet</servlet-name>
<!-- 指定Servlet的实现类 -->
<servlet-class>lee.TestServlet</servlet-class>
<!-- 配置Servlet的初始化参数:driver -->
<init-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</init-param>
<!-- 配置Servlet的初始化参数:url -->
<init-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/javaee</param-value>
</init-param>
<!-- 配置Servlet的初始化参数:user -->
<init-param>
<param-name>user</param-name>
<param-value>root</param-value>
</init-param>
<!-- 配置Servlet的初始化参数:pass -->
<init-param>
<param-name>pass</param-name>
<param-value>32147</param-value>
</init-param>
</servlet>
<servlet-mapping>
<!-- 确定Servlet名 -->
<servlet-name>testServlet</servlet-name>
<!-- 配置Servlet映射的URL -->
<url-pattern>/testServlet</url-pattern>
</servlet-mapping>

以上配置片段的粗体字代码配置了4个配置参数,Servlet通过这4个配置参数就可连接数据库在浏览器中浏览该Servlet,可看到数据库査询成功(如果数据库的配置正确)。