struts2访问Web元素的几种方法

一、 方法一: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>

注:因为requestsessionapplication对象Struts2将在放入到Action Context中,

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

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

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

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

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对象取昨HttpSessionServletContext对象。

 

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();

}

}

你可能感兴趣的:(struts,IOC,web元素)