Struts2总结---Action中获取Servlet相关API(3)
2017-03-03 16:46
369 查看
struts2的Action放弃了request,response等ServletAPI,使得在业务层上更加独立,在有时候使用struts2进行Web开发的时候,不可避免的要在action中使用servletAPI,那么如何在Action中获取并使用servletAPI呢?
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 通过actioncontext类访问并获取servletAPI
* 其对象是一个map类型的
* @author Administrator
*/
public class ContextAction extends ActionSupport{
public String execute() throws Exception {
String name="zhangSan";
//获取seesion
Map session = ActionContext.getContext().getSession();
//把想存的值放到session域中
session.put("sessionName", name);
//获取request
Map request=(Map)ActionContext.getContext().get("request");
//把想存的值存入request域中
request.put("requestName", name);
//获取application
Map application = ActionContext.getContext().getApplication();
//把需要的值存入application域中
application.put("applicationName", name);
return null;
};
}
response对应ServletResponseAware接口
session 对应SessionAware接口
application对应ServletContextAware接口
struts2在实例化一个action对象时,如果发现他实现了相关的Aware接口,就会把相应的资源通过Aware接口方法注入进去,所以叫做注入方式(IOC方式),以request为例,实现了ServletRequestAware接口,就会有一个setServletRequest()方法获取request对象,Aware接口实际上是一种拦截器,他会在执行Action前执行,把相关的servlet对象设置进来,代码如下:
package com.wang.action;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.StrutsStatics;
import org.apache.struts2.dispatcher.ng.servlet.StrutsServlet;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class ContextAction1 extends ActionSupport implements ServletRequestAware {
HttpServletRequest request;
public String execute() throws Exception {
String name="zhangSan";
request.setAttribute("name", name);
return null;
}
@Override
public void setServletRequest(HttpServletRequest request) {
//通过该方法可直接获取到request对象
this.request=request;
};
}
1、通过ActionContext类的静态方法获取(非IOC方式)
package com.wang.action;import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 通过actioncontext类访问并获取servletAPI
* 其对象是一个map类型的
* @author Administrator
*/
public class ContextAction extends ActionSupport{
public String execute() throws Exception {
String name="zhangSan";
//获取seesion
Map session = ActionContext.getContext().getSession();
//把想存的值放到session域中
session.put("sessionName", name);
//获取request
Map request=(Map)ActionContext.getContext().get("request");
//把想存的值存入request域中
request.put("requestName", name);
//获取application
Map application = ActionContext.getContext().getApplication();
//把需要的值存入application域中
application.put("applicationName", name);
return null;
};
}
上面获取到的三大域都是Map类型的,比如对于request来说,我们通常喜欢获取HttpServletRequest类型的,因为这个类型的request功能要强大得多,用ActionContext也是可以获取的,而且也是我们更常用的一种方式,如下:
//获取HttpServletRequest HttpServletRequest request = (HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST); //通过request获取sesssion HttpSession session = request.getSession();
2、通过ServletActionContext的静态方法获取(非IOC方式)
package com.wang.action; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsStatics; import org.apache.struts2.dispatcher.ng.servlet.StrutsServlet; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; /** * 通过ServletActionContext类访问并获取servletAPI * 虽然是使用了静态方法获取request,response,但仍能保证获取到当前用户,当前线程的request,response, * 不会反生混淆,因为struts2利用ThreadLoca来维护当前线程的servlet对象,是线程安全的 * @author Administrato */ public class ContextAction2 extends ActionSupport{ public String execute() throws Exception { String name="zhangSan"; //获取HttpServletRequest HttpServletRequest request = ServletActionContext.getRequest(); //获取session HttpSession session = request.getSession(); return null; };
3、实现相关的Aware接口(IOC方式)
request 对应ServletRequestAware接口response对应ServletResponseAware接口
session 对应SessionAware接口
application对应ServletContextAware接口
struts2在实例化一个action对象时,如果发现他实现了相关的Aware接口,就会把相应的资源通过Aware接口方法注入进去,所以叫做注入方式(IOC方式),以request为例,实现了ServletRequestAware接口,就会有一个setServletRequest()方法获取request对象,Aware接口实际上是一种拦截器,他会在执行Action前执行,把相关的servlet对象设置进来,代码如下:
package com.wang.action;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.StrutsStatics;
import org.apache.struts2.dispatcher.ng.servlet.StrutsServlet;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class ContextAction1 extends ActionSupport implements ServletRequestAware {
HttpServletRequest request;
public String execute() throws Exception {
String name="zhangSan";
request.setAttribute("name", name);
return null;
}
@Override
public void setServletRequest(HttpServletRequest request) {
//通过该方法可直接获取到request对象
this.request=request;
};
}
相关文章推荐
- Struts2-Action中获取ServletAPI
- Struts2的配置和获取相关servlet API的方法
- struts2中在Action中如何获取servlet的api?
- Struts2系列:(5)与Servlet API解耦(Servlet相关对象访问)
- struts2中ServletActionContext与ActionContext区别及获取Servlet对象方法
- Struts2 ServletActionContext和ActionContext联系相关问题探讨
- Struts2的Action与ServletAPI的解耦
- Struts2的Action获取ServletConfig对象的解决方案
- Struts2的Action获取ServletConfig对象的解决方案
- 获取servlet API的方法------ActionContext VS sessionAware
- 码农小汪-struts2学习8-Action中获取ActionContext,ServletActionContext,HttpServletRequest......
- Servlet常用API以及相关总结
- struts2学习笔记(2)---Action中訪问ServletAPI获取Map类型的Servlet元素
- Struts2 Action与ServletAPI的解耦、耦合
- struts2 中属性驱动(其实就是struts2 action 中处理 request 的参数【old 方式servlet api 封装数据到javabean中(or beanutils)】),这里属性驱动是新方式
- struts中的action和Action类以及struts2中如何在Action类中获得servlet api的域对象
- OpenGL ES Shader相关API 总结【0】——获取绘制信息
- Struts2 ServletActionContext和ActionContext联系相关问题探讨
- Struts2 Action与ServletAPI的解耦、耦合
- Struts2中获取servletAPI