struts2访问servletAPI的几种方式

struts2作为一个控制层的框架,难免要与servlet接触,下面是常用的三种访问serveltAPI的方式:

  • 通过ActionContext对象间接访问servletAPI
  • 通过在业务控制类action实现相应的接口
  • 通过ServletActionContext直接在业务控制类action里面访问

1.通过ActionContext对象间接访问servletAPI

package com.lyu.struts.sysmanage.action;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;

public class LoginAction {
	
	private String userName;
	private String password;
	
	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() {
		System.out.println(userName);
		System.out.println(password);
		
		// 将用户名放入session,为将来的访问控制做准备
		ActionContext.getContext().getSession().put("userName1", userName + "actionContext");
		// 放入request域里面
		ActionContext.getContext().put("userName2", userName + "actionContext");
		// 放入application域里面
		ActionContext.getContext().getApplication().put("userName3", userName + "actionContext");
		// 将用户名放入cookie中
		HttpServletResponse response = 
				(HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);
		Cookie cookie = new Cookie("userName4", userName + "actionContext");
		cookie.setMaxAge(24*60*60);
		response.addCookie(cookie);
		
		if (userName.equals("admin")) {
			return "success";
		} else {
			return "fail";
		}
	}
}

注:之所以称之为间接访问,是因为ActionContext并不是直接调用对应的域的setAttribute( key, value )方法放入属性和值,而是通过put方法间接的调用setAttribute方法,其底层实际上还是调用的setAttribute设置属性和值。

2.通过在业务控制类action实现相应的接口

实现ServletRequestAware可以获得request域 实现ServletResponseAware可以获得response域 实现ServletContextAware可以获得Application域
package com.lyu.struts.sysmanage.action;

import javax.servlet.ServletContext;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;

public class LoginSecondAction implements ServletRequestAware, 
	ServletResponseAware, ServletContextAware {
	
	private String userName;
	private String password;
	
	private HttpServletRequest serveltRequest;
	private HttpServletResponse serveltResponse;
	private ServletContext servletContext;
	
	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() {
		System.out.println(userName);
		System.out.println(password);
		
		// 将用户名放入session,为将来的访问控制做准备
		this.serveltRequest.getSession().setAttribute("userName1", userName + "aware");
		// 放入request域里面
		this.serveltRequest.setAttribute("userName2", userName + "aware");
		// 放入application域里面
		this.servletContext.setAttribute("userName3", userName + "aware");
		// 将用户名放入cookie中
		HttpServletResponse response = this.serveltResponse;
		Cookie cookie = new Cookie("userName4", userName + "aware");
		cookie.setMaxAge(24*60*60);
		response.addCookie(cookie);
		
		if (userName.equals("admin")) {
			return "success";
		} else {
			return "fail";
		}
	}
	
	@Override
	public void setServletContext(ServletContext servletContext) {
		this.servletContext = servletContext;
	}
	
	@Override
	public void setServletResponse(HttpServletResponse serveltResponse) {
		this.serveltResponse = serveltResponse;
	}
	
	@Override
	public void setServletRequest(HttpServletRequest serveltRequest) {
		this.serveltRequest = serveltRequest;
	}	
}

3.通过ServletActionContext直接在业务控制类action里面访问

直接调用setAttribute方法设置属性和值。

package com.lyu.struts.sysmanage.action;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

public class LoginThirdAction {
	
	private String userName;
	private String password;

	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() {
		System.out.println(userName);
		System.out.println(password);
		
		// 将用户名放入session,为将来的访问控制做准备
		ServletActionContext.getRequest().getSession().setAttribute("userName1", userName + "ServletActionContext");
		// 放入request域里面
		ServletActionContext.getRequest().setAttribute("userName2", userName + "ServletActionContext");
		// 放入application域里面
		ServletActionContext.getServletContext().setAttribute("userName3", userName + "ServletActionContext");
		// 将用户名放入cookie中
		HttpServletResponse response = ServletActionContext.getResponse();
		Cookie cookie = new Cookie("userName4", userName + "ServletActionContext");
		cookie.setMaxAge(24*60*60);
		response.addCookie(cookie);

		if (userName.equals("admin")) {
			return "success";
		} else {
			return "fail";
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值