Struts2中获得Servlet API对象

Struts2中传统Servlet API类型被处理成Map类型
  
访问更方便
   不依赖传统Servlet API类型——解耦合

关于ActionContext
       所在包com.opensymphony.xwork2
       ActionContext被称为Action上下文或Action环境
       ActionContext提供每个Action运行时与之相关的所有信息
访问Servlet API

       ActionContext类提供getContext()方法获得实例
       通过ActionContext类的实例可获得Map类型的请求、会话 等
       通过put()get()方法在Map类型的对象中存取数据

示例:

package cn.web.action;
import java.util.Map;
import cn.web.entity.User;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LoginJavabeanAction extends ActionSupport {
	
	private  User user;
	
	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	@Override
	public String execute() throws Exception {
		if(user==null){
			return "login";
		}
		System.out.println(user.getLoginName());
		if("admin".equals(user.getLoginName())){
			//关于ActionContext
			//获取session
			Map<String,Object> session = ActionContext.getContext().getSession();
			session.put("userSession", user);
			
			//获取application,示例设置一个计数
			Map<String,Object> application = ActionContext.getContext().getApplication();
			if(application.get("num") == null){
				application.put("num", 1);
			}else{
				Integer num = (Integer) application.get("num");
				application.put("num", num+1);
			}
			
			//获取request,注意获取方式
			Map<String,Object> request = (Map<String, Object>) ActionContext.getContext().get("request");
			request.put("address", "中国");
			
			//获取parameter,请求的参数只能获得,不能增加
			Map<String,Object> parameters = ActionContext.getContext().getParameters();
			//注意parameters.get()与 request.getParameterValues()类似
			//获得如checkbox类(名字相同,但值有多个)的数据。
			//接收  对象 的数组
			String[] name = (String[]) parameters.get("user.loginName");
			System.out.println("user.loginName为:"+name[0]);
			//禁止这样操作,增加参数 parameters.put("access", "通过");
			
			/* 在页面中获取保存数据提倡的方式 (#作用域)
			    <s:property value="#request.loginAccess"/>
			*/
			
			return "admin";
			
		}else if("comm".equals(user.getLoginName())){
			return "comm";
		}else{
			return "login";
		}
	}
}

 

------------------------------------------------------------------------------------

 

获得Servlet API对象的方式

一、通过ActionContext获得

             如上面的示例就是这样

       自己获得request: ac.get("request")

       自己获得session: ac.getContext.getSession()

二、实现接口

          让“别人(如struts容器)”为你提供Servlet API的对象

          通过实现相应接口获得Servlet API对象

            获得parameter需要实现ParameterAware接口

            获得request需要实现RequestAware接口

            获得session需要实现SessionAware接口

            获得application需要实现ApplicationAware接口

(   LoginAtion 是交给Struts容器管理的,

  当LoginAtion实现了上面的接口,Struts容器会往这些接口预定义的方法里注入它需要的相应的值,

 是由servletConfig拦截器,将源于Servlet API的各种对象注入到Action 的。

  从而也就能使用 servletApi 的对象了


 

public class LoginAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware {
	
	Map<String,Object> request;
	Map<String,Object> session;
	Map<String,Object> application;
	//这样就获得了request,session以及application(servletApi的对象),
        //然后就可以在execute()方法里使用servletApi的对象了
	
       /*  
               省略部分代码
            
          */

        @Override
	public void setApplication(Map<String, Object> request) {
		this.request = request;
	}
	@Override
	public void setSession(Map<String, Object> session) {
		this.session = session;
	}
	@Override
	public void setRequest(Map<String, Object> application) {
		this.application = application;
	}

       /*  
               省略部分代码
            
          */
}
 

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值