分配servlet初始化参数
可以通过init-param元素(包含param-name和param-value这两个子元素)来为servlet提供初始化参数。例如,在下面的示例中,如果通过http://host/webAppPrefix/showinitValue形式的URL来访问InitServlet,它将从其init方法调用getServletConfig().getInitParameter("firstName")来得到"Larray";调用getServletConfig().getInitParameter("emailAddress")来得到"ellison@microsoft.com"。
- <servlet>
- <servlet-name>InitTest</servlet-name>
- <servlet-class>coreservlets.InitServlet</servlet-class>
- <init-param>
- <param-name>firstName</param-name>
- <param-value>Larry</param-value>
- </init-param>
- <init-param>
- <param-name>emailAddress</param-name>
- <param-value>ellison@microsoft.com</param-value>
- </init-param>
- </servlet>
- <servlet-mapping>
- <servlet-name>InitTest</servlet-name>
- <url-pattern>/showInitValues</url-pattern>
- </servlet-mapping>
在处理初始化参数时,重点关注以下内容。
返回值getInitParameter的返回值总是一个String值。所以对于整数类型的参数,可以使用Integer.parseInt来获得一个int值。
返回空值如果传给getInitParameter方法的参数在servlet的init-param声明中没有出现,函数将返回null值。因为除了Java开发人员,没有人可以修改web.xml,所以应该养成习惯总是在代码中检查null值。
在JSP中初始化JSP页面使用jspInit而不是init方法。JSP页面还要用jsp-file元素来代替servlet-class,正如2.4节描述的一样。JSP页面的初始化将在下一节讨论。
默认URL初始化参数仅用于使用与其名称相关联的自定义URL路径访问时。所以在这个例子中,firstName和emailAddress初始化参数在仅用于http://host/webAppPrefix/showInitValues这个URL进行访问时。但在使用http://host/webAppPrefix/servlet/coreservlets.InitServlet访问时无效。
核心警告:servlet中的初始化参数在使用其默认URL访问时无效。
比如,清单2.8显示了一个简单的servlet,即InitServlet,它使用init方法来设置firstName和emailAddress。清单2.9显示了web.xml文件的部分内容,其中演示了为servlet配置/showInitValuesURL。图2.12和图2.13显示了分别使用自定义URL(正确的)和默认URL(错误的)两种方式来访问servlet的结果。
记住哪个URL可以访问哪个不能访问实在太难。在实际的Web应用中,通常会禁用servlet默认访问路径,因而每个servlet只有一个URL。只有快测试时才会保留servlet特有的默认请求路径。
清单2.8 InitServlet.java
- package coreservlets;
- import java.io.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- /** Simple servlet used to illustrate servlet
- * initialization parameters.
- */
- public class InitServlet extends HttpServlet {
- private String firstName = "First name is missing.";
- private String emailAddress = "Email address is missing";
- public void init() {
- ServletConfig config = getServletConfig();
- if (config.getInitParameter("firstName") != null) {
- firstName = config.getInitParameter("firstName");
- }
- if (config.getInitParameter("emailAddress") != null) {
- emailAddress = config.getInitParameter("emailAddress");
- }
- }
- public void doGet(HttpServletRequest request,
- HttpServletResponse response)
- throws ServletException, IOException {
- response.setContentType("text/html");
- PrintWriter out = response.getWriter();
- String uri = request.getRequestURI();
- out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
- "Transitional//EN\">" + "\n" +
- "<HTML>\n" + "<HEAD><TITLE>" +
- "Init Servlet" + "</TITLE></HEAD>\n" +
- "<BODY BGCOLOR=\"#FDF5E6\">\n" +
- "<H2>Init Parameters:</H2>\n" +
- "<UL>\n" +
- "<LI>First name: " + firstName + "\n" +
- "<LI>Email address: " + emailAddress + "\n" +
- "</UL>\n" +
- "</BODY></HTML>");
- }
- }
清单2.9 web.xml (节选,说明初始化参数)
- <?xml version="1.0" encoding="ISO-8859-1"?>
- <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation=
- "http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
- version="2.4">
- <servlet>
- <servlet-name>InitTest</servlet-name>
- <servlet-class>coreservlets.InitServlet</servlet-class>
- <init-param>
- <param-name>firstName</param-name>
- <param-value>Larry</param-value>
- </init-param>
- <init-param>
- <param-name>emailAddress</param-name>
- <param-value>ellison@microsoft.com</param-value>
- </init-param>
- </servlet>
- <servlet-mapping>
- <servlet-name>InitTest</servlet-name>
- <url-pattern>/showInitValues</url-pattern>
- </servlet-mapping>
- <!-- ... -->
- </web-app>