2.7.5 访问Servlet的配置参数
配置Servlet
时,还可以增加额外的配置参数。通过使用配置参数,可以实现提供更好的可移植性,避免将参数以硬编码方式写在程序代码中。
Servlet配置参数方式
为Servlet
配置参数有两种方式。
- 通过
aWebServlet
的initParams
属性来指定。
- 通过在
web.xml
文件的<servlet>
元素中添加<init-param>
子元素来指定
第二种方式与为JSP
配置初始化参数极其相似,因为JSP
的实质就是Servlet
,而且配置JSP
的实质就是把JSP
当Servlet
使用。
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 { public void init(ServletConfig config) throws ServletException { super.init(config); }
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { try { ServletConfig config = getServletConfig(); String driver = config.getInitParameter("driver"); String url = config.getInitParameter("url"); String user = config.getInitParameter("user"); String pass = config.getInitParameter("pass"); Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, pass); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from news_inf"); response.setContentType("text/html;charSet=gbk"); PrintStream out = new PrintStream(response.getOutputStream()); 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
可指定如下两个属性。
servlet元素的子元素init-param的子元素
类似地,在web.xml
文件中为Servlet
配置参数使用<init-param>
元素,该元素可以接受如下两子元素:
param-name
:指定配置参数名。
param-Value
:指定配置参数值。
对应的web.xml配置
下面是该Servlet
在web.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-name>testServlet</servlet-name> <servlet-class>lee.TestServlet</servlet-class> <init-param> <param-name>driver</param-name> <param-value>com.mysql.jdbc.Driver</param-value> </init-param> <init-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/javaee</param-value> </init-param> <init-param> <param-name>user</param-name> <param-value>root</param-value> </init-param> <init-param> <param-name>pass</param-name> <param-value>32147</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>testServlet</servlet-name> <url-pattern>/testServlet</url-pattern> </servlet-mapping>
|
以上配置片段的粗体字代码配置了4个配置参数,Servlet
通过这4个配置参数就可连接数据库在浏览器中浏览该Servlet
,可看到数据库査询成功(如果数据库的配置正确)。