web.xml Servlet配置
为了使Java Servlet可从浏览器访问,必须告知Servlet容器要部署的servlet,以及将servlet映射到的URL。这是在Java Web应用程序的web.xml文件中完成的。
如果我们不熟悉Java Web应用程序的目录布局和内容,请参阅有关以下主题的教程:Java Web应用程序目录布局
配置和映射Servlet
要在web.xml文件中配置servlet,请编写以下代码:
<?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>controlServlet</servlet-name> <servlet-class>com.Hyman.butterfly.ControlServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>controlServlet</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> </web-app>
首先,我们配置servlet。这是通过使用<servlet>元素完成的。在这里,给Servlet一个名称,并编写该Servlet的类名称。
其次,将servlet映射到URL或者URL模式。这是在<servlet-mapping>元素中完成的。在上面的示例中,所有以.html结尾的URL被发送到servlet。
其他可能的servlet URL映射是:
/myServlet /myServlet.do /myServlet*
*是通配符,表示任何文本。如我们所见,我们可以使用通配符(*)将servlet映射到单个特定的URL或者URL的模式。我们将使用什么取决于servlet的函数。
Servlet初始化参数
我们可以从web.xml文件将参数传递给servlet。 servlet的init参数只能由该servlet访问。这是在web.xml文件中配置它们的方式:
<servlet> <servlet-name>controlServlet</servlet-name> <servlet-class>com.Hyman.butterfly.ControlServlet</servlet-class> <init-param> <param-name>myParam</param-name> <param-value>paramValue</param-value> </init-param> </servlet>
这是在servlets的init()方法中从servlet内部读取init参数的方法:
public class SimpleServlet extends GenericServlet { protected String myParam = null; public void init(ServletConfig servletConfig) throws ServletException{ this.myParam = servletConfig.getInitParameter("myParam"); } public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { response.getWriter().write("<html><body>myParam = " + this.myParam + "</body></html>"); } }
当servlet容器第一次加载servlet时,将调用servlet的init()方法。在加载servlet之前,没有人可以访问servlet,并且已成功调用init()
方法。
Servlet启动加载
" <servlet>"元素具有一个名为" <load-on-startup>"的子元素,可用于控制servlet容器何时加载servlet。如果我们未指定<load-on-startup>
元素,则servlet容器通常会在第一个请求到达时加载servlet。
通过设置一个<load-on-startup>元素,我们可以告诉servlet容器在servlet容器启动后立即加载servlet。请记住,在加载servlet时会调用servlet的init()方法。
这是一个<load-on-startup>配置示例:
<servlet> <servlet-name>controlServlet</servlet-name> <servlet-class>com.Hyman.webui.ControlServlet</servlet-class> <init-param><param-name>container.script.static</param-name> <param-value>/WEB-INF/container.script</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
<load-on-startup> 1 </ load-on-startup>元素中的数字告诉servlet容器应按什么顺序加载servlet。较低的数字将首先加载。如果该值为负数或者未指定,则servlet容器可以随时加载servlet。
上下文参数
我们还可以设置一些上下文参数,这些参数可以从应用程序中的所有servlet读取。这是配置上下文参数的方式:
<context-param> <param-name>myParam</param-name> <param-value>the value</param-value> </context-param>
这是从HttpServlet子类内部访问参数的方式:
String myContextParam = request.getSession() .getServletContext() .getInitParameter("myParam");