【问题标题】:Servlet mapping: url-pattern for URLs with trailing slashServlet 映射:带有斜杠的 URL 的 url-pattern
【发布时间】:2011-05-21 14:57:47
【问题描述】:

我有一个与 servlet 映射有关的问题。我在 web.xml 中有以下内容:

<servlet>
    <servlet-name>HelloWorldServlet</servlet-name>
    <servlet-class>test.HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>HelloWorldServlet</servlet-name>
    <url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>

如果我访问 http://localhost:&lt;port&gt;/MyApp/HelloWorld,则调用 servlet HelloWorldServlet

我还希望我的 serverlet 响应 http://localhost:&lt;port&gt;/MyApp/HelloWorld/。我怎样才能达到这个效果?我正在使用 NetBeans 进行开发,但它不允许我放置以 / 结尾的模式。

【问题讨论】:

  • 它不是已经工作了吗?
  • 如果你把尾随的“/”放在一起会发生什么?
  • 如果我在没有netbeans前端的情况下编辑xml并部署项目,图像、css和js没有加载O.o.
  • 如果我在没有netbeans前端的情况下编辑xml并部署项目,css、js、图像等不会加载O.o。正如所有人所说,解决方案是使用语法 /*。有了这个,你可以调用 .../HelloWorld 和 .../HelloWorld/。如果我写 .../HelloWorld/foo 调用相同的 servlet(就像在这个页面中一样)。如果你不想要这种效果,你必须使用 HttpServletRequest.getPathInfo() 方法,正如精英绅士所说的那样。如果结果与“/”不同,则重定向到一个jsp以显示错误(未找到)。

标签: java tomcat servlets netbeans web.xml


【解决方案1】:

&lt;url-pattern&gt; 上添加通配符后

<url-pattern>/HelloWorld/*</url-pattern>

您可以使用HttpServletRequest.getPathInfo() 获取与该 URL 关联的额外路径。

例如

http://localhost:&lt;port&gt;/MyApp/HelloWorld/one/

结果将是

/one/

来自 JavaDoc:

返回任何额外的路径信息 与客户端的 URL 关联 当它提出这个请求时发送。这 额外的路径信息如下 servlet 路径,但在查询之前 字符串,以“/”开头 字符。

【讨论】:

    【解决方案2】:

    使用通配符。您可以将流向特定 URL 的所有流量重定向到同一个 servlet。例如,您可以添加以下内容:

    <servlet-mapping>
        <servlet-name>HelloWorldServlet</servlet-name>
        <url-pattern>/HelloWorld/*</url-pattern>
    </servlet-mapping>
    

    这会将带有斜杠的 URL 重定向到您的原始 servlet。

    一个想法 - 这会将任何到这个 URL 模式的东西重定向到 servlet。如果你想让其他 URL 超过这个 URL,你应该创建一个 servlet,它将重定向到正确的 URL(通过查看指定的 URL)。或者,您可以使用为您提供映射的框架。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-03
      • 2012-07-18
      • 2011-09-21
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 2015-03-13
      • 2015-02-24
      相关资源
      最近更新 更多