Struts2访问ServletAPI的三种方式,以及使用推荐对比

5 篇文章 0 订阅
1 篇文章 0 订阅
Action对ServletAPI的访问有两种方式,分别是间接访问和直接访问。
对于间接访问,一般推荐使用,但是只能获得request对象,而得不到response对象;
直接访问分为Ioc访问方式和非Ioc访问方式,不推荐使用Ioc访问方式,因为该方式的实现比较麻烦,

而且与ServletAPI耦合大;推荐使用非Ioc方式,因为实现方式简单,代码量少而又能满足要求。


间接访问ServletAPI(推荐,但只能获得request对象)
需要extends ActionSupport
提供了名称为ActionContext的类,在Action中可以通过该类获得ServletAPI
提示:ActionContext是Action的上下文对象,Action运行期间所用到的数据都保存在ActionContext中,例如session会话和客户端提交的参数等信息。
创建ActionContext类对象的语法格式如下:

ActionContext ac = ActionContext.getContext();

方法:
Object get(String key);通过参数key来查找当前ActionContext中的值
Map<String, Object> getApplication();返回一个application级的Map对象
static ActionContext getContext();获取当前线程的ActionContext对象
Map<String, Object> getParameters();返回一个包含所有HttpServletRequest参数信息的Map对象
Map<String, Object> getSession();返回一个Map类型的HttpSession对象
void put(String key, Object value);向当前ActionContext对象中存入键值对信息
void setApplication(Map<String, Object> application);设置一个Map类型的application值
void setSession(Map<String, Object> session);设置一个Map类型的session值
实例:
继承ActionSupport后重写execute()方法:
public class UserAddAction extends ActionSupport {
	
	private String userName;
	private String password;
	@Override
	public String execte() throws Exception {
		ActionContext ac = ActionContext.getContext();
		ac.getApplication.put("uname", userName);
		ac.getApplication.put("upwd", password);
		return SUCCESS;
	}
}
[jsp中]
<s:property value="#application.uname">
<s:property value="#application.upwd">

直接访问ServletAPI:

IoC方式:(不推荐)
ServletContextAware:实现该接口的Action可以直接访问Web应用的ServletContext实例;
ServletRequestAware:实现该接口的Action可以直接访问用户请求对象的HttpServletRequest的实例;
ServletResponseAware:实现该接口的Action可以直接访问服务器响应的HttpServletResponse的实例;
实例:
public class IoCAddAction extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware {  
  
	private HttpServletRequest request;   
	private HttpServletResponse response;   
  
	public void setServletRequest(HttpServletRequest request) {  
		this.request = request;   
	}  
  
	public void setServletResponse(HttpServletResponse response) {  
		this.response = response;   
	}  
  
	public String execute() {   
		HttpSession session = request.getSession();
		ServletContext application = session.getServletContext();
		return SUCCESS;   
	}  
	
	@Override
	public String execte() throws Exception {
		ServletContext application = ServletActionContext.getServletContext();
		application.setAttribute("uname", userName);
		application.setAttribute("upwd", password);
		return SUCCESS;
	}		
}  

非Ioc方式:(强烈推荐)
提供了一个名称为ServletActionContext的辅助类来获取ServletAPI.
在ServletActionContext类中有以下静态方法:
getPageContext(),getRequest(),getResponse()和getServletContext().
public class NoIoCAddAction extends ActionSupport {
	
	private String userName;
	private String password;
	
	@Override
	public String execte() throws Exception {
		ServletContext application = ServletActionContext.getServletContext();
		application.setAttribute("uname", userName);
		application.setAttribute("upwd", password);
		return SUCCESS;
	}
}



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值