【问题标题】:Web.xml - url pattern mapped twiceWeb.xml - url 模式映射两次
【发布时间】:2011-03-14 17:38:57
【问题描述】:

我们的 web.xml 包含以下摘录..

<servlet>
    <servlet-name>testServlet</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>testServlet</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>

<filter>
    <filter-name>anotherServlet</filter-name>
    <filter-class>com.test.anotherServlet</filter-class>    
</filter>
<filter-mapping>
    <filter-name>anotherServlet</filter-name>
    <url-pattern>*.htm</url-pattern>
</filter-mapping>

我需要了解当遇到 *.htm(比如 hello.htm)url 时容器如何映射......当这样的请求发生时会发生什么。

【问题讨论】:

  • 调用Filter 和Servlet 是个坏主意。而是称它为com.test.AnotherFilter 左右。

标签: java servlets web.xml servlet-filters


【解决方案1】:

第二个映射用于过滤器,而不是 servlet。

当一个请求进入 servlet 容器时,它首先通过一个过滤器链,然后到达 servlet,然后以相反的顺序通过过滤器返回。

过滤器的 API 与 servlet 稍有不同:有一个名为 doFilter() 的方法可以获取 ServletRequest 和 ServletResponse。它使用相同的参数通过chain.doFilter 调用链的其余部分;在过滤器链的末端,这些参数被传递给 servlet。所以过滤器能够改变甚至替代进来的请求对象和出来的响应对象。

还有更多信息here。

【讨论】:

  • 卡尔,感谢您的快速响应.. 我浏览了那个链接.. 所以如果有多个过滤器映射.. firstFilter*.htm secondFilter*.htm 那么,首先调用firstFilter的doFilter()方法,如果调用chain.doFilter(),则调用secondFilter的doFilter,最后调用firstServlet的service方法。 . 理解正确吗?
猜你喜欢
  • 2010-10-04
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 2011-05-12
  • 2017-03-27
  • 2011-02-24
  • 2012-04-17
相关资源
最近更新 更多