【问题标题】:why *.jsp url pattern in web.xml does not work为什么 web.xml 中的 *.jsp url 模式不起作用
【发布时间】:2013-06-15 16:06:56
【问题描述】:
  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 模式,例如 fun.jsp 而不是 *.jsp,它就可以工作。 fun.jsp 模式捕获上面的 url。谁能告诉我为什么?

【问题讨论】:

    标签: jakarta-ee tomcat servlets web.xml


    【解决方案1】:

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

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

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

    【讨论】:

    • 那么,如何更改订单?
    • 你不能,这是servlet规范
    • 你应该尝试使用/(而不是/*)作为url-pattern,这是默认的servlet
    • 看起来/ 工作得很好。非常感谢!但我不明白//* 之间的区别!在哪里可以找到这部分的文档(url-pattern)?
    • /THE 默认映射,与 /* 结束映射不同!这个页面解释得很好:javapapers.com/servlet/what-is-servlet-mapping 对于确切的规范,恐怕你必须检查 Java Servlet 规范......
    【解决方案2】:

    要编写 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中

    【讨论】:

    • 谢谢!我明白你的意思。我有&lt;servlet-class&gt; 部分。但实际上,jsp 是定义在 Tomcat/conf/web.xml 中的一个 servlet。
    猜你喜欢
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 2017-05-04
    • 2017-11-19
    • 2018-02-01
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多