大大毛 的筆記

            DDM's Note

          哪怕沒有辦法一定有說法,
          就算沒有鴿子一定有烏鴉,
          固執無罪 夢想有價,
          讓他們驚訝.

          posts - 14, comments - 23, trackbacks - 0, articles - 58
             :: 首頁 ::  :: 聯系 ::  :: 管理

          精通Struts筆記--01

          Posted on 2006-07-18 21:57 大大毛 閱讀(266) 評論(0)  編輯  收藏 所屬分類: Struts

          1.Struts與Java Web應用簡介

          ???Struts為Java Web應用提供了框架.它可以提高開發的速度.
          ???優點:
          ??????本身是一群Web開發專家的智慧結晶;
          ??????運用廣泛;
          ??????適用于開發大型復雜的Web應用.

          ???Java Web應用的核心技術是Servlet和JSP
          ???Struts框架中JSP位于視圖層,而Servlet位于控制層

          ???幾個重要的API
          ??????HttpServletRequest:由Servlet容器把用戶的請求存在此對象中
          ??????HttpServletResponse:用于生成Http響應結果
          ??????HttpSession:容器為每個Http會話而創建的一個實例,用于保存會話中的共享數據
          ??????ServletContext:為每個Web應用而創建的實例,存放application范圍內的數據

          ??????HttpServletRequest,HttpSession,ServletContext都提供了操作共享數據的方法
          ??????setAttribute(String key,Object value)
          ??????getAttribute(String key)
          ??????與容器提供的接口一樣,因此getAttribute(String key)方法返回的是Object,需要做強制轉型

          ???HttpSession的生存期有:
          ??????客戶端關閉瀏覽器;
          ??????會話過期;
          ??????服務端調用HttpSession.invalidate()方法.

          ???相對來說Session的生存期較長,因此如果可以的話應將數據保存在Request范圍內,這樣可以縮短對象的生存期;另外象Tomcat這樣的容器提供了管理Session的功能,可以對其做持久化管理.

          ???Web應用中數據生存的范圍:
          ??????1.page
          ??????2.request
          ??????3.session
          ??????4.application

          ???JavaBean:
          ??????就是符合特定規范的Java對象,在JSP中提供了標簽便于處理
          ??????JSP中操作JavaBean常用標簽有:
          ?????????<jsp:useBean id="bean名稱" scope="生存期" class="ddm.MyBean" />
          ?????????<jsp:getProperty name="bean名稱" property="屬性名" />
          ?????????<jsp:setProperty name="bean名稱" property="屬性名" value="值" />
          ???JavaBean常位于模型層,由它提供數據及邏輯
          ???Struts中的ActionForm Bean就是一種JavaBean,它僅在視圖層和控制層之間傳遞用戶輸入的表單數據,位于視圖層,它只能有兩種生存范圍:request,session

          ???客戶化JSP標簽
          ??????在Jsp1.1中出現,支持用戶在JSP中自定義客戶化標簽,這些標簽常用于處理復雜的邏輯運算和事務以及定義JSP的輸出內容和格式.
          ??????優點:
          .?????????標簽具有可重用性,因此可以提供開發效率
          ????????????類似于asp中的JS函數,jsp中的嵌入頁
          .?????????可以在JSP頁面中以靜態或動態的方式設置標簽的屬性
          .?????????標簽可以訪問JSP網頁中的所有對象
          .?????????標簽可以相互嵌套,來完成復雜的邏輯
          .?????????可以使JSP頁面更簡潔,提高可讀性
          ????????????對于這個有不同的意見,我認為實際上降低了可讀性;因為程序的可讀性實際上是適用于程序開發/測試人員的,除此之外別無他人,而引用各種技術,只會提升技術上的復雜度,增加修改的難度;所謂的"類的可重用性",就我看來是指特定人群的,對于專業的高手來說是可以提升效率的,但是對于某種技術一知半解的人來說,只會提升開發難度.一旦類被重用,錯誤的影響面也會非常之廣.

          ???Struts提供了五種標簽庫:
          ??????1.Bean
          ??????2.HTML
          ??????3.Logic
          ??????4.Nested
          ??????5.Tiles

          ???EJB
          ??????EJB(企業JavaBean)組件是基于標準分布式對象技術,CORBA,RMI的服務端Java組件
          ??????它與JavaBean的聯系
          ?????????相同點:都用于實現企業應用的業務邏輯,都位于模型層
          ?????????區別:EJB總是分布式的;EJB需要運行于應用服務器中,而JavaBean只需要Servlet/JSP容器

          ???XML
          ??????應用廣泛,它可以描述結構化的數據,通常與DTD一起使用(聲明標記使用規則),常用于配置文件
          ??????Struts中的兩種重要的XML文件
          ??????web.xml
          ?????????普通的Web應用都有,它用于配置Web應用,如配置Servlet
          .?????struts-config.xml(可以使用別的名稱,需要在web.xml中對應)
          ?????????Struts框架的配置文件,主要是Action的配置,這個XML文件包含了幾個標簽,在書寫時各子標簽的書寫順序有著嚴格要求

          ???Web組件的關聯關系
          ??????1.請求轉發
          ?????????只能發生在同一個Web應用中,在服務端完成轉發
          ?????????RequestDespatcher rd = request.getRequestDispatcher("hello.jsp");
          ?????????rd.forward(request,response);
          ?????????JSP中使用的標簽:
          ????????????<jsp:forward page="hello.jsp" />
          ?????????這種方式可以共享request范圍內的數據
          ??????2.重定向
          ?????????與轉發類似,但是可以將請求轉發到不同的Web應用,在客戶端完成定向(由服務端發一個信息給客戶端瀏覽器,瀏覽器將新發一個請求)
          ?????????response.sendRedirect("
          http://www.javablog.net/tw-ddm ");
          ?????????由于可能發生在不同的Web應用,因此不能共享request范圍的數據
          ??????3.包含
          ?????????是一個聚集的概念,可以共享request數據,常用于模板,程序的控制權在調用者,被包含者只是暫時有控制權,執行完畢后需要傳回
          ?????????RequestDispatcher rd;
          ?????????rd = request.getRequestDispatcher("/header.jsp");
          ?????????rd.include(request,response);
          ?????????包含由于不會產生控制權的轉移,因此能夠在一個組件中包含多個
          ?????????JSP中使用標簽:
          ????????????<jsp:include page="/hello.jsp" flush="true">
          ???????????????<jsp:param name="username" value="ddm"/>
          ????????????</jsp:include>
          ?????????這是動態包含,它可以傳遞參數,它可以包含動態或靜態文件,每次運行時容器都會去檢查文件是否發生變化
          ?????????<% @include file="/hello.jsp" %>,容器不會每次去檢查文件,常用于包含靜態頁面

          ???Struts是實現MVC模式的框架
          ??????視圖層:
          ?????????JSP作為MVC中的視圖,它沒有業務邏輯,也沒有模型信息,只有標簽
          ?????????ActionForm bean 由于只處理表單數據,聯系視圖和控制器,因此也被分為視圖層
          ??????模型層:
          ?????????由JavaBean和EJB來實現,某些簡單的功能,有時也直接讓Action扮演控制器和模型兩種角色
          ??????控制器:
          ?????????由ActionSevlet和Action來實現.
          ?????????ActionSevlet類是Struts框架中的核心組件.繼承了HttpServlet,在MVC中作為中央控制器存在,因此只能有一個
          ????????????這個核心玩意也是可以替換的,只要新類是從ActionServlet派生即可,同時也需要在web.xml中改變對應的class名稱
          ?????????Action由ActionServlet根據Struts-config.xml配置文件來產生,它負責調用合適的模型(JavaBean,EJB),因此它也具有適配器的作用,相當于控制器和模型之間的隔離層(適配器)
          ?????????Action必須實現基類的execute()方法,此方法返回一個ActionForward對象,由ActionForward對象封裝響應,為增加應用的可配置,提倡從配置文件中findForward

          ???配置文件:
          ??????struts-config.xml
          ??????配置文件中描述了多個Action的映射信息,初始化時被封裝在ActionMapping對象中,每個action元素對應一個ActionMapping對象
          ??????該配置文件中有個<controller>元素,是用于配置ActionServlet的,比較有用的是:<controller contentType="text/html;charset=UTF-8" locale="true" />,這里的contentType應用于全局范圍,如果在JSP文件中指定將在局部履蓋這個選項,換句話說這里指定了,就可以在JSP頁面省心了,另外說一句,用Myeclipse生成的JSP,如果是從ActionForm生成則不會有這些信息,只有要設計視圖中單獨拖一個出來時才會具有.

          ???工作流程:
          ??????1.檢索與用戶請求匹配的ActionMapping對象,如果不存在則返回路徑無效的信息.
          ??????2.檢查有無ActionForm對象,如果沒有則創建,并將用戶提交的表單數據保存在其中.
          ??????3.根據配置決定表單是否需要驗證,如果需要驗證,則調用ActionForm的validate()方法.
          ??????4.如果validate()方法返回null或不含ActionMessage的ActionErrors對象,則表示成功.失敗則返回input頁面
          ??????5.根據ActionMapping包含的映射信息,查找及新建Action對象,然后調用該對象的execute()方法.
          ??????6.Action對象的execute()返回一個ActionForward對象,然后由ActionServlet轉發客戶請求給ActionForward中指向的JSP組件
          ??????7.由該JSP生成網頁以響應客戶請求.

          ?

          i am ddm

          主站蜘蛛池模板: 和静县| 富宁县| 酉阳| 惠来县| 南华县| 武鸣县| 乐平市| 晋城| 万宁市| 喀什市| 郑州市| 青海省| 霍城县| 商城县| 大姚县| 克拉玛依市| 张家川| 林甸县| 嘉峪关市| 吉木乃县| 昌邑市| 定远县| 安陆市| 邹城市| 平远县| 汤阴县| 睢宁县| 墨江| 南华县| 常宁市| 开封县| 青龙| 富民县| 射阳县| 句容市| 柞水县| 宁国市| 水城县| 手游| 资源县| 玛纳斯县|