2.6 初始化和预加载servlet和JSP页面
本节讨论如何控制servlet和JSP页面的启动行为。具体说来,本节将解释如何分配初始化参数,如何在servlet和JSP页面加载时服务器的生命周期间进行修改。
2.6.1 分配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"。
InitTest
coreservlets.InitServlet
firstName
Larry
emailAddress
ellison@microsoft.com
InitTest
/showInitValues
在处理初始化参数时,重点关注以下内容。
返回值 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配置/showInitValues URL。图2.12和图2.13显示了分别使用自定义URL(正确的)和默认URL(错误的)两种方式来访问servlet的结果。
记住哪个URL可以访问哪个不能访问实在太难。在实际的Web应用中,通常会禁用servlet默认访问路径,因而每个servlet只有一个URL。只有快测试时才会保留servlet特有的默认请求路径。
清单2.8 InitServlet.javapackagecoreservlets;
importjava.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
/** Simple servlet used to illustrate servlet
* initialization parameters.
*/
publicclassInitServletextendsHttpServlet {
privateString firstName ="First name is missing.";
privateString emailAddress ="Email address is missing";
publicvoidinit() {
ServletConfig config = getServletConfig();
if(config.getInitParameter("firstName") !=null) {
firstName = config.getInitParameter("firstName");
}
if(config.getInitParameter("emailAddress") !=null) {
emailAddress = config.getInitParameter("emailAddress");
}
}
publicvoiddoGet(HttpServletRequest request,
HttpServletResponse response)
throwsServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String uri = request.getRequestURI();
out.println("HTML PUBLIC \"-//W3C//DTD HTML 4.0 "+
"Transitional//EN\">"+"\n"+
"\n"+"
"+"Init Servlet"+"
\n"+"
\n"+"
Init Parameters:
\n"+"
- \n"+
"
First name: "+ firstName +"\n"+"
Email address: "+ emailAddress +"\n"+"
\n"+"");
}
}
清单2.9 web.xml (节选,说明初始化参数)<?xml version="1.0"encoding="ISO-8859-1"?>
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">
InitTest
coreservlets.InitServlet
firstName
Larry
emailAddress
ellison@microsoft.com
InitTest
/showInitValues
(点击查看大图)图2.12 使用其自定义URL正确访问InitServlet
图2.13 使用默认URL错误访问InitServlet。禁用servlet的默
认访问可避免这个错误
【责任编辑:云霞 TEL:(010)68476606】
点赞 0