struts2的Action访问Servlet的几种方式和全局result
来源:互联网 发布:无锡网络外包 编辑:程序博客网 时间:2024/06/02 02:06
- 一.取得Map类型的request,session,application
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>
<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>
- struts2的Action访问Servlet的几种方式和全局result
- struts2中,action访问servlet api的两种方式
- struts2中Action访问servlet的两种方式
- Struts2的Action中方法的几种访问方式
- Struts2中访问Servlet API的几种方式
- Struts2的Action访问Servlet API的方式
- Struts2的Action访问Servlet API的方式
- 【Struts2进阶】Struts2的Action访问Servlet API 的 三种方式
- Struts2配置action的几种方式
- struts2 全局result和动态result的用法
- Struts2访问Servlet的三种方式
- Struts2的Action访问Servlet API
- Struts2的Action访问Servlet对象
- Struts2的Action访问Servlet对象
- struts2访问servletAPI的几种方式
- Struts2中Action访问Servlet API的两种方法
- Struts2中Action访问Servlet API的两种方法
- Struts2中Action访问Servlet API的三种方法
- linux 命令 scp
- 各个Android 市场的开发者的网址
- 什么是JDBC
- list_head数据结构分析
- mysql sql执行顺序
- struts2的Action访问Servlet的几种方式和全局result
- Java并发编程-ThreadFactory接口
- picasso 图片缓存库介绍
- 使用shiro进行登录校验;自定义realm的实现
- 【设计模式】Singleton Pattern 单例模式
- leetcode 223 Rectangle Area C++
- bzoj3555 企鹅QQ
- SAPUI5:图标icon
- 杭电 1022【火车的出栈入栈】