一 result元素
1.作用
为动作类指定结果视图
2.属性
name:逻辑视图名称,对应的是动作类的返回值,默认是success
type:结果类型,表示以什么方式返回到定义的页面,默认是dispatcher
3.type详解
type类型定义在struts-default.xml文件中
常用的有两种,一种是dispatcher,请求转发,另一种是redirect,重定向
redirectaction:重定向到相同名称空间的动作名称
<action name="hello" class="com.yu.web.action.HelloAction" method="sayHello">
<result name="success" type="redirectAction">error</result>
</action>
<action name="error" class="com.yu.web.action.ActionImpl" method="execute">
<result name="error">/error.jsp</result>
</action>
重定向到 不同名称空间的动作名称
通过配置result属性的param参数来实现
<action name="hello" class="com.yu.web.action.HelloAction" method="sayHello"> <result name="success" type="redirectAction"> <param name="namespace">/struts2</param> <param name="actionName">error</param> </result> </action></package><package name="p2" extends="struts-default" namespace="/struts2"> <action name="error" class="com.yu.web.action.ActionImpl" method="execute"> <result name="error">/error.jsp</result> </action> </package> chain:请求转发到相同名称空间的动作<package name="p1" extends="struts-default" namespace="/struts">
<action name="hello" class="com.yu.web.action.HelloAction" method="sayHello"> <result name="success" type="chain">error</result> </action> <action name="error" class="com.yu.web.action.ActionImpl" method="execute"> <result name="error">/error.jsp</result> </action>
请求到不同名称空间的动作<package name="p1" extends="struts-default" namespace="/struts"> <action name="hello" class="com.yu.web.action.HelloAction" method="sayHello"> <result name="success" type="chain"> <param name="namespace">/struts2</param> <param name="actionName">error</param> </result> </action> </package> <package name="p2" extends="struts-default" namespace="/struts2"> <action name="error" class="com.yu.web.action.ActionImpl" method="execute"> <result name="error">/error.jsp</result> </action> </package>
4.param参数
该参数用来定义重定向或请求转发的名称空间和动作名称,通过其注入的方式实现其功能,相当于set其类的属性值
二.局部视图和全局视图
局部视图,只有当前的动作类可以访问
全局视图,所有的动作类都可以访问
三 在struts2中访问servet的api
第一种,使用其servletActionContext
public class HelloAction extends ActionSupport{ public String sayHello(){ HttpServletRequest request=ServletActionContext.getRequest(); System.out.println(request.getSession()); System.out.println(request.getServletContext()); HttpServletResponse response = ServletActionContext.getResponse(); System.out.println(response); System.out.println("访问完成"); return SUCCESS; } }
第二种,使用依赖注入的方式,实现ServletRequestAware,ServletResponseAware,ServletContextAware
public class HelloAction extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware{ private HttpServletRequest request; private HttpServletResponse response; private ServletContext application; public String execute(){ HttpSession session = request.getSession(); System.out.println(request); System.out.println(response); System.out.println(application); System.out.println(session); return SUCCESS; } @Override public void setServletContext(ServletContext application) { this.application = application; } @Override public void setServletResponse(HttpServletResponse response) { this.response = response; } @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } }
在执行action,以及返回结果视图之前都会执行一些过滤器,上述获取request以及response就是这时候执行的