今天在修改以前项目的时候发现一个bug,在action中用request.setAttribute设置了一个变量,在返回jsp页面后用request.getAttribute去获取这个变量,但是取到的总是空值,检查了半天,突然想起来,这是之前遇到过的一个问题,应该是在struts-config.xml中的forward配置中的redirect="true"引起的,上次出现这个问题,只是改了,没有认真研究,这回要仔细看看,省得以后再忘。
redirect="true"时,会调用sendRedirect进行定向,而sendRedirect定向采用的时"(HTTP
status 302
)。
再浏 览器发生页面改变
以下是从网上找到的一些对forward的分析:
redirect="false"时采用的是server-side forward端的定向
public void sendRedirect(String location)
throws IOException {
if (isCommitted())
throw new IllegalStateException
(sm.getString("coyoteResponse.sendRedirect.ise"));
// Ignore any call from an included servlet
if (included)
return;
// Clear any data content that has been buffered
resetBuffer();
// Generate a temporary redirect to the specified location
try {
String absolute = toAbsolute(location);
// public static final int SC_FOUND = 302;
setStatus(SC_FOUND);
setHeader("Location", absolute);
} catch (IllegalArgumentException e) {
setStatus(SC_NOT_FOUND);
}
引起的结果是:
如果采用redirect=true,那么request是传寄不再下一个页面, 而false是可以
forward是不能跨context转发的(例如:/context1/url 的不能用forward 转发到 /context2/url
中去),但是redirect就可以(因为它是浏览器端转发的,是服务器端发送一个http头部信息302,浏览器根据这个信息再进行转发).
如果是用forward转发的话,因为是内部(容器中)转发的,所以也就不用再经过过滤器(filter)的过滤了,但是redirect就要(因为它是多次向服务器请求).
由于forward会屏蔽转发的url,所以呢,当刷新页面时还是向原来的Url进行请求,所以会引起重复提交的问题。
分享到:
相关推荐
在 Struts-config.xml 文件中,数据源配置是通过 `<data-sources>` 元素实现的,该元素可以包含多个 `<data-source>` 子元素,每个 `<data-source>` 元素可以配置一个数据源。数据源配置中可以设置 driverClass、url...
除了上述元素,`struts-config.xml`还允许定义其他元素,如`<action-forward>`用于定义Action内部的转发,以及`<message-resource>`来配置应用程序的消息资源文件。 正确理解和配置`struts-config.xml`是开发Struts...
在 Struts 应用程序中,`struts-config.xml` 文件是核心配置文件,它定义了应用的行为、控制器(Actions)、数据源(Form Beans)以及视图(JSP 页面)之间的关系。本文将深入探讨 `struts-config.xml` 的主要元素和...
Struts框架支持基于XML的表单验证,这允许在`struts-config.xml`中定义验证规则,或者在ActionForm类中实现自定义的校验逻辑。 ```xml <global-validators> <validator name="required" path="/WEB-INF/validators...
同时,Struts的配置文件(struts-config.xml或struts2的struts.xml)也需要进行相应的调整,引入Spring的插件和配置信息。 `springframework-license.txt`文件则包含了Spring框架的许可协议,它规定了软件的使用、...
`struts-config.xml`是Struts框架的核心配置文件,它定义了应用程序的行为和组件之间的交互。这个文件的主要目的是提供一个集中式的配置点,用于设置数据源、表单bean、异常处理、动作映射等关键元素。以下是每个...
Struts-config.xml是Struts框架的核心配置文件,用于定义应用程序的行为和组件间的交互。这个XML文件按照特定的结构和约定来组织,包含了多个主要元素,这些元素定义了数据源、表单bean、全局转发、动作映射、控制器...
以下是关于struts-config.xml文件配置的详细说明: 1. **数据源配置(Data Sources)**: - `<data-sources>` 元素用于定义Web应用所需的数据源。在这个例子中,我们看到一个名为"data-source"的元素,用于具体...
使用Struts 1.3.8时,开发者需要配置web.xml和struts-config.xml,定义ActionServlet、Action、ActionForm等元素。此外,还需要编写ActionForm类,实现业务逻辑的Action类,以及使用JSP和Struts标签创建用户界面。 ...
配置文件(struts-config.xml)定义了应用的路由规则、数据源和其他设置。Tiles是一个扩展,允许开发者创建可重用的页面布局。JSP Tags(Struts Tags)是定制的JSP标签库,简化了视图层的开发,如表单、数据展示等。...
ActionServlet是Struts框架的核心Servlet,负责解析HTTP请求,根据`struts-config.xml`中的配置调用相应的Action。 10. **标签库**: Struts 1提供了一系列自定义JSP标签,如`<html:form>`、`<bean:write>`等,...
通过在配置文件(struts-config.xml)中声明和组合拦截器,我们可以灵活地控制请求的流程。 在saif-0.1.jar这个库中,可能包含了自定义的拦截器实现。这些拦截器可能为Struts1框架提供了特定的功能增强,例如优化...
Struts框架的核心配置文件`struts-config.xml`是整个应用的关键组成部分之一,它定义了应用程序中各个组件(如Action、FormBean等)的行为与交互方式。本文将详细介绍`struits-config.xml`中的关键配置项,并解释其...
- `struts-config.xml`是Struts的主配置文件,定义了Action、Form Beans、Forward、Plug-In等组件。 6. **动作映射与处理**: - Struts通过`ActionMapping`对象将HTTP请求映射到特定的Action类,Action类负责业务...
总之,`Struct-config.xml`配置文件是Struts框架中不可或缺的部分,它定义了应用的路由规则、ActionForm Bean的使用、Action的处理逻辑以及异常处理和视图转发策略。正确理解和配置这个文件是开发Struts应用的基础。
4. **struts-config.xml**:框架的配置文件,定义了Action、ActionForm、ActionMapping等元素,以及请求到Action的映射关系。 5. **Tiles**:Struts 1.3.x引入了Tiles框架,它允许开发者创建可重用的页面布局,提高...
4. **ActionMapping**:在struts-config.xml中定义,它将URL映射到特定的Action,同时可以包含关于Action的其他信息,如表单Bean、-forward等。 5. **RequestProcessor**:负责初始化ActionServlet,处理请求并调用...
- 编写Struts-config.xml,定义ActionMapping、Form Beans、ActionForward等。 - 实现Action和ActionForm类,处理业务逻辑和用户输入。 - 使用Struts标签库在JSP页面上展示结果。 5. **注意事项** - 确保所有...