Struts2中期(這框架目前正處於淘汰狀態)

Struts2的次日


Struts2的次日的內容java

1. Struts2框架中的Servlet的API的使用 2. Struts2中Action接收請求參數 3. Struts2中自定義攔截器

案例一:使用Struts2做爲WEB層完成客戶的新增功能


需求分析服務器

1. 原來是使用Servlet做爲WEB層框架,如今須要使用Struts2做爲WEB層完成客戶的新增功能

技術分析之在Struts2框架中使用Servlet的APIsession

1. 在Action類中也能夠獲取到Servlet一些經常使用的API * 需求:提供JSP的表單頁面的數據,在Action中使用Servlet的API接收到,而後保存到三個域對象中,最後再顯示到JSP的頁面上。 * 提供JSP註冊的頁面,演示下面這三種方式 <h3>註冊頁面</h3> <form action="${ pageContext.request.contextPath }/xxx.action" method="post"> 姓名:<input type="text" name="username" /><br/> 密碼:<input type="password" name="password" /><br/> <input type="submit" value="註冊" /> </form> 2. 徹底解耦合的方式 * 若是使用該種方式,Struts2框架中提供了一個類,ActionContext類,該類中提供一些方法,經過方法獲取Servlet的API * 一些經常使用的方法以下 * static ActionContext getContext() -- 獲取ActionContext對象實例 * java.util.Map<java.lang.String,java.lang.Object> getParameters() -- 獲取請求參數,至關於request.getParameterMap(); * java.util.Map<java.lang.String,java.lang.Object> getSession() -- 獲取的表明session域的Map集合,就至關於操做session域。 * java.util.Map<java.lang.String,java.lang.Object> getApplication() -- 獲取表明application域的Map集合 * void put(java.lang.String key, java.lang.Object value) -- 注意:向request域中存入值。 3. 使用原生Servlet的API的方式 * Struts2框架提供了一個類,ServletActionContext,該類中提供了一些靜態的方法 * 具體的方法以下 * getPageContext() * getRequest() * getResponse() * getServletContext()

技術分析之結果頁面的跳轉app

1. 結果頁面存在兩種方式 * 全局結果頁面 > 條件:若是<package>包中的一些action都返回success,而且返回的頁面都是同一個JSP頁面,這樣就能夠配置全局的結果頁面。 > 全局結果頁面針對的當前的包中的全部的Action,可是若是局部還有結果頁面,會優先局部的。使用的標籤是 <global-results> <result>/demo3/suc.jsp</result> </global-results> * 局部結果頁面 <result>/demo3/suc.jsp</result> 2. 結果頁面的類型 * 結果頁面使用<result>標籤進行配置,包含兩個屬性 > name -- 邏輯視圖的名稱 > type -- 跳轉的類型,值一些,須要掌握一些經常使用的類型。常見的結果類型去struts-default.xml中查找。 * dispatcher -- 轉發.type的默認值.Action--->JSP * redirect -- 重定向. Action--->JSP * chain -- 多個action之間跳轉.從一個Action轉發到另外一個Action. Action---Action * redirectAction -- 多個action之間跳轉.從一個Action重定向到另外一個Action. Action---Action * stream -- 文件下載時候使用的

技術分析之Struts2框架的數據封裝框架

1. 爲何要使用數據的封裝呢? * 做爲MVC框架,必需要負責解析HTTP請求參數,並將其封裝到Model對象中 * 封裝數據爲開發提供了不少方便 * Struts2框架提供了很強大的數據封裝的功能,再也不須要使用Servlet的API完成手動封裝了!! 2. Struts2中提供了兩類數據封裝的方式? * 第一種方式:屬性驅動 > 提供對應屬性的set方法進行數據的封裝。 * 表單的哪些屬性須要封裝數據,那麼在對應的Action類中提供該屬性的set方法便可。 * 表單中的數據提交,最終找到Action類中的setXxx的方法,最後賦值給全局變量。 * 注意0:Struts2的框架採用的攔截器完成數據的封裝。 * 注意1:這種方式不是特別好:由於屬性特別多,提供特別多的set方法,並且還須要手動將數據存入到對象中. * 注意2:這種狀況下,Action類就至關於一個JavaBean,就沒有體現出MVC的思想,Action類又封裝數據,又接收請求處理,耦合性較高。 > 在頁面上,使用OGNL表達式進行數據封裝。 * 在頁面中使用OGNL表達式進行數據的封裝,就能夠直接把屬性封裝到某一個JavaBean的對象中。 * 在頁面中定義一個JavaBean,而且提供set方法:例如:private User user; * 頁面中的編寫發生了變化,須要使用OGNL的方式,表單中的寫法:<input type="text" name="user.username"> * 注意:只提供一個set方法還不夠,必須還須要提供user屬性的get和set方法!!! > 先調用get方法,判斷一下是否有user對象的實例對象,若是沒有,調用set方法把攔截器建立的對象注入進來, * 第二種方式:模型驅動 > 使用模型驅動的方式,也能夠把表單中的數據直接封裝到一個JavaBean的對象中,而且表單的寫法和以前的寫法沒有區別! > 編寫的頁面不須要任何變化,正常編寫name屬性的值 > 模型驅動的編寫步驟: * 手動實例化JavaBean,即:private User user = new User(); * 必須實現ModelDriven<T>接口,實現getModel()的方法,在getModel()方法中返回user便可!!

技術分析之Struts2把數據封裝到集合中jsp

1. 封裝複雜類型的參數(集合類型 Collection 、Map接口等) 2. 需求:頁面中有可能想批量添加一些數據,那麼如今就可使用上述的技術了。把數據封裝到集合中 3. 把數據封裝到Collection中 * 由於Collection接口都會有下標值,全部頁面的寫法會有一些區別,注意: > <input type="text" name="products[0].name" /> * 在Action中的寫法,須要提供products的集合,而且提供get和set方法。 4. 把數據封裝到Map中 * Map集合是鍵值對的形式,頁面的寫法 > <input type="text" name="map['one'].name" /> * Action中提供map集合,而且提供get和set方法

案例:添加客戶函數

1. 功能

案例總結之Struts2的攔截器技術post

1. 攔截器的概述 * 攔截器就是AOP(Aspect-Oriented Programming)的一種實現。(AOP是指用於在某個方法或字段被訪問以前,進行攔截而後在以前或以後加入某些操做。) * 過濾器:過濾從客服端發送到服務器端請求的 * 攔截器:攔截對目標Action中的某些方法進行攔截 * 攔截器不能攔截JSP * 攔截到Action中某些方法 2. 攔截器和過濾器的區別 1)攔截器是基於JAVA反射機制的,而過濾器是基於函數回調的 2)過濾器依賴於Servlet容器,而攔截器不依賴於Servlet容器 3)攔截器只能對Action請求起做用(Action中的方法),而過濾器能夠對幾乎全部的請求起做用(CSS JSP JS) * 攔截器 採用 責任鏈 模式 > 在責任鏈模式裏,不少對象由每個對象對其下家的引用而鏈接起來造成一條鏈 > 責任鏈每個節點,均可以繼續調用下一個節點,也能夠阻止流程繼續執行 * 在struts2 中能夠定義不少個攔截器,將多個攔截器按照特定順序 組成攔截器棧 (順序調用 棧中的每個攔截器 ) 3. Struts2的核心是攔截器,看一下Struts2的運行流程


案例總結之自定義攔截器和配置spa

1. 編寫攔截器,須要實現Interceptor接口,實現接口中的三個方法 protected String doIntercept(ActionInvocation invocation) throws Exception { // 獲取session對象 User user = (User) ServletActionContext.getRequest().getSession().getAttribute("existUser"); if(user == null){ // 說明,沒有登陸,後面就不會執行了 return "login"; } return invocation.invoke(); } 2. 須要在struts.xml中進行攔截器的配置,配置一共有兩種方式 <!-- 定義了攔截器 第一種方式 <interceptors> <interceptor name="DemoInterceptor" class="com.ceobai.interceptor.DemoInterceptor"/> </interceptors> --> <!-- 第二種方式:定義攔截器棧 --> <interceptors> <interceptor name="DemoInterceptor" class="com.ceobai.interceptor.DemoInterceptor"/> <!-- 定義攔截器棧 --> <interceptor-stack name="myStack"> <interceptor-ref name="DemoInterceptor"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <action name="userAction" class="com.ceobai.demo3.UserAction"> <!-- 只要是引用本身的攔截器,默認棧的攔截器就不執行了,必需要手動引入默認棧 <interceptor-ref name="DemoInterceptor"/> <interceptor-ref name="defaultStack"/> --> <!-- 引入攔截器棧就OK --> <interceptor-ref name="myStack"/> </action>

案例二:使用攔截器判斷用戶是否已經登陸code

相關文章
相關標籤/搜索