禁用激活器servlet

 禁用激活器servlet
     在对资源应用过滤器时,可通过指定要应用过滤器的URL模式或servlet名来完成。如果提供servlet名,则此名称必须与web.xml的 servlet元素中给出的名称相匹配。如果使用应用到一个serlvet的URL模式,则此模式必须与利用web.xml的元素servlet- mapping指定的模式相匹配。但是,多数服务器使用“激活器servlet”为servlet体统一个缺省的URL:http: //host/WebAppPrefix/servlet/ServletName。需要保证用户不利用这个URL访问servlet(这样会绕过过滤器 设置)。
例如,假如利用filter和filter-mapping指示名为SomeFilter的过滤器应用到名为SomeServlet的servlet,则如下:

  <filter>
      <filter-name>SomeFilter</filter-name>
      <filter-class>somePackage.SomeFilterClass</filter-class>
    </filter>
    <!-- ... -->
    <filter-mapping>
      <filter-name>SomeFilter</filter-name>
      <servlet-name>SomeServlet</servlet-name>
    </filter-mapping>

 

接着,用servlet和servlet-mapping规定URL   http://host/webAppPrefix/Blah 应该调用SomeSerlvet,如下所示:

 

  <filter>
      <filter-name>SomeFilter</filter-name>
      <filter-class>somePackage.SomeFilterClass</filter-class>
    </filter>
    <!-- ... -->
    <filter-mapping>
      <filter-name>SomeFilter</filter-name>
      <servlet-name>/Blah</servlet-name>
    </filter-mapping>

 

现在,在客户机使用URL   http://host/webAppPrefix/Blah 时就会调用过滤器。过滤器不应用到
http://host/webAppPrefix/servlet/SomePackage.SomeServletClass
尽管有关闭激活器的服务器专用方法。但是,可移植最强的方法时重新映射Web应用钟的/servlet模式,这样使所有包含此模式的请求被送到相同的 servlet中。为了重新映射此模式,首先应该建立一个简单的servlet,它打印一条错误消息,或重定向用户到顶层页。然后,使用servlet和 servlet-mapping元素发送包含/servlet模式的请求到该servlet。程序清单9-1给出了一个简短的例子。

程序清单9-1 web.xml(重定向缺省servlet URL的摘录)


   <?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>Error</servlet-name>
      <servlet-class>somePackage.ErrorServlet</servlet-class>
    </servlet>
    <!-- ... -->
    <servlet-mapping>
      <servlet-name>Error</servlet-name>
      <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>
    <!-- ... -->
    </web-app>

你可能感兴趣的:(xml,Web,应用服务器,servlet,sun)