• struts2进阶篇(4)


    一、使用ActionContext访问Servlet API

    strtus2提供了一个ActionContext类,该类别称为Action上下文或者Action环境,Action可以通过该类来访问最常用的Servlet API,该类提供了常用的方法在这做简单介绍:

    >getContext();静态方法,获取当前对象的ActionContext实例。

    >getSession();返回一个Map对象,该对象模拟了session作用域。

    >getApplication();返回一个Map(),该对象模拟了application作用域。

    >get(String key);对该方法传入"request"参数,即可返回一个Object对象,该对象模拟了request作用域。

    >getParameters();返回一个map()对象,该对象中保存了浏览器上传的参数。

    struts2不再依赖HttpServletRequest这样的传统Servlet API类型来获取request,session,application对象,这种方式称“解耦合”;

    // action方法中解耦合方式获取request对象
    Map<String ,Object> request = (Map<String,Object> ActionContext.getContext().get("request"));
    // action方法中或取session作用域对象
    Map<String,Object> session = ActionContext.getContext().getSession();
    // action方法中获取application对象作用域
    Map<String,Object> application = ActionContext().getContext().getApplication();
     
    

    二、使用Ioc的方式访问Servlet API

    action类中只保留使用这些对象的代码,而获取对象的代码有struts2来实习,struts2获取这些对象后,再把这些对象注入Action类中,Action类即可使用这些对象,这种实现的思想就是著名的Ioc.

    package action;
    
    import java.util.Map;
    
    import org.apache.struts2.interceptor.ApplicationAware;
    import org.apache.struts2.interceptor.RequestAware;
    import org.apache.struts2.interceptor.SessionAware;
    
    public class UserActions implements RequestAware, SessionAware,
    		ApplicationAware {
    	private Map<String ,Object> request;
    	private Map<String,Object> session;
    	private Map<String,Object> application;
    
    	@Override
    	public void setApplication(Map<String, Object> arg0) {
    		this.request = request;
    	}
    
    	@Override
    	public void setSession(Map<String, Object> arg0) {
    		this.session = session;
    	}
    
    	@Override
    	public void setRequest(Map<String, Object> arg0) {
    		this.application = application;
    	}
    
    }
    

    说明:

    上面的这段代码中,Action实现了RequestAware,SessionAware,ApplicationAware接口,这样Struts2就可以为该Action注入request,session,application对象了,以session为例子,struts2取得session对象,当UserAction对象被创建后,Struts2会判断UserAction是否实现了SessionAware接口,若实现了,就会调用UserAction的setSession()方法,并把session作为参数传入该方法,这样就实现了session的注入。

    三、使用耦合方式访问Servlet API

    ActionContext类没有包装所有的Servlet API,有些功能的实现还是需要原始是Servlet API才能实现,如获取客户端的响应,HttpServletResponse对象,不过strut2提供了ServletActionContext来获取原始是Servlet API.

    public String login() {
    
    		Map<String, Object> map = new HashMap<String, Object>();
    		boolean isLogin = (Boolean) map.get("isLogin");
    		if (isLogin) {
    			/**
    			 * 耦合方式
    			 */
    			ServletContext sc=ServletActionContext.getServletContext();//得到Servlet上下文
    			HttpServletRequest request = ServletActionContext.getRequest();
    			HttpServletResponse response = ServletActionContext.getResponse();
    			HttpSession session = request.getSession();
    			session.setAttribute("user", map.get("user"));
    			return SUCCESS;
    		} else {
    			return INPUT;
    		}
    	}
    

      

  • 相关阅读:
    Android 中设置全屏和无标题模式
    轻松管理安卓应用中的log打印信息
    使用Cocos2d游戏引擎开发火热的植物大战僵尸游戏
    Android中获取系统通讯录联系人并显示在EditText
    使用json解析国家气象局(天气预报)接口数据
    Android中简单的日期格式化
    Android的消息推送技术Androidpn
    格式化日期和时间详细介绍
    智能短信管家 V1.0版本正式上线啦!
    学用MVC4做网站一:用户登陆1.2
  • 原文地址:https://www.cnblogs.com/ablejava/p/5668223.html
Copyright © 2020-2023  润新知