在 Struts2 中使用 Tuckey URL Rewrite 在 URL 重写方面需要帮助 [英] Need help in URL Rewrite using Tuckey URL Rewrite in Struts2

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

问题描述

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

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.

如果您在 .html#to" rel="nofollow"><to> 标签会显示新的网址,因为这意味着

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 重写方面需要帮助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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