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

<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>

但是,如果我使用某种 url-patternfun.jsp代替*.jsp,它可以工作。该fun.jsp模式捕获上面的 url。谁能告诉我为什么?

4

2 回答 2

2

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

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

<servlet-mapping>
  <servlet-name>TestHandler</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
于 2013-06-19T09:37:51.337 回答
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 模式 /*)

同样,对于另一个 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 中

于 2013-06-19T09:18:42.070 回答