【问题标题】:Need help in URL Rewrite using Tuckey URL Rewrite in Struts2在 Struts2 中使用 Tuckey URL Rewrite 在 URL Rewrite 方面需要帮助
【发布时间】:2016-04-11 13:23:11
【问题描述】:

我想重写基于 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>

【问题讨论】:

  • 为什么要使用urlrewrite?要删除/MyProject? -> 只需将您的应用程序部署到 root。要更改loadLogin.action? -> 只需重命名您的操作。
  • @AleksandrM 关于重命名操作的第二个建议,我正在使用通配符映射,其中 load() 是我的 LoginController 中显示登录页面的方法,那么我该如何重命名它以获得相同的名称结果。不过谢谢你的回复..
  • 为什么要使用通配符?您还映射到登录控制器的什么?创建不带通配符的操作。
  • @hasan 我也有同样的问题,Alek 请帮忙
  • @RomanC 我希望我的网址不包含实际的项目和操作名称。他们必须蒙面。我在这里提到了其中一个链接:stackoverflow.com/questions/25256628/…,您建议您在其中使用 URL 重写技术。谢谢

标签: java url-rewriting struts2 tuckey-urlrewrite-filter


【解决方案1】:

要重写此 URL http://localhost:8080/login,您必须将 urlrewrite 过滤器部署到根上下文。但是应用程序在/MyProject 上下文中运行。您不能将同一应用程序中的两个过滤器部署到同一上下文以执行所需的操作。

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

如果您在&lt;to&gt; 标记中使用type="redirect",则会显示新网址,因为这意味着

匹配此规则的“条件”和“发件人”的请求将被 HTTP 重定向。这是一样的: HttpServletResponse.sendRedirect([to value]))

要重写 URL,您应该使用在根上下文中部署到应用程序的此规则

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

【讨论】:

    猜你喜欢
    • 2018-12-02
    • 1970-01-01
    • 2013-02-06
    • 2014-09-26
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多