struts2的Action访问Servlet的几种方式和全局result

来源:互联网 发布:无锡网络外包 编辑:程序博客网 时间:2024/06/02 02:06
  1. 一.取得Map类型的request,session,application
1.属性

request:private Map<String,Object> request = (Map<String, Object>) ActionContext.getContext().get("request");

session:private Map<String,Object> session = ActionContext.getContext().getSession();

application:private Map<String,Object> application = ActionContext.getContext().getApplication()

例如:

struts.xml

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><constant name="struts.enable.DynamicMethodInvocation" value="false" />    <constant name="struts.devMode" value="true" />     <package name="default" namespace="/" extends="struts-default">  <action name="test1" class="com.zucc.action.TestAction1" >  <result>index.jsp</result>  </action>      </package></struts></span></span></span>

index.jsp

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><%@ page language="java" contentType="text/html; charset=ISO-8859-1"    pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body>reqAttr:${reqAttr}<br>sessionAttr:${sessionAttr}<br>applicationAttr:${applicationAttr}<br></body></html></span></span></span>
TestAction1.java

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">import java.util.Map;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;public class TestAction1 extends ActionSupport{private Map<String,Object> request;private Map<String,Object> session;private Map<String,Object> application;public TestAction1(){this.request = (Map<String, Object>) ActionContext.getContext().get("request");this.session = ActionContext.getContext().getSession();this.application = ActionContext.getContext().getApplication();}@Overridepublic String execute() throws Exception {System.out.println("TestAction1 execute......");this.request.put("reqAttr", "reqDirect");this.session.put("sessionAttr", "sessionDirect");this.application.put("applicationAttr", "applicationDirect");return SUCCESS;}}</span></span></span>
index页面通过EL(${reqAttr})获得从TestAction1(this.request.put("reqAttr","reqDirect"))中传过来的reqDirect并显示

通过EL(${sessionAttr})获得从TestAction1(this.request.put("sessionAttr","sessionDirect"))中传过来的sessionDirect并显示

通过EL(${applicationAttr})获得从TestAction1(this.request.put("applicationAttr","applicationDirect"))中传过来的applicationDirect并显示


2.IOC(控制反转)
通过继承接口RequestAware,SessionAware,ApplicationAware

例如

struts.xml和index.jsp同上面一样

TestAction1.java

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">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 TestAction2 extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{private Map<String,Object> request;private Map<String,Object> session;private Map<String,Object> application;@Overridepublic void setApplication(Map<String, Object> request) {this.request = request;}@Overridepublic void setSession(Map<String, Object> session) {this.session = session;}@Overridepublic void setRequest(Map<String, Object> application) {this.application = application;}@Overridepublic String execute() throws Exception {System.out.println("TestAction1 execute......");this.request.put("reqAttr", "reqDirect");this.session.put("sessionAttr", "sessionDirect");this.application.put("applicationAttr", "applicationDirect");return SUCCESS;}}</span></span></span>

二.取得真实类型的HttpServletRequest,HttpSession,ServletContext

1.属性

request:private HttpServletRequest request = (ServletActionContext.getRequest();

session:private HttpSession session = this.request.getSession();

application:private ServletContext application = ServletActionContext.getServletContext();

例如:

struts.xml和index.jsp同上面一样

TestAction1.java

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class TestAction1 extends ActionSupport {private HttpServletRequest request;private HttpSession session;private ServletContext application;public TestAction3(){this.request = ServletActionContext.getRequest();this.session = this.request.getSession();this.application = ServletActionContext.getServletContext();}@Overridepublic String execute() throws Exception {System.out.println("TestAction1 execute......");this.request.setAttribute("reqAttr", "reqDeirect");this.session.setAttribute("sessionAttr", "sessionDeirect");this.application.setAttribute("applicationAttr", "applicationDeirect");return SUCCESS;}}</span></span></span>

2.IOC(控制反转)
通过继承接口ServletRequestAware,ServletContextAware

例如

struts.xml和index.jsp同上面一样

TestAction1.java

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.util.ServletContextAware;import com.opensymphony.xwork2.ActionSupport;public class TestAction1 extends ActionSupport implements ServletRequestAware,ServletContextAware{private HttpServletRequest request;private HttpSession session;private ServletContext application;@Overridepublic void setServletContext(ServletContext application) {this.application = application;}@Overridepublic void setServletRequest(HttpServletRequest request) {this.request = request;}@Overridepublic String execute() throws Exception {this.session = request.getSession();System.out.println("TestAction1 execute......");this.request.setAttribute("reqAttr", "reqDeirect");this.session.setAttribute("sessionAttr", "sessionDeirect");this.application.setAttribute("applicationAttr", "applicationDeirect");return SUCCESS;}}</span></span></span>

三.使用OGNL实现动态result

建立Action

<span style="font-size:18px;">import com.opensymphony.xwork2.ActionSupport;public class TestAction1 extends ActionSupport {private String resultName;@Overridepublic String execute() throws Exception {System.out.println("TestAction1 execute....");this.resultName = "index.jsp";return SUCCESS;}public String getResultName() {System.out.println("TestAction1 getResultName....");return resultName;}}</span>


配置struts.xml
<span style="font-size:18px;"><struts><constant name="struts.enable.DynamicMethodInvocation" value="false" />   <constant name="struts.devMode" value="true" />     <package name="default" namespace="/" extends="struts-default">  <action name="test1" class="com.zucc.action.TestAction1">  <result>/${resultName}</result>  </action>     </package></struts></span>
分析:当访问test1时,TestAction1中把resultName的值设为index.jsp,在配置文件中我们通过${resultName}(用在struts配置文件中的ognl,其实nextAction的值是存在值栈中,我们通过${}这样的形式取出)来获取值便为index.jsp,就去访问index.jsp页面


四.全局result

<span style="font-size:18px;"><package name="default1" namespace="/" extends="struts-default">  <global-results > <result name="index">/index.jsp></result> </global-results>   <action name="test1" class="com.zucc.action.TestAction1">  <result name="index" >/test1.jsp</result>  </action>      </package></span></span>
注意:当action中的result的name属性值和全局result的属性值一样,当调用action时,会返回action中的result的页面

如果其他包中也需要用到这个全局result,需要用到package的extends,extends的值为全局result所在的包名
<span style="font-size:18px;"><package name="default2" namespace="/" extends="default1"     <action name="test2" class="com.zucc.action.TestAction2">      <result>/test2.jsp</result>     </action>    </package></span></span>





0 0
原创粉丝点击