为什么web.xml中的* .jsp url模式不起作用

时间:2013-06-19 07:59:29

标签: java-ee tomcat servlets web.xml

  1. 我想将所有请求映射到TestHandler Servlet,因此我使用/*模式。
  2. 然后我想排除jsp映射,所以我将*.jsp模式映射添加到/*前面的jsp。
  3. 问题 .jsp根本没有抓住网址http://localhost/project/fun.jsp。相反,/ 模式捕获它。为什么?怎么会发生这种情况?

  4. <servlet-mapping>
      <servlet-name>jsp</servlet-name>
      <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>
    
    <servlet-mapping>
      <servlet-name>TestHandler</servlet-name>
      <url-pattern>/*</url-pattern>
    </servlet-mapping>
    

    但是,如果我使用某个网址格式,例如fun.jsp而不是*.jsp,则可行。 fun.jsp模式捕获上面的url。谁能告诉我为什么?

2 个答案:

答案 0 :(得分:2)

/*(路径规则)结尾的模式在*.开始(扩展规则)映射之前匹配。确切的URI是完全匹配,这是评估顺序中的第一个。

TestHandler设置为默认的servlet,这应该可以。

<servlet-mapping>
  <servlet-name>TestHandler</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

答案 1 :(得分:1)

要编写servlet映射,应该定义一个servlet类。

<servlet>
    <servlet-name>TestHandler</servlet-name>
    <servlet-class>FULLY QUALIFIED NAME OF THE CLASS</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>TestHandler</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

请注意:::: TestHandler是servlet名称,此servlet映射到JSP中的url(视图)(url pattern / *)

类似于另一个servlet我正在添加servlet类

 <servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>FULLY QUALIFIED NAME OF THE CLASS</servlet-class>
  </servlet>

 <servlet-mapping>
   <servlet-name>jsp</servlet-name>
   <url-pattern>*.jsp</url-pattern>
 </servlet-mapping>

所有代码行都应该用web.xml编写