Tomcat 5.5 基本详细配置(3)

例如,程序清单5-7给出一个名为InitServlet的简单servlet,它使用init方法设置firstName和emailAddress字段。程序清单5-8给出分配名称InitTest给servlet的web.xml文件。

程序清单5-7 InitServlet.java

package moreservlets;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

 

public class InitServlet extends HttpServlet {

private String firstName, emailAddress;

public void init() {

ServletConfig config = getServletConfig();

firstName = config.getInitParameter("firstName");

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(ServletUtilities.headWithTitle("Init Servlet") +

"<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>");

}

}

程序清单5-8 web.xml(说明初始化参数的摘录)

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<!-- ... -->

<servlet>

<servlet-name>InitTest</servlet-name>

<servlet-class>moreservlets.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>[email protected]</param-value>

</init-param>

</servlet>

<!-- ... -->

</web-app>

5.2 分配JSP初始化参数
给JSP页面提供初始化参数在三个方面不同于给servlet提供初始化参数。

1)使用jsp-file而不是servlet-class。因此,WEB-INF/web.xml文件的servlet元素如下所示:

<servlet>

<servlet-name>PageName</servlet-name>

<jsp-file>/RealPage.jsp</jsp-file>

<init-param>

<param-name>...</param-name>

<param-value>...</param-value>

</init-param>

...

</servlet>

2) 几乎总是分配一个明确的URL模式。对servlet,一般相应地使用以http://host/webAppPrefix/servlet/ 开始的缺省URL。只需记住,使用注册名而不是原名称即可。这对于JSP

页面在技术上也是合法的。例如,在上面给出的例子中,可用URL http://host/webAppPrefix/servlet/PageName 访问RealPage.jsp的对初始化参数具有访问权的版本。但在用于

JSP页面时,许多用户似乎不喜欢应用常规的servlet的URL。此外,如果 JSP页面位于服务器为其提供了目录清单的目录中(如,一个既没有index.html也没有index.jsp文件的目

录),则用户可能会连接到此 JSP页面,单击它,从而意外地激活未初始化的页面。因此,好的办法是使用url-pattern(5.3节)将JSP页面的原URL与注册的 servlet名相关联。

这样,客户机可使用JSP页面的普通名称,但仍然激活定制的版本。例如,给定来自项目1的servlet定义,可使用下面的 servlet-mapping定义:

<servlet-mapping>

<servlet-name>PageName</servlet-name>

<url-pattern>/RealPage.jsp</url-pattern>

</servlet-mapping>

3)JSP页使用jspInit而不是init。自动从JSP页面建立的servlet或许已经使用了inti方法。因此,使用JSP声明提供一个init方法是不合法的,必须制定jspInit方法。

为了说明初始化JSP页面的过程,程序清单5-9给出了一个名为InitPage.jsp的JSP页面,它包含一个jspInit方法且放置于 deployDemo Web应用层次结构的顶层。一般,

http://host/deployDemo/InitPage.jsp 形式的URL将激活此页面的不具有初始化参数访问权的版本,从而将对firstName和emailAddress变量显示null。但是, web.xml文件(程

序清单5-10)分配了一个注册名,然后将该注册名与URL模式/InitPage.jsp相关联。

程序清单5-9 InitPage.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD><TITLE>JSP Init Test</TITLE></HEAD>

<BODY BGCOLOR="#FDF5E6">

<H2>Init Parameters:</H2>

<UL>

<LI>First name: <%= firstName %>

<LI>Email address: <%= emailAddress %>

</UL>

</BODY></HTML>


<%!

private String firstName, emailAddress;

public void jspInit() {

ServletConfig config = getServletConfig();

firstName = config.getInitParameter("firstName");

emailAddress = config.getInitParameter("emailAddress");

}

%>

程序清单5-10 web.xml(说明JSP页面的init参数的摘录)

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

 

<web-app>

<!-- ... -->

<servlet>

<servlet-name>InitPage</servlet-name>

<jsp-file>/InitPage.jsp</jsp-file>

<init-param>

<param-name>firstName</param-name>

<param-value>Bill</param-value>

</init-param>

<init-param>

<param-name>emailAddress</param-name>

<param-value>[email protected]</param-value>

</init-param>

</servlet>

<!-- ... -->

<servlet-mapping>

<servlet-name> InitPage</servlet-name>

<url-pattern>/InitPage.jsp</url-pattern>

</servlet-mapping>

<!-- ... -->

</web-app>

5.3 提供应用范围内的初始化参数
一般,对单个地servlet或JSP页面分配初始化参数。指定的servlet或JSP页面利用ServletConfig的 getInitParameter方法读取这些参数。但是,在某些情形下,希望提供可由任

意servlet或JSP页面借助ServletContext 的getInitParameter方法读取的系统范围内的初始化参数。

可利用context-param元素声明这些系统范围内的初始化值。context-param元素应该包含param-name、param-value以及可选的description子元素,如下所示:

<context-param>

<param-name>support-email</param-name>

<param-value>[email protected]</param-value>

</context-param>

可回忆一下,为了保证可移植性,web.xml内的元素必须以正确的次序声明。但这里应该注意,context-param元素必须出现任意与文档有关的元素(icon、display-name或

description)之后及filter、filter-mapping、listener或 servlet元素之前。

5.4 在服务器启动时装载servlet
假如servlet或JSP页面有一个要花很长时间执行的init (servlet)或jspInit(JSP)方法。例如,假如init或jspInit方法从某个数据库或ResourceBundle查找产量。这种情况下

,在第一个客户机请求时装载servlet的缺省行为将对第一个客户机产生较长时间的延迟。因此,可利用servlet的load-on- startup元素规定服务器在第一次启动时装载servlet。

下面是一个例子。

<servlet>

<servlet-name> … </servlet-name>

<servlet-class> … </servlet-class> <!-- Or jsp-file -->

<load-on-startup/>

</servlet>

可以为此元素体提供一个整数而不是使用一个空的load-on-startup。想法是服务器应该在装载较大数目的servlet或JSP页面之前装载较少数目的servlet或JSP页面。例如,下面的

servlet项(放置在Web应用的WEB-INF目录下的web.xml文件中的web-app元素内)将指示服务器首先装载和初始化SearchServlet,然后装载和初始化由位于Web应用的result目录中

的index.jsp文件产生的 servlet。

<servlet>

<servlet-name>Search</servlet-name>

<servlet-class>myPackage.SearchServlet</servlet-class> <!-- Or jsp-file -->

<load-on-startup>1</load-on-startup>

</servlet>

<servlet>

<servlet-name>Results</servlet-name>

<servlet-class>/results/index.jsp</servlet-class> <!-- Or jsp-file -->

<load-on-startup>2</load-on-startup>

</servlet>

web.xml里面可以定义两种参数:
(1)application范围内的参数,存放在servletcontext中,在web.xml中配置如下:

<context-param>
           <param-name>context/param</param-name>
           <param-value>avalible during application</param-value>
</context-param>

(2)servlet范围内的参数,只能在servlet的init()方法中取得,在web.xml中配置如下:

<servlet>
    <servlet-name>MainServlet</servlet-name>
    <servlet-class>com.wes.controller.MainServlet</servlet-class>
    <init-param>
       <param-name>param1</param-name>
       <param-value>avalible in servlet init()</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
</servlet>
在servlet中可以通过代码分别取用:

package com.wes.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

public class MainServlet extends HttpServlet{

    public MainServlet(){
        super();
     }
    public void init() throws ServletException ...{
         System.out.println("下面的两个参数param1是在servlet中存放的");
         System.out.println(this.getInitParameter("param1"));
         System.out.println("下面的参数是存放在servletcontext中的");
         System.out.println(getServletContext().getInitParameter("context/param"));
      }
}
第一种参数在servlet里面可以通过getServletContext().getInitParameter("context/param")得到
第二种参数只能在servlet的init()方法中通过this.getInitParameter("param1")取得 

你可能感兴趣的:(tomcat,jsp,servlet,服务器,application,Parameters)