Struts2中的Action访问Servlet API

Struts2的Action并未直接与任何Servlet API耦合,要想访问Servlet API,可以通过ActionContext这个类来实现:

在action中定义如下方法:

	public String actionContext() {
		ActionContext ctx =  ActionContext.getContext();
		ctx.getApplication().put("application", "application范围");
		ctx.getSession().put("session", "session范围");
		ctx.put("request", "request范围");	
		
		return "success";
	} 

获得各个范围的属性值可以通过以下代码实现:

  ${applicationScope.application }<br/>
  ${sessionScope.session }<br/>
  ${requestScope.request }

 

虽然上述方法可以访问Servlet API,但是并不能直接获得Servlet API实例,要想在Action中直接访问Servlet API,可以通过以下两种方法:

1.通过ServletActionContext类直接获取,如:

	public String servletActionContext() {	
		HttpServletRequest request = ServletActionContext.getRequest();
		request.getSession().setAttribute("session", "会话范围");
		request.setAttribute("request", "请求范围");
		
		ServletContext servletContext = ServletActionContext.getServletContext();
		servletContext.setAttribute("application", "应用范围");
		
		return "success";		
	}

 获取属性值的代码与上面相同

 

2.通过实现指定接口ServletContextAware,ServletRequestAware,ServletResponseAware,Struts框架运行时注入,下面以ServletRequestAware为例,介绍如何在Action中访问HttpServletRequest对象:

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

public class AttributeAction implements ServletRequestAware{
	private HttpServletRequest request;
	
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}
	
	public String execute() {
		request.setAttribute("sra", "ServletRequestAware");
		return "success";
	}
}

 在页面获取属性值:

  ${requestScope.sra } 

你可能感兴趣的:(apache,servlet)