actionforward类是在action的一个处理结果,action的execute处理结果返回对象为一个actionforward。这个类一般都包含转发或者重定向信息。在struts-config.xml文件中配置forward标签时,只有四个属性,name,path,redirect,classname。
actionForward的redirect属性
当redirect=false时,将保存存储在http请求和请求上下文中的所有内容,仅在同一个应用中可用。当redirect=true时,Web客户端进行一次新的http请求,请求的资源可以在同一个应用中,也可以不在,原来的请求参数不再保存,原来的请求上下文也被清除,新的http请求仅包含ActionForward的path属性里所包含的参数。即redirect=true时为重定向,redirect=false时,为转发。
ActionForward全局与局部的概念
在配置action时,如果有很多的action配置都需要转向同样的页面,那么在每个action里面都需要重新配置一遍,这样代码重复太多,所以ActionForward有全局和局部的概念。
每个action都配置一个forward时,这就是局部ActionForward,如果有很多的action都需要同一个ActionForward。那么就可以配置全局的ActionForward。配置方法为,和Action-mapping标签平级。使用<global-forward></global-forward>标签。
<global-forwards>
<forward
name="login"path="/login.jsp"
redirect="true"/>
</global-forwards>
注意这个一定要配置在action-mapping外,如果同时配置了局部和全局的ActionForward,那么就近原则,先找局部的,如果局部的没有找到,则在找全局变量。
将受保护的页面放到WEB-INF下
有一些受保护的页面通过url可以直接访问,我们可以把它放到WEB-INF文件夹下,这个文件夹下的文件都是受保护的。通过url不可以直接访问。
但是如果放到了这个文件夹下,在配置forward标签的时候path属性要加上相应的路径,因为forward标签默认是从WebRoot根目录下寻找。
手动转向
有的时候在用struts开发时,我们不需要ActionForward来帮我们进行转向,这时execute方法直接返回null就可以,返回null就表示不用ActionForward来进行转向。这时候可以用response.sendRediect来自己进行转向。
如果不是必须手动转向,一般建议要用struts进行转向,因为struts是配置,灵活,而且通过配置文件就知道要转向到哪里,这些都是struts的优点。
动态ActionForward
在有的时候,一个action可能要转向很多个页面,这时候需要在配置文件中进行多个配置。但是这时候我们不希望修改Action中的代码,这时候就需要动态ActionForward了。
动态ActionForward不是有专门的配置,而是在Action中利用ActionForward的setPath方法,来动态的设置转向路径,从而实现动态效果。下面是一个实例。
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//从界面取得要转向的页面号
int page = Integer.parseInt(request.getParameter("page"));
ActionForward myAf = new ActionForward();
//设置要转向的页面号,因为是从页面获取的,页面可以随意输入,即动态
af.setPath("/page" + page + ".jsp");
return af;
}