以java平臺(tái)為基礎(chǔ),專注項(xiàng)目管理、關(guān)注電子商務(wù)
          攬住母親的肩頭,敬父親一杯酒,對(duì)愛的女人說“我愛你”,和另外一個(gè)男人打架,不要打女人,有一個(gè)自己的孩子,年輕的時(shí)候去漂泊,有自己的一份事業(yè).

          Struts 學(xué)習(xí)隨筆 ?

          Struts 是基于 MVC 設(shè)計(jì)模式的框架技術(shù),現(xiàn)在的流行使用是 struts1.1 and struts1.2, 使用開發(fā)框架可以更好地提高開發(fā)效率。

          Struts 的工作流程

          1. ???????? 檢索和用戶請(qǐng)求匹配的 ActionMapping 實(shí)例,如果不存在,就返回用戶請(qǐng)求中路徑無效的信息。

          2. ???????? 如果 ActionForm 實(shí)例不存在,就創(chuàng)建一個(gè) ActionForm 對(duì)象,把客戶提交的表單數(shù)據(jù)保存到 ActionForm 對(duì)象中。

          3. ???????? 根據(jù)配置信息決定是否需要表單驗(yàn)證。如果需要驗(yàn)證,就調(diào)用 ActionForm validate() 方法。

          4. ???????? 如果 ActionForm validate() 方法返回 null 或返回一個(gè)不包含 ActionMessage ActionErrors 對(duì)象,就表示表單驗(yàn)證成功。如果返回一個(gè)或多個(gè) ActionMessage ActionErrors 對(duì)象,就表示表單驗(yàn)證失敗,此時(shí) ActionServlet 將直接把請(qǐng)求轉(zhuǎn)發(fā)給包含用戶提交表單的 jsp 組件。在這種情況下,不會(huì)創(chuàng)建 Action 對(duì)象和調(diào)用 Action execute() 方法。

          5. ???????? ActionServlet 根據(jù) ActionMapping 實(shí)例包含的映射信息決定將請(qǐng)求轉(zhuǎn)發(fā)給哪個(gè) Action 。如果相應(yīng)的 Action 實(shí)例不存在,就先創(chuàng)建這個(gè)實(shí)例,然后調(diào)用 Action execute() 方法。

          6. ???????? Action execute() 方法返回一個(gè) ActionForward 對(duì)象 ,ActionServlet 再把客戶請(qǐng)求轉(zhuǎn)發(fā)給 ActionForward 對(duì)象指向的 jsp 組件 .

          7. ???????? ActionForward 對(duì)象指向的 jsp 組件生成動(dòng)態(tài)網(wǎng)頁,返回給客戶。

          ?????? 如何用好 struts 框架技術(shù)呢?我們應(yīng)該掌握如下的知識(shí)點(diǎn):

          ? ???????? MVC 的兩種規(guī)范

          ? ???????? 配置文件 (struts-config.xml,web.xml)

          ? ???????? ActionForm 類及其子類。

          ? ???????? ActionForward

          ? ???????? ActionServlet

          ? ???????? Action

          ? ???????? ActionMessages

          ? ???????? 國際化的問題

          ? ???????? struts 驗(yàn)證技術(shù)

          ? ???????? struts 標(biāo)簽

          ? ???????? struts 擴(kuò)展(略)

          ? ???????? struts hibernate 結(jié)合使用

          ?

          逐個(gè)擊破

          ?

          MVC 的兩種規(guī)范

          ?

          兩種 MVC 規(guī)范是 JSP Model1? and JSP Model2.

          假設(shè)訪問我們分這么幾部分:瀏覽器, WEB 服務(wù)器,應(yīng)用服務(wù)器和數(shù)據(jù)庫,兩者不同的是 JSP Model1 WEB 服務(wù)器里面只有 JSP 頁面和 JavaBean JSP 既充當(dāng) V ,又充當(dāng) C 的角色。而 JSP Model2 WEB 服務(wù)器里有 JSP JavaBean Servlet

          配置文件 (struts-config.xml,web.xml)

          ?

          web.xml 文件。

          配置 ActionServlet(<servlet>,<servlet-mapping>)

          初始化 ActionServlet 的初始化參數(shù) (<init-param> 也就是加載 struts-config.xml)

          配置歡迎文件 (<welcome-file-list>)

          配置錯(cuò)誤處理

          <error-page>

          ?????? <error-code>404</error-code>

          ?????? <location>/common/404.jsp</location>

          </error-page>

          配置 struts 標(biāo)簽庫 (<tablib>)

          ?

          struts-config.xml

          配置數(shù)據(jù)庫連接 (<data-sources>)

          配置實(shí)體 (<form-beans>)

          配置全局的異常處理 (<globel-exceptions>)

          配置全局的轉(zhuǎn)發(fā)關(guān)系 (<globel-forwards>)

          配置映射 (<action-mapping>)

          配置本地化文件 (<message-resources>) 實(shí)際是為了完成國際化。

          配置插件 (<plug-in>)( )

          ?

          ActionForm 類及其子類。

          ?

          DTO 數(shù)據(jù)傳輸對(duì)象,生命周期有兩種 request and session,ActionForm validate() reset() 方法,主要說 reset() 方法,針對(duì)于 request 級(jí)的 ActionForm 類是沒有很大含義地,因?yàn)樗粫?huì)被調(diào)用一次,里面封裝的數(shù)據(jù)也只是一次使用。主要是對(duì)于 session 級(jí)的作用是很大的,因?yàn)樗婕暗蕉啻斡玫健?/span>

          DynaActionForm ActionForm 子類 , initialize() 方法 , 實(shí)現(xiàn) DynaActionForm 的方法 :

          <form-bean? name=”loginForm”? type=”org.apache.struts.action.DynaActionForm”>

          ?????? <form-property? initial=”alex”? name=”userName”? type=”java.lang.String”/>

          </form-bean>

          兩種 ActionForm 做比較 .

          初始化: DynaActionForm 是通過實(shí)現(xiàn)化,然后覆蓋其父類的方法 reset() 在這個(gè)方法中

          調(diào)用 initilize() 進(jìn)行初始化。

          驗(yàn)證: DynaActionForm 采用動(dòng)態(tài)的驗(yàn)證方法,在( struts 驗(yàn)證技術(shù)中會(huì)說到)

          使用: DynaActionForm 的所有屬性保存在一個(gè) Map 類中 , 通過 get() set() 方法調(diào)用,

          ?????? ? 如: String email=(String)form.get(“email”);

          ????????????? ? form.set(“email”,”cssseek@163.com”);

          ?

          ActionForward

          ?

          ( )

          ActionServlet

          ?

          屬于 struts 控制器組件,包括: ActionServlet,RequestProcessor and Action.

          組件完成的任務(wù):

          接收用戶請(qǐng)求、根據(jù)用戶請(qǐng)求,調(diào)用合適的模型組件來執(zhí)行相應(yīng)的業(yè)務(wù)邏輯、獲取業(yè)務(wù)邏輯執(zhí)行結(jié)果、根據(jù)當(dāng)前狀態(tài)以及業(yè)務(wù)邏輯執(zhí)行結(jié)果,選擇合適的視圖組件返回給用戶。

          Struts 采用 ActionServlet RequestProcessor 組件進(jìn)行集中控制,并采用 Action 組件來處理單項(xiàng)業(yè)務(wù)。

          ActionServlet 類在應(yīng)用生命周期中只創(chuàng)建實(shí)例一次。

          ?

          Action

          ?

          Action 類是用戶請(qǐng)求和業(yè)務(wù)邏輯之間的橋梁。在 RequestProcessor 類預(yù)處理請(qǐng)求時(shí),在創(chuàng)建了 Action 的實(shí)例后,就調(diào)用自身的 processActionPerform() 方法,該方法再調(diào)用 Action 類的 execute() 方法。

          ActionMessages

          ?

          ActionError 類是 ActionMessage 的子類, struts1.2 放棄 ActionError.

          國際化的問題

          ?

          application_zh.properties 保存一些信息。

          :error.loginFail=” 登錄失敗,請(qǐng)輸入正確的用戶名和密碼

          ActionMessages errors=new ActionMessages();

          Errors.add(“l(fā)oginfail”,new ActionMessage(“error.loginFail”));

          關(guān)于亂碼的問題:

          1. ? 如果一些網(wǎng)站服務(wù)器例如 Tomcat 如果遇到中文亂碼問題,可以修改conf目錄下的server.xml
          <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
          enableLookups="false" redirectPort="8443" acceptCount="100" debug="0"connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>
          URIENcoding 設(shè)成GBK或GB2312

          ?

          2.? 表單中或傳遞字符串:本來輸入的漢字是正常的,但是提交后再顯示出來是亂碼,因?yàn)樘峤坏囊话闶?ISO8859編碼,所以顯示的時(shí)候要轉(zhuǎn)成GB2312編碼: String S=new String(rs.getString("news").getBytes("gb2312"),"ISO8859_1");
          //rs為待轉(zhuǎn)換的字符串
          然后使用S字符串的值就可以了

          ?

          3.? ?有的服務(wù)器端的語言環(huán)境如果設(shè)成簡體中文的也可以解決此類問題

          ?

          4.? ?插入數(shù)據(jù)庫中的字符是亂碼
          看看數(shù)據(jù)庫中支持的是何種編碼方式,用類似2中的方式作一下轉(zhuǎn)換即可。

          ?

          5.? 總之,用jsp開發(fā),碰到亂碼,你得分析是讀的時(shí)候發(fā)生亂碼,還是寫的時(shí)候發(fā)生亂碼,用2中的轉(zhuǎn)換,基本就能解決問題,有些時(shí)候?qū)懙臅r(shí)候做一次轉(zhuǎn)換,例如:
          String S=new String(rs.getString("news").getBytes("gb2312"),"ISO8859_1");
          //讀的時(shí)候在轉(zhuǎn)換回來
          String S=new String(rs.getString("news").getBytes("ISO8859_1"),"GB2312");
          或者把ISO8859-1和GB2312 的位置換一下,自己多試試,就能找到解決問題的辦法。

          ?

          struts 驗(yàn)證技術(shù)

          ?

          前面已講在 ActionForm validate() 驗(yàn)證。這里主要說在配置中驗(yàn)證技術(shù)。所需文件 validation.xml? validator-rules.xml 優(yōu)點(diǎn):當(dāng)相同的驗(yàn)證邏輯時(shí),可提高代碼的可重用性

          struts 標(biāo)簽

          ?

          struts-bean.tld? struts-form.tld? struts-html.tld? struts-logic.tld? struts-nested.tld? struts-template.tld? struts-tiles.tld 七個(gè)標(biāo)簽文件。

          struts HTML 標(biāo)簽

          基本的標(biāo)記

          struts Bean 標(biāo)簽

          用于定義輸入輸出 javaBean

          struts Login 標(biāo)簽

          邏輯運(yùn)算、循環(huán)遍歷

          struts Nested 標(biāo)簽

          定義 javaBean 嵌套關(guān)系。

          ?

          ?

          ?

          ?

          ?

          ?

          ????????????? ????????????? ????????????? ????????????? ????????????? ????????????? ????????????? ?????? 曹水生

          ????????????? ????????????? ????????????? ????????????? ????????????? ????????????? ?????? ?????? 2005 11 11 隨筆

          posted on 2006-03-22 20:29 cssseek 閱讀(566) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          <2006年3月>
          2627281234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          友情鏈接

          最新隨筆

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 恩施市| 宜兴市| 固原市| 吉木乃县| 廉江市| 右玉县| 徐汇区| 曲靖市| 万全县| 固安县| 塘沽区| 乌什县| 类乌齐县| 汕尾市| 宁津县| 福安市| 莫力| 中方县| 宁蒗| 新乡市| 台中县| 宜都市| 尚志市| 上饶县| 拉孜县| 阜平县| 来凤县| 林芝县| 灵台县| 张家港市| 石首市| 惠州市| 邵东县| 织金县| 清镇市| 丰都县| 河南省| 舒城县| 汾西县| 西乡县| 分宜县|