现在的位置: 首页 > 综合 > 正文

深入struts框架学习:struts核心类ActionForward

2013年10月07日 ⁄ 综合 ⁄ 共 1849字 ⁄ 字号 评论关闭

         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;
	}


抱歉!评论已关闭.