struts2.1.6教程三、在Action获取Scope对象
2015-04-15 10:23
295 查看
引言:在前面的Action操作中,关键就是Action中的exectue方法,但是此方法并没有request、session、application等对象作为参数,自然就不能利用这些对象来操作。下面我们建立struts2scope项目,并用四种方式来获取这些对象:
[b]方式一、与Servlet解耦合的非IOC方式[/b]
struts.xml配置如下:
loginSuc.jsp的主要内容如下:
分析:通过ActionContext的getContext静态方法得到ActionContext对象,然后ActionContext对象调用get方法来获取一个存储在request范围中的对象。我们使用el或通过request.getAttribute这样的方式均可以获取对象值,这说明了这些Map request对象实际是存储在request范围内的对象。
[b]方式二、与Servlet解耦合的IOC方式[/b]
我们建立Login2Action,主要代码如下:
注册此Action的name为login2,随后修改登录提交为.../login2.action。便可以发布测试。说明:此方法其实和方式一很相似,只是在方式一中我们需要手动的为Map request赋值,但是在方式二中它是通过实现接口,在重写接口中的方法中完成对Map requset的赋值,所以称之IOC方式。借助此例,略谈下依赖注入与控制反转:所谓依赖注入就是一个对象自己本身的初始化是依赖其它对象。比如这里Map request这些对象会依赖struts2来给其初始化,称为依赖注入,而依赖注入的就表示,这些对象的控制权不再由此类本身掌握,而是交给了别的对象,即是控制权反转了。 强调:方式二是开发中主要用的方式,应重点掌握
[b]方式三、与Servlet耦合的非IOC方式[/b]
此方法获取的纯粹的Scope对象,它与容器相关,这些Scope对象操作更强。同样只需要注册此Action并修改登录页面便可进行测试
[b]方式四、与Servlet耦合的IOC方式[/b]
同样只需要注册此Action并修改登录页面便可发布测试
强调:方式四是开发中主要用的方式,应重点掌握
注意:方式二RequestAware和方式四[b]ServletRequestAware[/b]
实现的接口不一样,所以是月[b]Servlet[/b]耦合和解耦合
附:一般开发使用一个抽象类封装request和response,其他action继承就可以使用HttpServletRequest 和HttpServletResponse
[b]方式一、与Servlet解耦合的非IOC方式[/b]
package com.asm; public class LoginAction extends ActionSupport { private String username; ActionContext context; Map request; Map session; Map application; public String execute() throws Exception { context=ActionContext.getContext(); request=(Map) context.get("request"); session=context.getSession(); application=context.getApplication(); request.put("req", "requst属性"); session.put("ses", "sesion属性"); application.put("app", "application属性"); return SUCCESS; } ...省略username的get/set方法 }
struts.xml配置如下:
<struts> <package name="scope" extends="struts-default"> <action name="login" class="com.asm.LoginAction"> <result>/loginSuc.jsp</result> </action> </package> </struts>
loginSuc.jsp的主要内容如下:
${requestScope.req} ${sessionScope.ses} ${applicationScope.app}
<h4>以下使用scope.getAttribute的形式来接受</h4> request: <%=request.getAttribute("req") %><br> session: <%=session.getAttribute("ses") %><br> application:<%=application.getAttribute("app") %><br>
分析:通过ActionContext的getContext静态方法得到ActionContext对象,然后ActionContext对象调用get方法来获取一个存储在request范围中的对象。我们使用el或通过request.getAttribute这样的方式均可以获取对象值,这说明了这些Map request对象实际是存储在request范围内的对象。
[b]方式二、与Servlet解耦合的IOC方式[/b]
我们建立Login2Action,主要代码如下:
package com.asm; public class Login2Action extends ActionSupport implements RequestAware,SessionAware,ApplicationAware { private String username; Map request; Map session; Map application; public String execute() throws Exception { request.put("req", "requst属性"); session.put("ses", "sesion属性"); application.put("app", "application属性"); return SUCCESS; } public void setRequest(Map<String, Object> request) { this.request=request; } public void setSession(Map<String, Object> session) { this.session=session; } public void setApplication(Map<String, Object> application) { this.application=application; } ...省略username的get/set方法 }
注册此Action的name为login2,随后修改登录提交为.../login2.action。便可以发布测试。说明:此方法其实和方式一很相似,只是在方式一中我们需要手动的为Map request赋值,但是在方式二中它是通过实现接口,在重写接口中的方法中完成对Map requset的赋值,所以称之IOC方式。借助此例,略谈下依赖注入与控制反转:所谓依赖注入就是一个对象自己本身的初始化是依赖其它对象。比如这里Map request这些对象会依赖struts2来给其初始化,称为依赖注入,而依赖注入的就表示,这些对象的控制权不再由此类本身掌握,而是交给了别的对象,即是控制权反转了。 强调:方式二是开发中主要用的方式,应重点掌握
[b]方式三、与Servlet耦合的非IOC方式[/b]
package com.asm; public class Login3Action extends ActionSupport { private String username; HttpServletRequest request; HttpSession session; ServletContext application; public String execute() throws Exception { request = ServletActionContext.getRequest(); session = request.getSession(); application = ServletActionContext.getServletContext(); request.setAttribute("req", "requst属性"); session.setAttribute("ses", "sesion属性"); application.setAttribute("app", "application属性"); return SUCCESS; } ...省略username的get/set方法。 }
此方法获取的纯粹的Scope对象,它与容器相关,这些Scope对象操作更强。同样只需要注册此Action并修改登录页面便可进行测试
[b]方式四、与Servlet耦合的IOC方式[/b]
package com.asm; public class Login4Action extends ActionSupport implements[b] ServletRequestAware,ServletContextAware[/b]{ private String username; ActionContext context; HttpServletRequest request; HttpSession session; ServletContext application; public String execute() throws Exception { context=ActionContext.getContext(); session=request.getSession(); request.setAttribute("req", "requst属性"); session.setAttribute("ses", "sesion属性"); application.setAttribute("app", "application属性"); return SUCCESS; } public void setServletRequest(HttpServletRequest request) { System.out.println("测试:"+request); this.request=request; } public void setServletContext(ServletContext application) { System.out.println("测试:"+application); this.application=application; } ...省略username的get/set方法 }
同样只需要注册此Action并修改登录页面便可发布测试
强调:方式四是开发中主要用的方式,应重点掌握
注意:方式二RequestAware和方式四[b]ServletRequestAware[/b]
实现的接口不一样,所以是月[b]Servlet[/b]耦合和解耦合
附:一般开发使用一个抽象类封装request和response,其他action继承就可以使用HttpServletRequest 和HttpServletResponse
public abstract class BaseAction implements ServletRequestAware, ServletResponseAware { public HttpServletRequest request; public HttpServletResponse response; @Override public void setServletResponse(HttpServletResponse response) { this.response = response; } @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } }
相关文章推荐
- Struts2_Action获取Scope对象
- 在Action获取Scope对象
- Struts的Action中获取域对象API
- Struts2.properties属性文件中的devModel和DynamicMethodInvocation。。。Action中servlet对象的获取
- struts2在Action中获取Scope中的对象request、session、application
- struts action中获取到的对象,报指针异常
- struts 2.0中获取当前action 的上下文对象
- 在Action获取Scope对象
- 在Action获取Scope对象
- struts标签库中ognl表达式获取Action中对象的原理
- Struts 2 ----Action获取servlet对象及后续重定向操作
- Strust2 --- 根据泛型封装Action的模型驱动ModelDriven<T>获取model对象
- struts2----获取的scope对象的4种方式
- Struts Action里获取 HttpSession
- ActionContext与ServletActionContext的区别及获取request、session等对象
- Struts2 用s:property标签从Action中获取Bean对象某一个属性的值
- Struts入门教程 - 第2章 通过Action调用JavaBean
- ActionContext与ServletActionContext的区别及获取request、session等对象
- StrutsAction中传入的form对象为空的解决方法