在Struts2中使用Tuckey URL Rewrite进行URL Rewrite时需要帮助 [英] Need help in URL Rewrite using Tuckey URL Rewrite in Struts2

查看:189
本文介绍了在Struts2中使用Tuckey URL Rewrite进行URL Rewrite时需要帮助的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想重写基于Struts2的应用程序的URL(当前在开发环境中).我已经搜索了它,发现了有关Tuckey URL Rewrite的信息,并在我的项目中进行了设置.现在,我希望当前为http://localhost:8080/MyProject/loadLogin.action的登录URL(我在Struts2中使用通配符映射)看起来像http://localhost:8080/login. 下面是我的配置代码:

I want to rewrite the URL for my Struts2 based application(currently in development environment). I have searched for it and found about Tuckey URL Rewrite and set it up in my project. Now i want my login url which is currently http://localhost:8080/MyProject/loadLogin.action (I am using Wildcard mapping in Struts2) to look like http://localhost:8080/login. Below is my configuration code:

struts.xml:

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,我不知道我是否已正确配置该规则:

Now here's the urlrewrite.xml which has the rule and I do not know if I have configured the rule correctly:

<?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上下文中运行.您不能在同一个应用程序中将两个过滤器都部署到相同的上下文中以执行所需的操作.

To rewrite to this URL http://localhost:8080/login you have to deploy urlrewrite filter to the root context. But the application is running at the /MyProject context. You can't have both filters in the same application deployed to the same context to perform desired.

重写URL的工作方式:首先访问要显示的URL,然后urlrewrite过滤器搜索规则,如果发现匹配,则执行规则并将请求转发(默认情况下)到隐藏的新URL为用户.

How rewrite URL works: first you access the URL that you want to show, then urlrewrite filter searches the rules and if it find the match the rule is executed and request is forwarded (by default) to the new URL which is hidden for the user.

如果您在

If you use type="redirect" in the <to> tag the new URL will show up, because it means

与此规则的条件"和来自"匹配的请求将被HTTP重定向.这样做是一样的: HttpServletResponse.sendRedirect([to value]))

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,您应该使用在根上下文中部署到应用程序的此规则

To rewrite URL you should use this rule deployed to the app at the root context

<rule>
  <from>^/login$</from>
  <to type="redirect">/MyProject/loadLogin.action</to>
</rule>

这篇关于在Struts2中使用Tuckey URL Rewrite进行URL Rewrite时需要帮助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆