【问题标题】:How to parse Request URL in Struts 2?如何在 Struts 2 中解析请求 URL?
【发布时间】:2010-03-06 15:13:52
【问题描述】:

我的 Web 应用程序中的注册帐户(使用 struts2 创建)获得一个单独的站点,例如 http://localhost/accountname

每个帐户都有自己的登录页面。注册后,用户将获得一个单独的站点http://localhost/accountname

我想先扫描请求 URL(在 struts2 中),然后将该请求转发到相应的登录页面。

我该怎么做?请帮忙

【问题讨论】:

    标签: java web-applications struts2


    【解决方案1】:

    您可以通过以下方式在您的操作方法中获取请求对象:

       HttpServletRequest request = ServletActionContext.getRequest();
    

    然后您可以像这样找到请求 URL:

       String spath = request.getServletPath();
    

    然后你可以解析它并寻找你想要的模式并相应地转发。


    更新:

    您可以在 struts.xml 配置文件中使用包。让我们说“用户应用程序”。

         <package name="userapps" extends="default" namespace="/userapps">
               <action name="*" class="path.to.your.ActionClass" method="processUrl">
                   <result name="success" type="redirectAction">
                       <param name="actionName">userpage</param>
                       <param name="id">${user.id}</param>
                   </result>
               </action>
         </package>
    

    在 ActionClass 的 processURL 方法中,您可以提取您感兴趣的 URL 部分并设置一个属性,比如用户和他的 id。然后,您从您的操作中返回成功。

    您将有一个名为 userpage 的第二个操作,它将获取用户的 id 并转发到正确的页面。

    现在,localhost/myapp/userapps/anything.action 形式的任何 url 都会调用 processURL 方法。

    【讨论】:

    • 但在 struts2 中,如果我说 localhost/myapp/accountname accountname 操作根本不存在。 accountname 对于不同的用户是不同的。如果我遵循您的代码,我该如何避免这件事的 404 错误
    • 我可以将其设置为命名空间 / 并为所有请求提供此功能吗?
    • 可以说我将我的应用程序设置为默认上下文,localhost 将访问我的 java web 应用程序。然后用户 john 向该服务注册,获取一个类似 localhost/john 的 URL。当他第一次访问他的站点 htt://localhost/john 时,他看到了他的登录页面。登录后,假设他的帐户中有一个任务页面,其 URL 为 localhost/john/tasks 。我也可以将您的功能应用于任务页面请求吗?在这种情况下,代码将如何变化?
    • @lakshman 是的。您可以将此应用于您所描述的内容。您可以在默认包中为任务和其他人创建操作元素,然后最后创建映射到 *.这将是处理所有请求的全部内容,例如 localhost/john。
    猜你喜欢
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多