Struts2(二)使用Struts2访问ServletAPI对象
来源:互联网 发布:js读取cookie 编辑:程序博客网 时间:2024/06/05 09:18
在前面的示例中Struts2的Action中并没有使用到ServletAPI对象,但是在实际应用中我们往往会用到ServletAPI对象,比如用户登录成功后将用户信息保存在会话中。所以为了解决这个问题,Struts2提供了多种方式来访问ServletAPI对象,总的来说分为两大类:
使用与ServletAPI解耦的方式
使用与ServletAPI耦合的方式
一、使用与ServletAPI解耦的方式
1.使用ActionContext类获取ServletAPI对应的Map对象
为了避免与Servlet耦合在一起,方便Action类的测试,Struts2提供了普通的Map对象替代了ServletAPI中的对象(HttpServletRequest、HttpSession、ServletContext等)。通过ActionContext类可以在Action类中可以直接访问他们对应的Map对象。com.opensymphony.xwork2.ActionContext类是Action执行的上下文,可以通过下面的方式获取ServletAPI对应的Map对象
①public Map getSession():获取HttpSession对应的Map对象
②public Map getApplication():获取ServletContext对应的Map对象
③public Object get(Object key):ActionContext类没有提供getRequest()这样的方法来获取HttpServletRequest对应的Map对象,只能使用此方法并传递一个参数来表示获取对应的对象
如:
除了使用ActionContext类来获取Map对象还可以使用实现接口的方式,实现接口后Struts2在运行时将会自动注入ServletAPI对应的Map对象
①org.apache.struts2.interceptor.RequestAware
注入request对应的Map对象,该接口只有一个方法:public void setRequest(Map<String,Object> request)
②org.apache.struts2.interceptor.SessionAware
注入session对应的Map对象,该接口只有一个方法:public void setSession(Map<String,Object> session);
③org.apache.struts2.interceptor.ApplicationAware
注入application对应的Map对象,该接口只有一个方法:public void setApplication(Map<String,Object> application);
1.通过ServletActionContext类访问ServletAPI对象
与ServletAPI解耦的方式只能获取到ServletAPI对象对应的Map对象,并不能真正的获取到ServletAPI对象,在开发中避免不了要使用对象中的其他方法,此时便可以使用org.apache.struts2.ServletActionContext类来获取API对象,该类是ActionContext的子类,并提供了以下方法:
①public static HttpServletRequest getRequest():得到HttpServletRequest对象
②public static ServletContext getServletContext():得到ServletContext对象
③public static HttpServletResponse getResponse():得到HttpServletResponse对象
注意:
此类中并没有提供getSession方法,因为session对象可以通过request.getSession()来获取
类似于实现RequestAware、SessionAware等接口的方式,Struts也可以通过实现以下接口来访问ServletAPI对象:
①org.apache.struts2.interceptor.ServletRequestAware
获取HttpServletRequest对象
②org.apache.struts2.interceptor.ServletResponseAware
获取HttpServletResponse对象
③ org.apache.struts2.util.ServletContextAware
获取ServletContext对象
使用与ServletAPI解耦的方式
使用与ServletAPI耦合的方式
一、使用与ServletAPI解耦的方式
1.使用ActionContext类获取ServletAPI对应的Map对象
为了避免与Servlet耦合在一起,方便Action类的测试,Struts2提供了普通的Map对象替代了ServletAPI中的对象(HttpServletRequest、HttpSession、ServletContext等)。通过ActionContext类可以在Action类中可以直接访问他们对应的Map对象。com.opensymphony.xwork2.ActionContext类是Action执行的上下文,可以通过下面的方式获取ServletAPI对应的Map对象
①public Map getSession():获取HttpSession对应的Map对象
②public Map getApplication():获取ServletContext对应的Map对象
③public Object get(Object key):ActionContext类没有提供getRequest()这样的方法来获取HttpServletRequest对应的Map对象,只能使用此方法并传递一个参数来表示获取对应的对象
如:
//ActionContext类不能通过new的方式创建对象,其提供了getContext()方法ActionContext ac=ActionContext.getContext();//获取Session对应的Map对象Map<String,Object> session=ac.getSession();//获取Request对应的Map对象Map<String,Object> request=(Map<String,Object>)ac.get("request");//获取application对应的Map对象Map<String,Object> application=ac.getApplication();//放入数据session.put("key", "value");//.....2.实现接口来获取Map对象
除了使用ActionContext类来获取Map对象还可以使用实现接口的方式,实现接口后Struts2在运行时将会自动注入ServletAPI对应的Map对象
①org.apache.struts2.interceptor.RequestAware
注入request对应的Map对象,该接口只有一个方法:public void setRequest(Map<String,Object> request)
②org.apache.struts2.interceptor.SessionAware
注入session对应的Map对象,该接口只有一个方法:public void setSession(Map<String,Object> session);
③org.apache.struts2.interceptor.ApplicationAware
注入application对应的Map对象,该接口只有一个方法:public void setApplication(Map<String,Object> application);
如:
package com.wzj.action;import java.util.Map;import org.apache.struts2.interceptor.ApplicationAware;import org.apache.struts2.interceptor.RequestAware;import org.apache.struts2.interceptor.SessionAware;import com.opensymphony.xwork2.ActionSupport;public class HelloWorldAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{/** * 定义成员变量 */private Map<String,Object> request;private Map<String,Object> session;private Map<String,Object> application;/** * 当Struts2处理请求时,在默认配置下调用的方法 */@Overridepublic String execute() throws Exception {//执行时Map对象已被框架自动赋值request.put("key", "value");session.put("key", "value");application.put("key", "value");return SUCCESS;}@Overridepublic void setApplication(Map<String, Object> _request) {this.request=_request;}@Overridepublic void setSession(Map<String, Object> _session) {this.session=_session;}@Overridepublic void setRequest(Map<String, Object> _application) {this.application=_application;}}
解释:注入,其实就是通过框架自动对Action中的属性赋值。二、使用与ServletAPI耦合的方式
1.通过ServletActionContext类访问ServletAPI对象
与ServletAPI解耦的方式只能获取到ServletAPI对象对应的Map对象,并不能真正的获取到ServletAPI对象,在开发中避免不了要使用对象中的其他方法,此时便可以使用org.apache.struts2.ServletActionContext类来获取API对象,该类是ActionContext的子类,并提供了以下方法:
①public static HttpServletRequest getRequest():得到HttpServletRequest对象
②public static ServletContext getServletContext():得到ServletContext对象
③public static HttpServletResponse getResponse():得到HttpServletResponse对象
注意:
此类中并没有提供getSession方法,因为session对象可以通过request.getSession()来获取
如:
HttpServletRequest request=ServletActionContext.getRequest();ServletContext application=ServletActionContext.getServletContext();HttpServletResponse response=ServletActionContext.getResponse();//session通过request获取HttpSession session=request.getSession();2.实现接口来访问ServletAPI对象
类似于实现RequestAware、SessionAware等接口的方式,Struts也可以通过实现以下接口来访问ServletAPI对象:
①org.apache.struts2.interceptor.ServletRequestAware
获取HttpServletRequest对象
②org.apache.struts2.interceptor.ServletResponseAware
获取HttpServletResponse对象
③ org.apache.struts2.util.ServletContextAware
获取ServletContext对象
如:
package com.wzj.action;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.interceptor.ServletResponseAware;import org.apache.struts2.util.ServletContextAware;import com.opensymphony.xwork2.ActionSupport;public class HelloWorldAction extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware{private HttpServletRequest request;private HttpServletResponse response;private ServletContext application;/** * 当Struts2处理请求时,在默认配置下调用的方法 */@Overridepublic String execute() throws Exception {//....在这里正常使用request,response,application等对象就可以了return SUCCESS;}@Overridepublic void setServletContext(ServletContext arg0) {this.application=arg0;}@Overridepublic void setServletResponse(HttpServletResponse arg0) {this.response=arg0;}@Overridepublic void setServletRequest(HttpServletRequest arg0) {this.request=arg0;}}
0 0
- Struts2(二)使用Struts2访问ServletAPI对象
- Struts2(二)使用Struts2访问ServletAPI对象
- Struts2框架2.访问ServletAPI对象
- Struts2 访问servletAPI
- Struts2获取/访问ServletAPI
- Struts2中访问ServletAPI
- Struts2之访问ServletAPI
- Struts2访问ServletAPI方法
- struts2的开发(获取ServletAPI对象)
- Struts2中Action访问ServletAPI
- 在struts2中访问servletAPI
- Struts2中Action访问ServletAPI
- Struts2访问ServletAPI(向JSP内置对象request,session,Application传值)
- struts2学习(11)——action访问ServletAPI
- Struts2访问ServletAPI的两种途径
- Struts2的Action访问ServletAPI的方式
- Struts2学习(五)【访问servletAPI方式】
- struts2访问servletAPI的几种方式
- ceph存储 Shell中的&&、 ||、 ()和 {}
- 查找
- 【C++】 预编译头文件
- Ascii 代码表
- day01 Java 概述
- Struts2(二)使用Struts2访问ServletAPI对象
- Kafka#1:QuickStart
- 新版百度地图定位SDK的接入 以及demo示例的运行
- 如何做好一个项目负责人
- 25行Python来反求触地位移模拟滚动
- Linux Shell 学习笔记(六)---注释/字符串/数组
- C++学习笔记(六):关于ifdef 和ifndef的使用
- jQuery 学习start up
- 奇数阶魔方