Struts2 中的 Jakarta 没有链重定向(上传大文件)
No chain redirection with Jakarta in Struts2 (Uploading big files)
我正在用 struts2 制作一个新项目。很好,但我不知道在这种情况下发生了什么。
项目有链重定向当业务逻辑失败时,其return到最后JSP(最后一个动作),重新加载成功所有没有编程工作的页面(它也重新加载旧请求)。
无论如何,当 Jakarta 检测到用户正在尝试上传大文件(默认配置为 20 MB)时,操作逻辑知道并强制链重定向到最后一个操作。
我调试这个逻辑。我有一个拦截器可以做几件事,在典型的行中:
result = invocation.invoke();
当 Jakarta 强制链重定向时,拦截器捕获了这个新请求,但是没有通过 invoke 方法到达操作。
我不知道为什么会这样。当相同的操作强制执行相同的链重定向时,因为其他验证(例如 struts2 的 FileUpload 拦截器或拥有验证)都可以正常工作。
我在程序中解决了避免重定向,但我想知道为什么我不能使用我的普通模式
部分struts.xml:
<constant name="struts.multipart.maxSize" value="20971520" />
如果所有验证都正确,则 MostrarResumenSubsanacion 的结果是下一个操作。
如果某些验证失败,则 MostrarRespuestaSubsanaciones 的结果是最后一个操作。
ErrorJakarta 的结果是解决问题的新行。
<action name="MostrarResumenSubsanacion" class="struts.expedientes.subsanaciones.MostrarResumenSubsanacion">
<param name="conseguirConexion">SI</param>
<param name="seguimiento">SI</param>
<interceptor-ref name="interceptorFileStack"></interceptor-ref>
<result name="MostrarRespuestaSubsanaciones" type="chain">MostrarRespuestaSubsanaciones</result>
<result name="ErrorJakarta">/forms/struts/expedientes/subsanaciones/ventanaRespuestaSubsanacion.jsp</result>
<result name="MostrarResumenSubsanacion">/forms/struts/expedientes/comun/ventanaResumen.jsp</result>
</action>
<action name="MostrarRespuestaSubsanaciones" class="struts.expedientes.subsanaciones.MostrarRespuestaSubsanaciones">
<param name="conseguirConexion">SI</param>
<param name="seguimiento">SI</param>
<interceptor-ref name="interceptorBaseStack"></interceptor-ref>
<result name="MostrarVentanaSubsanaciones">/forms/struts/expedientes/subsanaciones/ventanaRespuestaSubsanacion.jsp</result>
<result name="input">/forms/struts/expedientes/subsanaciones/ventanaRespuestaSubsanacion.jsp</result>
</action>
不鼓励使用 Chain
结果类型;尝试使用 redirectAction
(或 dispatcher
)代替。
Struts2中的每个请求:
- 经过一堆拦截器,
- 最终 达成行动,
- 然后通过相同的拦截器堆栈向后过滤,运行行后的代码
invocation.invoke();
(如果有);
如果发生不好的事情(但可以恢复),an INPUT
result is thrown;否则,如果发生非常糟糕的事情,则会抛出异常。
然后,如果您达到 20MB 的阈值,则会在某处返回 INPUT
结果,而不是正常的(错误的)链接过程。
通过查看两个拦截器堆栈的定义应该更容易破坏到底发生了什么,但是根据上述信息,您应该能够比更新问题更快地找到问题。
我正在用 struts2 制作一个新项目。很好,但我不知道在这种情况下发生了什么。
项目有链重定向当业务逻辑失败时,其return到最后JSP(最后一个动作),重新加载成功所有没有编程工作的页面(它也重新加载旧请求)。
无论如何,当 Jakarta 检测到用户正在尝试上传大文件(默认配置为 20 MB)时,操作逻辑知道并强制链重定向到最后一个操作。
我调试这个逻辑。我有一个拦截器可以做几件事,在典型的行中:
result = invocation.invoke();
当 Jakarta 强制链重定向时,拦截器捕获了这个新请求,但是没有通过 invoke 方法到达操作。
我不知道为什么会这样。当相同的操作强制执行相同的链重定向时,因为其他验证(例如 struts2 的 FileUpload 拦截器或拥有验证)都可以正常工作。
我在程序中解决了避免重定向,但我想知道为什么我不能使用我的普通模式
部分struts.xml:
<constant name="struts.multipart.maxSize" value="20971520" />
如果所有验证都正确,则 MostrarResumenSubsanacion 的结果是下一个操作。
如果某些验证失败,则 MostrarRespuestaSubsanaciones 的结果是最后一个操作。
ErrorJakarta 的结果是解决问题的新行。
<action name="MostrarResumenSubsanacion" class="struts.expedientes.subsanaciones.MostrarResumenSubsanacion">
<param name="conseguirConexion">SI</param>
<param name="seguimiento">SI</param>
<interceptor-ref name="interceptorFileStack"></interceptor-ref>
<result name="MostrarRespuestaSubsanaciones" type="chain">MostrarRespuestaSubsanaciones</result>
<result name="ErrorJakarta">/forms/struts/expedientes/subsanaciones/ventanaRespuestaSubsanacion.jsp</result>
<result name="MostrarResumenSubsanacion">/forms/struts/expedientes/comun/ventanaResumen.jsp</result>
</action>
<action name="MostrarRespuestaSubsanaciones" class="struts.expedientes.subsanaciones.MostrarRespuestaSubsanaciones">
<param name="conseguirConexion">SI</param>
<param name="seguimiento">SI</param>
<interceptor-ref name="interceptorBaseStack"></interceptor-ref>
<result name="MostrarVentanaSubsanaciones">/forms/struts/expedientes/subsanaciones/ventanaRespuestaSubsanacion.jsp</result>
<result name="input">/forms/struts/expedientes/subsanaciones/ventanaRespuestaSubsanacion.jsp</result>
</action>
不鼓励使用
Chain
结果类型;尝试使用redirectAction
(或dispatcher
)代替。Struts2中的每个请求:
- 经过一堆拦截器,
- 最终 达成行动,
- 然后通过相同的拦截器堆栈向后过滤,运行行后的代码
invocation.invoke();
(如果有);
如果发生不好的事情(但可以恢复),an
INPUT
result is thrown;否则,如果发生非常糟糕的事情,则会抛出异常。
然后,如果您达到 20MB 的阈值,则会在某处返回 INPUT
结果,而不是正常的(错误的)链接过程。
通过查看两个拦截器堆栈的定义应该更容易破坏到底发生了什么,但是根据上述信息,您应该能够比更新问题更快地找到问题。