将 ServletRequestListener 映射到特殊的 Servlet

Map ServletRequestListener to Special Servlet

我有几个 servlet,在我的例子中我需要实现 ServletRequestListener。但是,我不希望侦听器对任何 servlet 中的每个请求做出反应。我想知道是否有可能将特定的 ServletRequestListener 映射到特定的特定 servlet。我的 web.xml 看起来像:

 <servlet>
    <servlet-name>CommonsServlet</servlet-name>
    <servlet-class>
        com.promptlink.dslib.gwt.common.server.rpc.CommonsServletImpl</servlet-class>
  </servlet>
...
<listener>
        <listener-class>
            com.promptlink.dslib.gwt.common.server.httpListeners.ServletRequestListenerImpl
        </listener-class>
  </listener>

如果您只想对特定 servlet 的请求做出反应,那么 servlet 本身就是执行此操作的理想场所。

如果您不控制 servlet 代码,您可以编写 Filter 并赋予它与 servlet 相同的 URL 模式,或者直接在过滤器映射中引用 servlet。

ServletRequestListener 不可能做到这一点。 servlet 请求侦听器侦听 每个 servlet 请求。只需创建一个 Filter 而不是您可以直接映射到 servlet 名称(不,不是它的 URL 模式,这对维护不友好)。

<filter>
    <filter-name>CommonFilter</filter-name>
    <filter-class>com.example.CommonFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CommonFilter</filter-name>
    <servlet-name>CommonsServlet</servlet-name>
</filter-mapping>

另请参阅: