需求分析前端
1. 使用Struts2完成登陸的功能
技術分析之Struts2框架的概述web
1. 什麼是Struts2的框架 * Struts2是Struts1的下一代產品,是在 struts1和WebWork的技術基礎上進行了合併的全新的Struts 2框架。 * 其全新的Struts 2的體系結構與Struts 1的體系結構差異巨大。 * Struts 2以WebWork爲核心,採用攔截器的機制來處理用戶的請求,這樣的設計也使得業務邏輯控制器可以與ServletAPI徹底脫離開,因此Struts 2能夠理解爲WebWork的更新產品。 * 雖然從Struts 1到Struts 2有着太大的變化,可是相對於WebWork,Struts 2的變化很小。 2. Struts2是一個基於MVC設計模式的Web層框架 * MVC和JavaEE的三層結構 * MVC設計模式:是由一些網站的開發人員提出來的 * JavaEE三層結構:SUN公司爲EE開發劃分的結構 3. 常見的Web層的框架 * Struts1 * Struts2 * Webwork * SpringMVC 4. Web層框架的特色 * 都是一個特色,前端控制器模式 * 記住:前端控制器(核心的控制器) * Struts2框架前端的控制器就是過濾器
技術分析之Struts2快速入門的環境準備apache
1. 建立WEB項目,編寫JSP的頁面,編寫超連接,點擊超連接發送請求,請求服務器,讓服務器的方法去執行!! <h3>Struts2的入門程序</h3> <a href="${ pageContext.request.contextPath }/hello.action">Struts2入門程序</a> 2. 下載Struts2的開發包 * https://struts.apache.org/ -- 官網地址 3. 解壓struts-2.3.24-all.zip包 * 解壓後會看到有包和一些文件,你們須要掌握包相關的信息 * apps -- Struts2框架提供了一些應用 * libs -- Struts2框架開發的jar包 * docs -- Struts2框架開發文檔 * src -- Struts2框架源碼 4. 引入須要開發的jar包 * Struts2框架的開發jar包很是多,可是不是全部都是必需要引入的,有一些必需要導入的jar包,這些jar包能夠從Struts2框架提供的應用中找到。 * 你們能夠打開apps目錄,而後找到struts2-blank.war應用。war包和zip包的壓縮格式是同樣的,因此能夠本身修改後綴名,解壓。 * 找到解壓後的應用,打開WEB-INF/lib目錄下因此的jar包。複製到工程中,就能夠了。 5. 須要配置Struts2的前端控制器,注意:這一步是必需要作的操做,這是Struts2核心的控制器。 * Struts2的前端控制器就是一個過濾器,那麼過濾器相關知識我們都學習過,須要在web.xml中進行配置。 * 前端控制器的類的路徑和名稱:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter * 具體配置以下 <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
技術分析之編寫Action類設計模式
1. Action類是動做類,是Struts2處理請求,封裝數據,響應頁面的核心控制器。須要本身編寫。 package cn.itcast.action; public String sayHello(){ System.out.println("Hello Struts2!!"); return null; }
技術分析之編寫Struts的配置文件瀏覽器
1. 配置文件名稱是struts.xml(名稱必須是struts.xml) 2. 在src下引入struts.xml配置文件(配置文件的路徑必須是在src的目錄下) 3. 配置以下 <?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> <package name="default" namespace="/" extends="struts-default"> <action name="hello" class="com.itheima.action.HelloAction" method="sayHello"> </action> </package> </struts>
入門總結之Struts2的執行流程緩存
1. 執行的流程 * 編寫的頁面,點擊超連接,請求提交到服務器端。 * 請求會先通過Struts2的核心過濾器(StrutsPrepareAndExecuteFilter) * 過濾器的功能是完成了一部分代碼功能 * 就是一系列的攔截器執行了,進行一些處理工做。 * 我們能夠在struts-default.xml配置文件中看到有不少的攔截器。能夠經過斷點的方式來演示。 * 攔截器執行完後,會根據struts.xml的配置文件找到請求路徑,找到具體的類,經過反射的方式讓方法執行。 2. 總結 * JSP頁面-->StrutsPrepereAndExecuteFilter過濾器-->執行一系列攔截器(完成了部分代碼)-->執行到目標Action-->返回字符串-->結果頁面(result)-->頁面跳轉
入門總結之Struts2框架配置文件加載的順序服務器
0. 須要掌握 * 加載了哪些個配置文件(重點的) * 配置文件的名稱是什麼 * 配置文件的位置 * 配置文件的做用 1. Struts2框架的核心是StrutsPrepareAndExecuteFilter過濾器,該過濾器有兩個功能 * Prepare -- 預處理,加載核心的配置文件 * Execute -- 執行,讓部分攔截器執行 2. StrutsPrepareAndExecuteFilter過濾器會加載哪些配置文件呢? * 經過源代碼能夠看到具體加載的配置文件和加載配置文件的順序 * init_DefaultProperties(); -- 加載org/apache/struts2/default.properties * init_TraditionalXmlConfigurations(); -- 加載struts-default.xml,struts-plugin.xml,struts.xml * init_LegacyStrutsProperties(); -- 加載自定義的struts.properties. * init_CustomConfigurationProviders(); -- 加載用戶自定義配置提供者 * init_FilterInitParameters() ; -- 加載web.xml 3. 重點了解的配置文件 * default.properties -- 在org/apache/struts2/目錄下,表明的是配置的是Struts2的常量的值 * struts-default.xml -- 在Struts2的核心包下,表明的是Struts2核心功能的配置(Bean、攔截器、結果類型等) * struts.xml -- 重點中的重點配置,表明WEB應用的默認配置,在工做中,基本就配置它就能夠了!!(能夠配置常量) * web.xml -- 配置前端控制器(能夠配置常量) * 注意: * 前3個配置文件是struts2框架的默認配置文件,基本不用修改。 * 後3個配置文件能夠容許本身修改struts2的常量。可是有一個特色:後加載的配置文件修改的常量的值,會覆蓋掉前面修改的常量的值。 4. 總結(重點掌握的配置文件) * 先加載default.properties文件,在org/apache/struts2/default.properties文件,都是常量。 * 又加載struts-default.xml配置文件,在覈心的jar包最下方,struts2框架的核心功能都是在該配置文件中配置的。 * 再加載struts.xml的配置文件,在src的目錄下,表明用戶本身配置的配置文件 * 最後加載web.xml的配置文件 * 後加載的配置文件會覆蓋掉以前加載的配置文件(在這些配置文件中能夠配置常量) 5. 注意一個問題 * 哪些配置文件中能夠配置常量? * default.properties -- 默認值,我們是不能修改的!! * struts.xml -- 能夠配置,開發中基本上都在該配置文件中配置常量 * struts.properties -- 能夠配置,基本不會在該配置文件中配置 * web.xml -- 能夠配置,基本不會在該配置文件中配置 * 後加載的配置文件會覆蓋掉以前加載的配置!!
入門總結之struts.xml配置文件的配置app
1. <package>標籤,若是要配置<Action>的標籤,那麼必需要先配置<package>標籤,表明的包的概念 * 包含的屬性 * name -- 包的名稱,要求是惟一的,管理action配置 * extends -- 繼承,能夠繼承其餘的包,只要繼承了,那麼該包就包含了其餘包的功能,通常都是繼承struts-default * namespace -- 名稱空間,通常與<action>標籤中的name屬性共同決定訪問路徑(通俗話:怎麼來訪問action),常見的配置以下 * namespace="/" -- 根名稱空間 * namespace="/aaa" -- 帶有名稱的名稱空間 * abstract -- 抽象的。這個屬性基本不多使用,值若是是true,那麼編寫的包是被繼承的 2. <action>標籤 * 表明配置action類,包含的屬性 * name -- 和<package>標籤的namespace屬性一塊兒來決定訪問路徑的 * class -- 配置Action類的全路徑(默認值是ActionSupport類) * method -- Action類中執行的方法,若是不指定,默認值是execute 3. <result>標籤 * action類中方法執行,返回的結果跳轉的頁面 * name -- 結果頁面邏輯視圖名稱 * type -- 結果類型(默認值是轉發,也能夠設置其餘的值)
入門總結之Struts2配置常量框架
1. 能夠在Struts2框架中的哪些配置文件中配置常量? * struts.xml(必需要掌握,開發中基本上就在該配置文件中編寫常量) * <constant name="key" value="value"></constant> * web.xml * 在StrutsPrepareAndExecuteFilter配置文件中配置初始化參數 * 注意:後加載的配置的文件的常量會覆蓋以前加載的常量!! 2. 須要你們瞭解的常量 * struts.i18n.encoding=UTF-8 -- 指定默認編碼集,做用於HttpServletRequest的setCharacterEncoding方法 * struts.action.extension=action,, -- 該屬性指定須要Struts 2處理的請求後綴,該屬性的默認值是action,即全部匹配*.action的請求都由Struts2處理。若是用戶須要指定多個請求後綴,則多個後綴之間以英文逗號(,)隔開 * struts.serve.static.browserCache=true -- 設置瀏覽器是否緩存靜態內容,默認值爲true(生產環境下使用),開發階段最好關閉 * struts.configuration.xml.reload=false -- 當struts的配置文件修改後,系統是否自動從新加載該文件,默認值爲false(生產環境下使用) * struts.devMode = false -- 開發模式下使用,這樣能夠打印出更詳細的錯誤信息
入門總結之指定多個struts的配置文件(瞭解)ide
1. 在大部分應用裏,隨着應用規模的增長,系統中Action的數量也會大量增長,致使struts.xml配置文件變得很是臃腫。 爲了不struts.xml文件過於龐大、臃腫,提升struts.xml文件的可讀性,咱們能夠將一個struts.xml配置文件分解成多個配置文件,而後在struts.xml文件中包含其餘配置文件。 2. 能夠在<package>標籤中,使用<include>標籤來引入其餘的struts_xx.xml的配置文件。例如: <struts> <include file="struts-part1.xml"/> <include file="struts-part2.xml"/> </struts> 3. 注意注意注意(重要的事情說三遍):<include file="cn/itcast/demo2/struts-part1.xml"/>
技術分析之Action類的三種寫法
1. 配置文件學習完成,下面的重點是Action類的三種寫法 * Action類就是一個POJO類 * 什麼是POJO類,POJO(Plain Ordinary Java Object)簡單的Java對象.簡單記:沒有繼承某個類,沒有實現接口,就是POJO的類。 * Action類能夠實現Action接口 * Action接口中定義了5個常量,5個常量的值對應的是5個邏輯視圖跳轉頁面(跳轉的頁面仍是須要本身來配置),還定義了一個方法,execute方法。 * 你們須要掌握5個邏輯視圖的常量 * SUCCESS -- 成功. * INPUT -- 用於數據表單校驗.若是校驗失敗,跳轉INPUT視圖. * LOGIN -- 登陸. * ERROR -- 錯誤. * NONE -- 頁面不轉向. * Action類能夠去繼承ActionSupport類(開發中這種方式使用最多) * 設置錯誤信息
技術分析之Action的訪問
1. 經過<action>標籤中的method屬性,訪問到Action中的具體的方法。 * 傳統的配置方式,配置更清晰更好理解!可是擴展須要修改配置文件等! * 具體的實例以下: * 頁面代碼 * <a href="${pageContext.request.contextPath}/addBook.action">添加圖書</a> * <a href="${pageContext.request.contextPath}/deleteBook.action">刪除圖書</a> * 配置文件的代碼 <package name="demo2" extends="struts-default" namespace="/"> <action name="addBook" class="cn.itcast.demo2.BookAction" method="add"></action> <action name="deleteBook" class="cn.itcast.demo2.BookAction" method="delete"></action> </package> 2. 通配符的訪問方式:(訪問的路徑和方法的名稱必需要有某種聯繫.) 通配符就是 * 表明任意的字符 * 使用通配符的方式能夠簡化配置文件的代碼編寫,並且擴展和維護比較容易。 * 具體實例以下: * 頁面代碼 <a href="${pageContext.request.contextPath}/order_add.action">添加訂單</a> <a href="${pageContext.request.contextPath}/order_delete.action">刪除訂單</a> * 配置文件代碼 * <action name="order_*" class="cn.itcast.demo2.OrderAction" method="{1}"></action> * 具體理解:在JSP頁面發送請求,http://localhost/struts2_01/order_add.action,配置文件中的order_*能夠匹配該請求,*就至關於變成了add,method屬性的值使用{1}來 代替,{1}就表示的是第一個*號的位置!!因此method的值就等於了add,那麼就找到Action類中的add方法,那麼add方法就執行了! 3. 動態方法訪問的方式(有的開發中也會使用這種方式) * 若是想完成動態方法訪問的方式,須要開啓一個常量,struts.enable.DynamicMethodInvocation = false,把值設置成true。 * 注意:不一樣的Struts2框架的版本,該常量的值不必定是true或者false,須要本身來看一下。若是是false,須要本身開啓。 * 在struts.xml中開啓該常量。 * <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> * 具體代碼以下 * 頁面的代碼 * <a href="${pageContext.request.contextPath}/product!add.action">添加商品</a> * <a href="${pageContext.request.contextPath}/product!delete.action">刪除商品</a> * 配置文件代碼 * <action name="product" class="cn.itcast.demo2.ProductAction"></action>