Struts2之在Action中访问 WEB资源

在Action中访问 WEB资源
一、什么是WEB资源?
HttpServletRequest,HttpSession,ServletContext等原生的Servlet API
二、为什么访问WEB资源?
B\S的应用的Controller中必须需要访问WEB资源
向域对象中读写属性,读写Cookie,获取realPath
三、如何访问?
1、:和Servlet API解耦的方式:只能访问有限的Servlet API对象,且只能访问有限的方法。(读取请求参数,读写域对象的属性,使session失效)
[color=red]具体请参照博文:Struts2之Session[/color]
(1)使用ActionContext
通过import com.opensymphony.xwork2.ActionContext;
(2)实现XxxAware接口
通过Action实现如下接口
import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.SessionAware;

(3)选用的建议:若一个Action类中有多个action方法,且多个方法都需要使用域对象的Map或parameters,则建议使用Aware接口的方式
(4)session对应的Map实际上是SessioMap类型的,强转后若调用invalidate()方法,可以使其session失效。
2、和Servlet API耦合的方式 :可以访问更多的Servlet API对象,且可以调用原生态的方法。
(1)使用ServletActionContext
 public String execute(){
//ServletActionContext:可以从中获取到当前Action对象需要的一切Servlet API 相关的对象
//1、获取HttpServletRequest:ServletActionContext.getRequest();
//2、获取HttpSession:ServletActionContext.getRequest().getSession();
//3、获取ServletContext
HttpServletRequest request=ServletActionContext.getRequest();
HttpSession session=ServletActionContext.getRequest().getSession();
ServletContext servletContext=ServletActionContext.getServletContext();

System.out.println("execute...");
return "success";
}

(2)实现ServletXxxAware接口
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;

//通过实现ServletXxxAware接口的方式可以由Struts2注入需要的Servlet相关的对象
//ServletRequestAware:注入HttpServletRequest对象(比较常用)
//ServletContextAware:注入ServletContext对象(比较常用)
//ServletResponseAware:注入HttpServletResponse对象

public class TestServletAware implements ServletRequestAware,ServletContextAware,ServletResponseAware{

public void setServletRequest(HttpServletRequest request) {
System.out.println(request);
}
private ServletContext context;
public void setServletContext(ServletContext context) {
System.out.println(context);
this.context=context;
}

public void setServletResponse(HttpServletResponse response) {
System.out.println(response);
}
public String execute(){
System.out.println("ServletContext:" + context);
return "success";
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值