ServletConfig對(duì)象是由每個(gè)servlet的Web容器創(chuàng)建的。這個(gè)對(duì)象可用于從web.xml文件獲取配置信息。
如果從web.xml文件修改配置信息,就不需要更改servlet中的代碼。因此,對(duì)于有特定配置內(nèi)容需要不定時(shí)修改,這樣會(huì)更容易管理Web應(yīng)用程序。
ServletConfig的核心優(yōu)點(diǎn)是,如果可以修改web.xml文件中的信息,則不需要編輯servlet代碼文件。
ServletConfig接口的方法
| 編號(hào) | 方法 | 描述 |
|---|---|---|
| 1 | public String getInitParameter(String name) |
返回指定參數(shù)名稱(chēng)的參數(shù)值。 |
| 2 | public Enumeration getInitParameterNames() |
返回所有初始化參數(shù)名稱(chēng)的枚舉。 |
| 3 | public String getServletName() |
返回servlet的名稱(chēng)。 |
| 4 | public ServletContext getServletContext() |
返回ServletContext的對(duì)象。 |
如何獲取ServletConfig的對(duì)象?
getServletConfig()方法來(lái)返回ServletConfig對(duì)象。getServletConfig()方法的語(yǔ)法
public ServletConfig getServletConfig();
getServletConfig()方法的示例
ServletConfig config=getServletConfig();
//Now we can call the methods of ServletConfig interface
為servlet提供初始化參數(shù)的語(yǔ)法
servlet的init-param子元素用于指定servlet的初始化參數(shù)。
<web-app>
<servlet>
......
<init-param>
<param-name>parameter_name</param-name>
<param-value>parameter_value</param-value>
</init-param>
......
</servlet>
</web-app>
在這個(gè)例子中,將從web.xml文件獲取一個(gè)初始化參數(shù),并在servlet中打印這些信息。
創(chuàng)建一個(gè)名稱(chēng)為:ServletConfig的動(dòng)態(tài)Web應(yīng)用項(xiàng)目,其結(jié)構(gòu)如下所示 -

下面是幾個(gè)主要的代碼文件 -
文件:ConfigServlet.java -
package com.yiibai;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ConfigServlet
*/
public class ConfigServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
PrintWriter out = response.getWriter();
ServletConfig config = getServletConfig();
String driver = config.getInitParameter("mysql_driver");
out.print("Driver details is: <b>" + driver+"</b>");
out.close();
}
}
文件:web.xml -
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>ConfigServlet</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>ConfigServlet</servlet-name>
<servlet-class>com.yiibai.ConfigServlet</servlet-class>
<init-param>
<param-name>mysql_driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ConfigServlet</servlet-name>
<url-pattern>/dbconfig</url-pattern>
</servlet-mapping>
</web-app>
將上面項(xiàng)目部署并訪(fǎng)問(wèn)URL: http://localhost:8080/ConfigServlet/dbconfig ,如果程序沒(méi)有問(wèn)題,那么應(yīng)該會(huì)看到以下結(jié)果 -

在這個(gè)例子中,我們從web.xml文件獲取所有的初始化參數(shù),并在servlet中打印這些信息。
幾個(gè)主要代碼文件如下 -
文件:ConfigServletAll.java -
package com.yiibai;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ConfigServletAll
*/
public class ConfigServletAll extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
PrintWriter out = response.getWriter();
ServletConfig config = getServletConfig();
Enumeration<String> e = config.getInitParameterNames();
String str = "";
while (e.hasMoreElements()) {
str = e.nextElement();
out.print("Name: " + str);
out.print(" value: " + config.getInitParameter(str)+"<br/>");
}
out.close();
}
}
文件:web.xml -
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>ConfigServlet</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>ConfigServlet</servlet-name>
<servlet-class>com.yiibai.ConfigServlet</servlet-class>
<init-param>
<param-name>mysql_driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ConfigServlet</servlet-name>
<url-pattern>/dbconfig</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ConfigServletAll</servlet-name>
<servlet-class>com.yiibai.ConfigServletAll</servlet-class>
<init-param>
<param-name>mssql_driver</param-name>
<param-value>com.mssql.jdbc.Driver</param-value>
</init-param>
<init-param>
<param-name>username</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>passwd</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ConfigServletAll</servlet-name>
<url-pattern>/dbconfigall</url-pattern>
</servlet-mapping>
</web-app>
將上面項(xiàng)目部署并訪(fǎng)問(wèn)URL: http://localhost:8080/ConfigServlet/dbconfigall ,如果程序沒(méi)有問(wèn)題,那么應(yīng)該會(huì)看到以下結(jié)果 -
