Struts2-整理笔记(三)结果处理跳转、获得servletAPI原生
生活随笔
收集整理的這篇文章主要介紹了
Struts2-整理笔记(三)结果处理跳转、获得servletAPI原生
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在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
public class Demo3Action extends ActionSupport implements ServletRequestAware {private HttpServletRequest request;// 并不推薦 @Overridepublic String execute() throws Exception {System.out.println("原生request" + request);request.setAttribute("name", "haha");return super.execute();}@Overridepublic void setServletRequest(HttpServletRequest arg0) {this.request = arg0;}}第四種方式(推薦)
通過實現接口獲得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 }?
轉載于:https://www.cnblogs.com/moster/p/7858200.html
總結
以上是生活随笔為你收集整理的Struts2-整理笔记(三)结果处理跳转、获得servletAPI原生的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: as用百度地图不联网就gg
- 下一篇: ES6--基础语法(一)