Action访问Servlet API的对象

1,Action访问ActionContext的方式:(request session application)

  Struts2中的Action与Servlet API完全分离,但是在实现业务逻辑处理是,经常需要访问Servlet中的一些对象,如request,session,application等,struts2提供ActionContext类,在Action中通过该类获取Servlet中的参数

创建ActionContext实例的方法如下:

ActionContext ac=ActionContext.getContext();

常用的方法如下:

1,Object get(Object key);//在ActionContext中查找key值
2,Map getAppliCation();//返回一个application 对象,相当于jsp的application对象
3,static ActionContext getContext()//获取当前线程的ActionContext对象
4,Map getParameter()//返回一个Map类型所有HttpServletRequest  相当于jsp中的request对象
5,Map getsession()//返回Map类型的HttpSession值,相当于jsp中的session对象
6,void put(Object key,Object value)//向当前的ActionContext存入值
7,void setApplication( Map application)//设置application对象的上下文
8,void setSession(Map session)//设置session的值
package login;

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

public class LoginAction extends ActionSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String userName;
	private String password;//属性要与jsp显示组件的那么值相同
   public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}

	public String execute(){
		if(getUserName().equals("QQ")&&getPassword().equals("123")){
			//获取ActionContext
			ActionContext ac=ActionContext.getContext();
			//把登录名放进application中
			ac.getApplication().put("useName",getUserName());
			//吧登录名放进session中
			ac.getSession().put("userName", getUserName());
			return SUCCESS;
		}
		else{
			return INPUT;
		}
	}
     
}


2,Action直接访问Servlet.(request response session)

  在struts2中通过IoC的方式把servlet对象注入到Action中,需要在Action中实现以下接口:

(1),ServletRequestAware:实现该接口的Action可以直接访问request对象,该接口中提供void setServletRequest(HttpServletRequest request);

(2),ServletResponseAware:实现该接口的Action可以直接访问response对象,该接口中提供void setServletResponse(HttpServletResponse response);

(3),SessionAware:实现该接口的Action可以直接访问session对象,该接口中提供void setSession(Map session);

package login;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.interceptor.ServletRequestAware;

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

public class LoginAction extends ActionSupport implements ServletRequestAware{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String userName;
	private String password;//属性要与jsp显示组件的那么值相同
	private HttpServletRequest request; //可以直接使用request
   public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}

	@Override
	public void setServletRequest(HttpServletRequest arg0) {
		// TODO Auto-generated method stub
		request=arg0;//实现该方法赋值
	}
     
	public String execute(){
		if(getUserName().equals("QQ")&&getPassword().equals("123")){
			 //通过request对象获取session对象
			HttpSession session=request.getSession();
			//把用户名放入session中
			session.setAttribute("userName", getUserName());
			return SUCCESS;
		}
		else{
			return INPUT;
		}
	}
	
}

3,非IOC的方式,辅助类ServletActionContext帮助获得servlet.

常用方法:

<span style="font-size:24px;">static getRequest();//获取request对象
static getResponse();//获取response对象</span>

<span style="font-size:24px;">import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String userName;
	private String password;//属性要与jsp显示组件的那么值相同
   public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}

   
	public String execute(){
		if(getUserName().equals("QQ")&&getPassword().equals("123")){
			//调用ServletActionContext的getRequest方法获得request对象
			HttpServletRequest request=ServletActionContext.getRequest();
			 //通过request对象获取session对象
			HttpSession session=request.getSession();
			//把用户名放入session中
			session.setAttribute("userName", getUserName());
			return SUCCESS;
		}
		else{
			return INPUT;
		}
	}
	
}</span>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值