什么是web资源:web资源就是指request,response,session,servlet的api
为什么需要访问web资源:因为图片上传,需要获取图片的目录,就需要通过action来访问web资源,向作用域读写数据。。。。。。等等
怎么访问web资源:
和servlet解耦的方式访问:有限的访问servlet的 api对象,有限的方法
使用ActionContext去访问
实现XXXAware这个接口
和servlet耦合的方式访问:可以访问更多(全部)的servlet的API
使用ServletActionContext去访问
实现ServletXXXAware这个接口
1.解耦合和方式使用ActionContext获取web资源
/** * 获取Application作用域 * @return */ public String execute(){ //获取Action的上下文,就是action的一些运行信息,环境等等 ActionContext actionContext=ActionContext.getContext(); //得到封装过的application Map<String, Object> application=actionContext.getApplication(); //把数据放到application的作用域 application.put("name", "小白"); return "success"; } /** * 获取session作用域 * @return */ public String execute2(){ //获取Action的上下文,就是action的一些运行信息,环境等等 ActionContext actionContext=ActionContext.getContext(); //得到封装过的session Map<String, Object> session=actionContext.getSession(); //把数据放到session的作用域 session.put("name2", "小白2"); return "success"; } /** * 获取Request作用域 * @return */ public String execute3(){ //获取Action的上下文,就是action的一些运行信息,环境等等 ActionContext actionContext=ActionContext.getContext(); //得到封装过的request Map<String, Object> request=(Map<String, Object>) actionContext.get("request"); //把数据放到request的作用域 request.put("name3", "小白3"); return "success"; } /** * 获取请求参数(不推荐使用,Struts会封装) * @return */ public String params(){ //获取Action的上下文,就是action的一些运行信息,环境等等 ActionContext actionContext=ActionContext.getContext(); //获取请求参数,得到参数的对象 Map<String, Object> params= actionContext.getParameters(); String name=((String[])params.get("name"))[0]; String sex=((String[])params.get("sex"))[0]; System.out.println(name+":"+sex); return "success"; }
2.解耦合和方式使用XXXAware获取web资源
/** * 只要实现对应的ApplicationAware接口,或者SessionAware等就可以 * @author Administrator * */ public class ApplicationDemo implements ApplicationAware{ Map<String, Object> application; public String execute(){ application.put("xx","xx"); return "success"; } public void setApplication(Map<String, Object> application) { this.application=application; } }
3.耦合和方式使用ActionContext获取web资源(其他的使用方式类似)
public String execute(){ //通过ServletActionContext可以获取需要的Servlet api相关的对象 HttpServletRequest request=ServletActionContext.getRequest(); String name =request.getParameter("name"); request.setAttribute("name", "小白"); HttpSession session= ServletActionContext.getRequest().getSession(); session.setAttribute("name2", "小白2"); return "success"; }