我有一个场景,我需要将请求从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页面的命名空间)。 它是浏览器的默认行为,它将在请求获取的路径下查找页面资源(并提交表单) 触发(如果路径是相对的)?
有没有办法让浏览器能够查找相对于实际页面服务路径的资源而不是 原始请求路径?
可能是查询不是很清楚,但我尽力把它用文字
答案 0 :(得分:0)
我将尝试总结我们在评论中讨论的内容。首先,请务必了解客户端在服务器端的操作。对于文档相对链接,浏览器会根据您在地址栏中看到的内容进行查找。这是一个long answer,描述了在jsp中创建链接的各种方法。其次,有一些方法可以指示浏览器更改位置,例如发送重定向。但是,对于重定向(302
http状态代码),浏览器将发出GET请求。这对你不好,因为你正在进行POST并希望参数也被重定向。但是,可以使用302
状态代码而不是307
状态代码。这个很棘手且链接i posted before,虽然关于.net(只是在重定向上搜索时弹出的第一个),更详细地描述了这些状态代码,并且还提到了在不使用302的情况下进行重定向的解决方案,或者这可以通过一些客户端javascript来完成。基本上不是转发到你的第二个动作,你将返回一个带有你的表单和javascript的虚拟jsp,它会在页面加载时立即将此表单提交给第二个动作。
现在说了这一切对我来说,js / image文件使用相对于你的servlet路径的链接似乎很奇怪。我会根据你的站点根目录制作那些。你可以把它们放在那里。如果您无法更改的某些旧版操作正在使用其他位置,则可以使用UrlRewriteFilter