您的位置:首页 > 移动开发

Struts2学习笔记(四):action中访问request,session以及applicationContext等web资源的方法

2015-08-26 17:34 549 查看
在struts2的action中有时会需要访问request,session以及applicationContext等web资源,这里我总结了四种可行的方法,供读者参考。

(1)使用ActionContext

<pre name="code" class="java"><pre name="code" class="html">package com.jiajia.actions;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;

public class TestActionContext {

	public String execute(){
		//获取actionContext对象
		ActionContext context = ActionContext.getContext();
		
		//ActionContext中获取的application是一个Map,里面可以存储需要的参数。
		Map<String, Object> application = context.getApplication();
		//在application中放置一个参数applicationAttr
		application.put("applicationAttr",
				"通过ActionContext的getApplication()方法获取application");
		
		//ActionContext中获取的session也是一个Map
		Map<String, Object> session = context.getSession();
		//在session中放置一个参数
		session.put("sessionAttr",
				"通过ActionContext的getSession()方法获取session");
		
		//ActionContext中获取的request也是一个Map,但获取方法有别于session和application
		//ActionContext中并没有getRequest()方法(我还不理解为什么会这样)
		Map<String, Object> request = (Map<String, Object>) context.get("request");
		//在request中放置一个参数
		request.put("requestAttr",
				"通过ActionContext的get(\"request\")方法获取request");
		
		return "success";
	}
}




(2)使用ServletActionContext

<pre name="code" class="java">package com.jiajia.actions;

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

import org.apache.struts2.ServletActionContext;

/**
 * @author jiajia
 * 该类主要用来测试通过ServletActionContext类来
 * 直接获取request、session以及application的方法
 */
public class TestServletActionContext {

	public String execute(){

		ServletContext application = ServletActionContext.getServletContext();
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session = request.getSession();

		//在application中放置一个参数applicationAttr
		application.setAttribute("applicationAttr",
				"通过ServletActionContext.getServletContext()获取application");

		//在session中放置一个参数
		session.setAttribute("sessionAttr",
				"通过ServletActionContext.getRequest().getSession()获取session");

		//在request中放置一个参数
		request.setAttribute("requestAttr",
				"通过ServletActionContext.getRequest()获取request");

		return "success";
	}
}



(3)实现RequestAware, SessionAware, ApplicationAware接口

package com.jiajia.actions;

import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

/**
 * @author jiajia
 * 该类主要用来测试通过实现RequestAware, SessionAware, ApplicationAware接口,struts会自动向
 * 对象中注入Map类型的application、session、以及request属性
 */
public class TestAware implements RequestAware, SessionAware, ApplicationAware{

	Map<String, Object> application;
	Map<String, Object> session;
	Map<String, Object> request;

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

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

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

	public String execute(){
		//在application中放置一个参数applicationAttr
		application.put("applicationAttr",
				"通过实现ApplicationAware接口获取application");
		
		//在session中放置一个参数
		session.put("sessionAttr",
				"通过实现SessionAware接口获取session");
		
		//在request中放置一个参数
		request.put("requestAttr",
				"通过实现RequestAware接口获取request");

		return "success";
	}

}
(4)实现ServletRequestAware, ServletContextAware接口

package com.jiajia.actions;

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

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

public class TestServletAware implements ServletRequestAware,
		ServletContextAware {
	
	ServletContext application;
	HttpServletRequest request;
	HttpSession session;

	@Override
	public void setServletContext(ServletContext arg0) {
		this.application = arg0;
	}

	@Override
	public void setServletRequest(HttpServletRequest arg0) {
		this.request = arg0;
	}

	public String execute(){

		session = request.getSession();
		
		//在application中放置一个参数applicationAttr
		application.setAttribute("applicationAttr",
				"通过实现ServletContextAware接口获取application");

		//在session中放置一个参数
		session.setAttribute("sessionAttr",
				"通过实现ServletRequestAware接口获取request再调用getSession()获取session");
		//在request中放置一个参数
		request.setAttribute("requestAttr",
				"通过实现ServletRequestAware接口获取request");

		return "success";
	}
}


上述四种方法中(1)和(3)与原始Servlet API是没有耦合的,但功能也相对较弱,(2)和(4)与原始Servlet API是紧密耦合的,可以提供完整的servlet中的功能

完整示例代码:http://download.csdn.net/detail/jiajia333666/9050793
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: