在struts2中有很多种跳转方式如下是在struts-default.xml截取的一段源码,常用的跳转有 转发:dispatcher、重定向:redirect、转发到Action:chain、重定向到Action:redirectAction

  1. <package name="struts-default" abstract="true">
  2. <result-types>
  3. <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
  4. <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
  5. <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
  6. <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
  7. <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
  8. <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
  9. <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
  10. <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
  11. <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
  12. <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
  13. <result-type name="postback" class="org.apache.struts2.dispatcher.PostbackResult" />
  14. </result-types>
  15. </package>
ActionContest: 数据中心
有原来一切 servlet 年代的东西
原生 request HttpServletRequest
源生 response HttpServletResponse
原生 ServletContext ServletContext
request域 Map 命短
session域 Map
appliction域 Map 命长
param参数 Map
attr域 Map 如果重复以最小的键值对为准 3个域合一
 
ValueStack 值栈
 
ActionContext :数据中心其实也是一个 Map
ActionContext域是什么?
答:比如问一个木桶有多少水 要看最短的木板,所以
域最小的是request 就是一次请求
 
ActionContext生命周期:每次请求都会创建一个请求对应
的ActionContext对象。请求处理完ActionContext销毁,他
不会影响别的域的声明周期
 
 
如何获得ActionContext。struts2设计的是,将ActionContext对象
创建好之后,将ActionContext与当前线程绑定。我们要获得ActionContext
只需要从ThreadLocal中获得即可。
 
第一种方式
通过ActionContext
  1. public class DemoAction extends ActionSupport {
  2.  
  3. @Override
  4. public String execute() throws Exception {
  5. // request域->map(struts2并不推荐使用request原生)
  6. // 不推荐
  7. Map<String, Object> requestScope = (Map<String, Object>) ActionContext.getContext().get("request");
  8. // 推荐
  9. ActionContext.getContext().put("name", "requestTom");
  10. // session域->map
  11. Map<String, Object> sessionScope = ActionContext.getContext().getSession();
  12. sessionScope.put("name", "sessionTom");
  13. // application域->map
  14. Map<String, Object> applicationScope = ActionContext.getContext().getApplication();
  15. applicationScope.put("name", "applicationTom");
  16. return SUCCESS;
  17. }
  18. }

第二种方式

通过ServletActionContext

  1. public class Demo2Action extends ActionSupport {
  2. // 并不推荐
  3. @Override
  4. public String execute() throws Exception {
  5.  
  6. // 原生request
  7. HttpServletRequest request = ServletActionContext.getRequest();
  8. // 原生session
  9. HttpSession session = request.getSession();
  10. // 原生response
  11. ServletActionContext.getResponse();
  12. // 原生servletContext
  13. ServletActionContext.getServletContext();
  14.  
  15. return super.execute();
  16. }
  17.  
  18. }

第三种方式

通过实现ServletRequestAware

  1. public class Demo3Action extends ActionSupport implements ServletRequestAware {
  2. private HttpServletRequest request;
  3.  
  4. // 并不推荐
  5. @Override
  6. public String execute() throws Exception {
  7.  
  8. System.out.println("原生request" + request);
  9. request.setAttribute("name", "haha");
  10. return super.execute();
  11. }
  12.  
  13. @Override
  14. public void setServletRequest(HttpServletRequest arg0) {
  15. this.request = arg0;
  16. }
  17.  
  18. }

第四种方式(推荐)

通过实现接口获得Map类型元素
  接口RequestAware
  接口SessionAware
  接口ApplicationAware
  1. public class ScopeAction extends ActionSupport implements SessionAware{
  2. Map<String,Object> session;
  3.  
  4. @Override
  5. public void setSession(Map<String, Object> arg0){
  6. session = arg0;
  7. }
  8.  
  9. @Override
  10. public String execute() throws Exception{
  11. session.put("abc","haha");
  12. System.out.println(session.get("abc"));
  13. return SUCCESS;
  14. }
  15. }
 

Struts2-整理笔记(三)结果处理跳转、获得servletAPI原生的更多相关文章

  1. Struts2学习笔记(三)——Action详解

    Action是用于处理请求操作的,它是由StrutsPrepareAndExceuteFilter分发过来的. 1.Action的创建方式 1) POJO类(PlainOldJavaObjects简单 ...

  2. 尚学堂马士兵struts2 课堂笔记(三)

    19-20 简单数据验证 例如 前台jsp 及struts.xml <a href="user/user!add?name=a" >添加用户</a> < ...

  3. Struts2学习笔记三:深入Action

    一:Action中获取参数值 在Servlet中,我们通过doGet()/doPost()方法中的参数,获取request/response对象,然后提取参数值: 处理请求结束后,有数据需要携带返回客 ...

  4. Struts2学习笔记三 访问servlet

    结果跳转方式 转发 <!-- 转发 --> <action name="Demo1Action" class="cn.itheima.a_result. ...

  5. struts2学习笔记三

    一.国际化概念(了解) 1.什么是国际化 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 2.什么需要国际 ...

  6. JUC整理笔记三之测试工具jcstress

    并发测试工具Jcstress使用教程 Jcstress 全称 Java Concurrency Stress,是一种并发压力测试工具,可以帮助研究JVM.java类库和硬件中并发的正确性. Wiki地 ...

  7. Struts2学习笔记(三):result配置的各项视图转发类型

    Struts 1: <action path="/user" type="org.sunny.user.action.UserAction" ...> ...

  8. C# 《编写高质量代码改善建议》整理&笔记 --(三)泛型&委托&事件

    1.泛型 基于泛型,我们可以将类型参数化,以便更大范围地进行代码复用.同时,它减少了泛型类及泛型方法中的转型, 确保类型安全. 1)总是优先考虑泛型 优点:可重用性,类型安全,高效率. 2)避免在泛型 ...

  9. jQuery整理笔记文件夹

    jQuery整理笔记文件夹 jQuery整理笔记一----jQuery開始 jQuery整理笔记二----jQuery选择器整理 jQuery整理笔记三----jQuery过滤函数 jQuery整理笔 ...

  10. canvas学习之API整理笔记(二)

    前面我整理过一篇文章canvas学习之API整理笔记(一),从这篇文章我们已经可以基本了解到常用绘图的API.简单的变换和动画.而本篇文章的主要内容包括高级动画.像素操作.性能优化等知识点,讲解每个知 ...

随机推荐

  1. zoj1797 Least Common Multiple 最小公倍数

    Least Common Multiple Time Limit: 2 Seconds      Memory Limit: 65536 KB The least common multiple (L ...

  2. myeclipse 中clean的作用

    myeclipse中clean的作用     重新编译的功能 就是将编译好的class文件都删除后在重新生成.如果引用的jar包不能工作可以尝试下.

  3. jquery定时刷新数据

    $(function () { setInterval("startRequest()", 3000); }); function startRequest() { $(" ...

  4. Ubuntu 16.04 LTS 下安装MATLAB2015b 以及Matlab system error解决办法

    下载MATLAB2015b破解版 操作系统:Ubuntu 16.o4 LTS 程序文件:Matlab2015b-glnxa64破解版 解压提取文件:在ubuntu系统下可以直接提取压缩文件,得到三个文 ...

  5. BeginInvoke()使用

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  6. OpenSCAD 建模:矿泉水瓶盖

    下载地址:https://github.com/ZhangGaoxing/openscad-models/tree/master/BottleCap 代码: module screw(r=){ ::] ...

  7. 【转】scatterlist && DMA

    原文:scatterlist && DMA DMA是一种无须CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制.使用DMA可以是系统CPU从实际的IO数据传输过程中摆脱出 ...

  8. MYSQL 总结

    1.数据库实质中访问的是 DBMC,数据库是一种存储介质 2.groub by 与 having 理解 group by 有一个原则,select后面的所有列中,没有使用聚合函数的列必须出现在 gro ...

  9. await和async更多的理解

    最近有不少网友提起await和async,呵呵,C# 5引进的语法糖. 这个语法糖还真不好吃,能绕倒一堆初学的朋友,在网上也有很多网友关于这块知识点的争论,有对有错,今天在这里把这个误区好好讲讲. 在 ...

  10. 基于vip和twemproxy代理实现redis集群的无感知弹性扩容

    目标是实现redis集群的无感知弹性扩容 关键点 1是无感知,即对redis集群的用户来说服务ip和port保持不变 2.弹性扩容,指的是在需要时刻可以按照业务扩大redis存储容量. 最原始的twe ...