【问题标题】:How to implement complicated servlet mapping in web.xml descriptor如何在 web.xml 描述符中实现复杂的 servlet 映射
【发布时间】:2011-04-29 03:49:00
【问题描述】:
我面临下一个任务:我有一个主机,例如 host.com 和网络应用程序。
用 Java (JSP/Servlets+Struts2) 编写的应用程序。
我需要实现这样的 HTTP 请求到 servlet 映射:如果用户在浏览器中输入地址,例如 http://host.com/admin.action,其中 admin.action - 现有操作,在 struts.xml 中定义,然后为用户呈现这些 struts2 操作。如果用户输入类似http://host.com/abra-kadabra 的内容(操作 abra-kadabra 在 struts.xml 中未定义),则将此请求传递给某个 servlet 或 struts 操作。
有人可以建议如何做这样的事情吗?
谢谢!
【问题讨论】:
标签:
java
url-rewriting
struts2
web.xml
【解决方案1】:
Servlet 规范并没有给你很多选择。您可以将您的 servlet 映射到特定路径 (/some/specific/path)、某个层次结构下的所有路径 (/dir/*) 或某个扩展名 (*.action)。你能做的最好的是将你的servlet映射到*.action,然后根据request.getRequestURI()或request.getServletPath()确定要执行的操作。
【解决方案2】:
您可以使用 Tuckey 非常强大的URLRewriteFilter。即
<rule>
<from>^/abra-kadabra$</from>
<to>/admin.action</to>
</rule>
此规则会将“/abra-kadabra”上的所有浏览器请求转发到对用户透明的“/admin.action”。