Servlet 映射:带有斜杠的 URL 的 url-pattern
Posted
技术标签:
【中文标题】Servlet 映射:带有斜杠的 URL 的 url-pattern【英文标题】:Servlet mapping: url-pattern for URLs with trailing slash 【发布时间】: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:<port>/MyApp/HelloWorld
,则调用 servlet HelloWorldServlet
。
我还希望我的 serverlet 响应 http://localhost:<port>/MyApp/HelloWorld/
。我怎样才能达到这个效果?我正在使用 NetBeans 进行开发,但它不允许我放置以 /
结尾的模式。
【问题讨论】:
它不是已经工作了吗? 如果你把尾随的“/”放在一起会发生什么? 如果我在没有netbeans前端的情况下编辑xml并部署项目,图像、css和js没有加载O.o. 如果我在没有netbeans前端的情况下编辑xml并部署项目,css、js、图像等不会加载O.o。正如所有人所说,解决方案是使用语法 /*。有了这个,你可以调用 .../HelloWorld 和 .../HelloWorld/。如果我写 .../HelloWorld/foo 调用相同的 servlet(就像在这个页面中一样)。如果你不想要这种效果,你必须使用 HttpServletRequest.getPathInfo() 方法,正如精英绅士所说的那样。如果结果与“/”不同,则重定向到一个jsp以显示错误(未找到)。 【参考方案1】:在<url-pattern>
上添加通配符后
<url-pattern>/HelloWorld/*</url-pattern>
您可以使用HttpServletRequest.getPathInfo()
获取与该 URL 关联的额外路径。
例如
http://localhost:<port>/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)。或者,您可以使用为您提供映射的框架。
【讨论】:
以上是关于Servlet 映射:带有斜杠的 URL 的 url-pattern的主要内容,如果未能解决你的问题,请参考以下文章