0

我有一个场景,我需要将来自 struts 2 动作的请求转发到不是 Struts 2 的遗留动作类。这是我的流程

JSP(serverd from struts 2 action under customer namespace)--->Action1(Struts 2 action under customer namespace)--->Action2(Non Struts 2 Action)--->ResultJSP.

这是我的结果注释,它实际上将请求转发给遗留操作

@Result(name = "displayCustomer",location = "legacyAction.do", type = "dispatcher")

我可以正确地看到我的 ResultJSP。但问题是浏览器正在寻找包含在该jsp 中的所有资源,如图像、命名空间下的javascript 文件,即客户(这是第一个操作命名空间,也是触发请求的JSP 页面的命名空间)。浏览器的默认行为是否会在触发请求的路径下查找页面资源(并提交表单)(假设路径是相对的)?

有没有一种方法可以让浏览器查找相对于实际页面路径而不是原始请求路径的资源?

可能是查询不是很清楚,但我尽力用文字表达

4

1 回答 1

0

我将尝试总结我们在评论中讨论的内容。首先,一定要了解客户端在服务器端做了什么。对于文档相关链接,浏览器会根据您在地址栏中看到的内容进行查找。这是一个长答案,描述了在 jsp 中创建链接的各种方法。其次,您可以通过多种方式指示浏览器更改位置,例如发送重定向。但是对于重定向(302http 状态码),浏览器会发出 GET 请求。这对您不利,因为您正在执行 POST 并希望参数也被重定向。但是可以使用状态码代替302状态码。307这个很棘手,我之前发布的链接,虽然关于 .net(只是在谷歌上搜索重定向时弹出的第一个),但更详细地描述了这些状态代码,并且还提到了不使用 302 或 307 进行重定向的解决方案。这可以通过一些客户端 javascript 来完成。基本上,您不会转发到您的第二个操作,而是会返回一个带有表单和 javascript 的虚拟 jsp,它会在页面加载时立即将此表单提交给第二个操作。

现在说了这么多,对我来说 js/image 文件使用相对于你的 servlet 路径的链接似乎很奇怪。我会让这些相对于您的站点根目录。你可以把它们放在那里。如果您无法更改的某些遗留操作正在使用其他位置,您可以使用类似UrlRewriteFilter

于 2013-03-04T18:00:06.380 回答