使浏览器搜索/提交相对于实际服务页面的资源,而不是原始请求的资源



我有一个场景,我需要将请求从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文件在名称空间下,即customer(这是第一个操作名称空间,也是触发请求的JSP页面的名称空间)。它是浏览器的默认行为,它将寻找页面资源(并提交表单)的路径下的请求得到触发(如果路径是相对的)?

是否有一种方法,我可以使浏览器,使它寻找资源相对于实际页面的路径服务,而不是原始请求路径?

可能这个问题不是很清楚,但我已经尽力用文字来表达了

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

现在已经说了这一切似乎对我来说相当奇怪的是js/image文件使用链接相对于你的servlet路径。我会将这些设置为相对于您的站点根目录。你可以把它们放在这里。如果您无法更改的遗留操作是使用其他位置您可以使用UrlRewriteFilter

最新更新