我想重写基于Struts2的应用程序的URL(目前在开发环境中).我搜索了它,发现了Tuckey URL Rewrite并在我的项目中进行了设置.现在我想要我的登录URL,当前http:// localhost:8080 / MyProject / loadLogin.action(我在Struts2中使用通配符映射)看起来像http:// localhost:8080 / login.
以下是我的配置代码:
struts.xml中:
<action name="*Login" method="{1}" class="com.myproject.controller.LoginController">
<result name="login" type="tiles">mylogin</result>
</action>
web.xml中:
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>logLevel</param-name>
<param-value>DEBUG</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
现在这里是urlrewrite.xml,它有规则,我不知道我是否正确配置了规则:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
"http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
<!--
Configuration file for UrlRewriteFilter
http://www.tuckey.org/urlrewrite/
-->
<urlrewrite>
<rule>
<from>^/*</from>
<to type="redirect">/login</to>
</rule>
</urlrewrite>
最佳答案 要重写到此URL http:// localhost:8080 / login,您必须将urlrewrite过滤器部署到根上下文.但是应用程序正在/ MyProject上下文中运行.您不能将同一应用程序中的两个过滤器部署到同一上下文中以执行所需的操作.
重写URL的工作原理:首先访问要显示的URL,然后urlrewrite filter搜索规则,如果找到匹配项,则执行规则并将请求转发(默认情况下)到为用户隐藏的新URL .
如果您在<to>
标记中使用type =“redirect”,则会显示新的URL,因为这意味着
Requests matching the “conditions” and the “from” for this rule will be HTTP redirected. This is the same a doing:
HttpServletResponse.sendRedirect([to value]))
要重写URL,您应该使用在根上下文中部署到应用程序的此规则
<rule>
<from>^/login$</from>
<to type="redirect">/MyProject/loadLogin.action</to>
</rule>