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

  <package name="struts-default" abstract="true">
<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
<result-type name="postback" class="org.apache.struts2.dispatcher.PostbackResult" />
</result-types>
</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
 public class DemoAction extends ActionSupport {

     @Override
public String execute() throws Exception {
// request域->map(struts2并不推荐使用request原生)
// 不推荐
Map<String, Object> requestScope = (Map<String, Object>) ActionContext.getContext().get("request");
// 推荐
ActionContext.getContext().put("name", "requestTom");
// session域->map
Map<String, Object> sessionScope = ActionContext.getContext().getSession();
sessionScope.put("name", "sessionTom");
// application域->map
Map<String, Object> applicationScope = ActionContext.getContext().getApplication();
applicationScope.put("name", "applicationTom");
return SUCCESS;
}
}

第二种方式

通过ServletActionContext

 public class Demo2Action extends ActionSupport {
// 并不推荐
@Override
public String execute() throws Exception { // 原生request
HttpServletRequest request = ServletActionContext.getRequest();
// 原生session
HttpSession session = request.getSession();
// 原生response
ServletActionContext.getResponse();
// 原生servletContext
ServletActionContext.getServletContext(); return super.execute();
} }

第三种方式

通过实现ServletRequestAware

public class Demo3Action extends ActionSupport implements ServletRequestAware {
private HttpServletRequest request; // 并不推荐
@Override
public String execute() throws Exception { System.out.println("原生request" + request);
request.setAttribute("name", "haha");
return super.execute();
} @Override
public void setServletRequest(HttpServletRequest arg0) {
this.request = arg0;
} }

第四种方式(推荐)

通过实现接口获得Map类型元素
  接口RequestAware
  接口SessionAware
  接口ApplicationAware
 public class ScopeAction extends ActionSupport implements SessionAware{
Map<String,Object> session; @Override
public void setSession(Map<String, Object> arg0){
session = arg0;
} @Override
public String execute() throws Exception{
session.put("abc","haha");
System.out.println(session.get("abc"));
return SUCCESS;
}
}
 

最新文章

  1. Can&#39;t find keyplane that supports type 4 for keyboard iPhone-Portrait-NumberPad; using 3876877096_Portrait_iPhone-Simple-Pad_Default
  2. UVA 12651 Triangles
  3. linshiwendang12--匈牙利
  4. ON、WHERE、HAVING的区别
  5. Javascript 绝对定位和相对定位
  6. 浅谈print2flash的在线预览转换应用(原创)
  7. 【我所認知的BIOS】—&amp;gt;ADU.exe
  8. 使用bootbox.js(二级务必提交书面和数字到数字中国)
  9. HTML的三种布局:DIV+CSS、FLEX、GRID
  10. 阿里云API网关(2)开放 API 并接入 API 网关
  11. SpringBoot入门之简单配置
  12. 【转】在子线程中new Handler报错--Can&#39;t create handler inside thread that has not called Looper.prepare()
  13. iOS 九宫格解锁
  14. Nginx浅谈
  15. python WebDriver如何处理右键菜单
  16. python 全栈开发,Day107(CRM初始,权限组件之权限控制,权限系统表设计)
  17. WEB前端工程师的职业发展路线图、怎样做WEB前端职业规划
  18. oracle 操作,偶尔记一下
  19. log4j的日志级别(ssm中log4j的配置)
  20. sql性能优化(摘自网络)

热门文章

  1. JQuery上传插件Uploadify详解及其中文按钮解决方案 .
  2. cocos2dx - 环境配置,项目创建
  3. Vue中之nextTick函数源码分析
  4. PE格式第七讲,重定位表
  5. word2vec 数学原理
  6. 如何搭建ftp的yum源
  7. 使用 Skeleton Screen 提升用户感知体验
  8. 关于 SVN 项目检出
  9. 基于HTML5及WebGl下生成的json格式的工控SCADA风机叶轮旋转
  10. Yii2之组件的注册与创建