`

Struts2中redirectAction使用不当引起的生产环境异常

阅读更多
原始需求:编辑页面-保存按钮-保存成功-编辑页面并且提示成功信息
		<action name="editContract" class="contractAction" method="editContract">
			<result name="success">/WEB-INF/jsp/contract/editContract.jsp</result>
		</action>		
		<action name="saveContract" class="contractAction" method="saveContract">
			<result name="success" type="redirectAction">
				<param name="actionName">editContract</param>
				<param name="campaignId">${campaignId}</param>
			</result>
		</action>


以上配置在开发环境,测试环境均没有任何问题。

但是到生产环境,保存能够成功,但是跳转的时候出错,提示该页无法显示。
生产环境配置如下:
Apache的80端口接受外部请求。
Jboss的8080端口处理所有java服务。

Apache接受外部请求后把请求转发到Jboss:
比如用户访问http://www.aaa.com/contract/saveContract.action
apache接受到请求,转发到Jboss:http://127.0.0.1:8080/contract/saveContract.action
处理完成后,跳转到http://127.0.0.1:8080/contract/editContract.action。
此时用户浏览器收到的跳转地址是http://127.0.0.1:8080/contract/editContract.action
从而导致找不到该页面问题的产生。

redirectAction是外部重定向,服务器端把重定向地址传递给浏览器,浏览器再进行跳转。之前参数全部丢失,如果要保留参数,需要手工在xml中指定。
chain是服务器端的跳转,能够保存前一个action的所有参数。

最终修改成如下:
<action name="editContract" class="contractAction" method="editContract">
			<result name="success">/WEB-INF/jsp/contract/editContract.jsp</result>
		</action>		
		<action name="saveContract" class="contractAction" method="saveContract">
			<result name="success" type="chain">
				<param name="actionName">editContract</param>
			</result>
		</action>

分享到:
评论
2 楼 goldpicker 2009-12-11  
可能是apache2没有配置好,要配置apache2把原始的URL信息转发到JBOSS吧。
1 楼 quaff 2009-12-11  
request.getServerPort()是8080?导致的
应该可以配置成request.getServerPort()得到的是原始的端口吧

相关推荐

    struts2中result类型之redirectAction

    通过分析`redirectActionTest`文件,我们可以深入理解Struts2中`redirectAction` Result类型的实现和应用场景,包括配置、工作流程以及优缺点。实践这些知识可以帮助我们更有效地构建和维护Struts2驱动的Web应用。

    Struts2之异常处理案例struts003

    - 应该尽量避免在Action方法中使用`try-catch`块,而是依赖于Struts2的异常处理机制。 - 全局异常处理应该作为最后的防线,用于处理未被局部异常处理捕获的异常。 - 使用自定义异常可以帮助代码更具可读性和可...

    struts2 最新漏洞 S2-016、S2-017修补方案 .docx

    方案 2:重写 Struts2 DefaultActionMapper 的 handleSpecialParameters 方法,增加action、redirect、redirectAction 等参数的过滤 这个方案是通过重写 Struts2 的 DefaultActionMapper 的 ...

    struts2 学习重点笔记

    - **优势**:使用 Struts2 可以显著提高开发效率,因为它能够处理很多基础任务,如数据接收、类型转换、验证等。 **1.2 Struts2 架构** - **MVC 架构**:Struts2 采用经典的 MVC 架构,分为模型(Model)、视图(View)...

    Struts2.0视频教程+struts2.0中文教程

    1. **OGNL(Object-Graph Navigation Language)**:介绍Struts2中使用的表达式语言,用于在Action和视图之间传递数据。 2. **Action与Result**:详细阐述Action类的设计和编写,以及如何定义Result来控制流程跳转...

    Struts2中Action接收参数的方法

    例如,在 Action 中定义了 `User` 对象,可以在 JSP 页面中使用 `user2!add?user.userName=MGC` 的方式将参数传递给 Action。 使用 ModelDriven 接收参数 ModelDriven 是 Struts2 中的一种模型驱动接口,可以用来...

    Struts2实战(Struts2 In Action中文版)

    8. **异常处理**:理解Struts2的异常处理机制,如何自定义错误页面和全局异常处理器。 9. **集成其他技术**:如Spring、Hibernate等,实现业务层和服务层的松耦合。 10. **最佳实践与性能优化**:分享Struts2开发...

    struts2核心文件

    Struts2是一个基于MVC(Model-View-Controller)设计模式的开源Java Web框架,它在Web应用开发中被广泛使用。Struts2的核心在于提供一个强大的、灵活的、可扩展的架构,使得开发者能够更方便地实现业务逻辑与表现层...

    Struts2 part 3:在Action中使用ServletAPI

    在"Struts2 part 3:在Action中使用ServletAPI"这一主题中,我们将深入探讨如何在Struts2的动作类(Action)中集成和利用Servlet API来增强应用的功能。 Servlet API是Java Servlet规范的一部分,它提供了一系列...

    Struts2 使用 Struts2 实现国际化

    总结,实现Struts2的国际化涉及资源文件的创建、配置Struts2的`struts.xml`、设置locale以及在JSP页面中使用国际化标签库。理解和掌握这些步骤对于开发全球化应用程序至关重要。通过阅读源码和利用相关工具,开发者...

    struts2api.zip

    在"struts2api.zip"中,我们可以找到Struts2框架2.5版本的中文文档,这对于理解和使用Struts2来说极其重要。以下是一些关键知识点: 1. **Action接口**:这是Struts2的核心接口,定义了处理用户请求的方法。通过...

    struts2 向结果传参数

    有时我们需要在Action执行后向结果传递参数,以便在目标页面中使用这些参数来呈现数据或执行某些逻辑。本文将深入探讨如何在Struts2中实现向结果传参数。 首先,理解Struts2的结果类型是关键。Struts2支持多种内置...

    struts2课程笔记

    Struts2还支持多种结果类型,比如Redirect、RedirectAction、Stream等,它们提供了灵活的控制流管理。通配符和动态方法调用允许更复杂的Action映射,使得一个Action可以处理多种请求。类型转换功能自动将请求参数...

    Struts2_API(API文档)

    Struts2_API文档是开发者在使用Struts2框架时的重要参考资料,包含了框架中所有类、接口、方法及其实现的详细描述,为编程提供了详细的指导。 在Struts2_API文档中,我们可以找到以下关键知识点: 1. **Action接口...

    struts2的所有jar包

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它在Web开发领域中被广泛使用。Struts2的核心在于提供一个可扩展且灵活的架构,帮助开发者创建结构清晰、易于维护的Web应用。在这个...

    Struts2学习文档

    5. **Struts2的异常映射**:讨论了如何使用异常映射来处理程序中的异常情况。 6. **PreResultListener**:介绍了PreResultListener的作用,即在Result执行前进行某些操作。 7. **自定义Result**:讲解了如何创建...

    java培训-struts2

    在Struts2中,过滤器起到了关键作用,比如`FilterDispatcher`(在Struts2早期版本中)或`StrutsPrepareAndExecuteFilter`(在后期版本中)是Struts2的核心过滤器,它们负责拦截HTTP请求,将其导向Struts2框架进行...

    struts2 in action 实战(中文版+英文版)

    6. **国际化和本地化**:Struts2支持多语言环境,书中会介绍如何配置和使用资源文件来实现应用的国际化。 7. **插件系统**:Struts2拥有丰富的插件库,如Tiles、FreeMarker、i18n等,书中会讲解这些插件的功能和...

    struts2 各种架包

    - **安全问题**:OGNL在Struts2中扮演重要角色,但未正确配置可能导致OGNL注入攻击,因此需要谨慎使用。 5. **插件(Plugins)** - **Struts2-convention-plugin**:自动化配置插件,通过命名约定自动发现Action...

    struts2 action跳转action传参数

    ### Struts2中Action间的参数传递方法 在Struts2框架中,经常需要实现Action之间的跳转,并在跳转过程中传递必要的参数。这种需求在实际开发中非常常见,尤其是在需要根据用户的不同操作来调用不同的业务逻辑时。...

Global site tag (gtag.js) - Google Analytics