现在的位置: 首页 > 综合 > 正文

Struts2中访问web元素

2013年06月19日 ⁄ 综合 ⁄ 共 3433字 ⁄ 字号 评论关闭

取得Map类型request,session,application,真实类型 HttpServletRequest, HttpSession, ServletContext的引用:

前三者:依赖于容器

前三者:IOC (只用这种)

后三者:依赖于容器

后三者:IOC

一、          方法一:ActionContext方式

一般在Action类的构造方法、或execute()方法中获取。

public class LoginAction1 extends ActionSupport {
	
	private Map request;
	private Map session;
	private Map application;
	
	public LoginAction1() {
		request = (Map)ActionContext.getContext().get("request");
		session = ActionContext.getContext().getSession();
		application = ActionContext.getContext().getApplication();
	}
	
	public String execute() {
		request.put("r1", "r1");
		session.put("s1", "s1");
		application.put("a1", "a1");
		return SUCCESS; 
	}
}

然后在Jsp页面中获取相关web元素。

<body>
	User Login Success!
	<br />
	<s:property value="#request.r1"/> | <%=request.getAttribute("r1") %> <br />
	<s:property value="#session.s1"/> | <%=session.getAttribute("s1") %> <br />
	<s:property value="#application.a1"/> | <%=application.getAttribute("a1") %> <br />
	<s:property value="#attr.a1"/><br />
	<s:property value="#attr.s1"/><br />
	<s:property value="#attr.r1"/><br />
	<s:debug></s:debug>
	<br />
</body>

注:因为request、session、application对象Struts2将在放入到Action Context中,

   因此需要使用#key来访问对象们。

后面的是java脚本代码的访问方式。

一、          方式二:Ioc(控制反转)—推荐使用

让Action类实现RequestAware、SessionAware、ApplicationAware接口,然后重写他们的set方法(setRequest、setSession、setApplication),通过依赖注入、控制反转(原来自己控制,现在由别人来控制值。)

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware {
	private Map<String, Object> request;
	private Map<String, Object> session;
	private Map<String, Object> application;
	
	//DI dependency injection依赖注入
	//IoC inverse of control控制反转
	public String execute() {
		request.put("r1", "r1");
		session.put("s1", "s1");
		application.put("a1", "a1");
		return SUCCESS; 
	}
	@Override
	public void setRequest(Map<String, Object> request) {
		this.request = request;
	}
	@Override
	public void setSession(Map<String, Object> session) {
		this.session = session;
	}
	@Override
	public void setApplication(Map<String, Object> application) {
		this.application = application;
	}
}

在视图(JSP)页面中获取相关对象,同方式一。

一、          方式三:获取原类型

获取是的HttpServletRequest/HttpSession/ServletContext

public class LoginAction3 extends ActionSupport {
	
	private HttpServletRequest request;
	private HttpSession session;
	private ServletContext application;
	public LoginAction3() {
		request = ServletActionContext.getRequest();
		session = request.getSession();
		application = session.getServletContext();
	}
	public String execute() {
		request.setAttribute("r1", "r1");
		session.setAttribute("s1", "s1");
		application.setAttribute("a1", "a1");
		return SUCCESS; 
	}
}

一、          方式四:获取原类型-控制反转

首先需要Action实现org.apache.struts2.interceptor.ServletRequestAware接口,然后重写setServletRequest()方法,获取HttpServletRequest对象,再通过HttpServletRequest对象取昨HttpSession和ServletContext对象。

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

import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction4 extends ActionSupport implements ServletRequestAware {
	private HttpServletRequest request;
	private HttpSession session;
	private ServletContext application;
	public String execute() {
		request.setAttribute("r1", "r1");
		session.setAttribute("s1", "s1");
		application.setAttribute("a1", "a1");
		return SUCCESS; 
	}
	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
		this.session = request.getSession();
		this.application = session.getServletContext();
	}
}

抱歉!评论已关闭.