web.xml Servlet配置

时间:2020-01-09 10:36:23  来源:igfitidea点击:

为了使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。如果我们未指定&lt;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");