亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java Web Framework綜述

2019-11-18 11:30:34
字體:
來源:轉載
供稿:網友

java Web Framework綜述

0.簡介

本文介紹Java Web Framework的基本工作原理,和一些常用的開源Web MVC Framework(Struts, Web Work, Tapestry, Echo, JSF, Maverick, SPRing MVC, Turbine, Cocoon, Barracuda)。

Web開發的最重要的基本功是HTTP;Java Web開發的最重要的基本功是Servlet Specification。HTTP和Servlet Specification對于Web Server和Web Framework的開發實現來說,是至關重要的協議規范。

應用和剖析開源Web Framework,既有助于深入把握HTTP & Servlet Specification, 也有助于了解一些現代的B/S Web框架設計思想,如MVC,事件處理機制,頁面組件,IoC,AOP等。在這個現代化的大潮中,即使Servlet規范本身也不能免俗,不斷引入Filter、Listener等現代框架設計模式。同是Sun公司出品的JSF更是如此。

關于MVC模型、項目簡介、配置文件、入門示例等基礎知識,網上已經有大量的重復資料信息,本文不再贅述。

文中會提到一些相關的開源項目,和一些編程思想,如有需要,可以用相關的要害字在網上搜索,獲取基本的背景知識。

本文力圖言簡意賅,突出重點。著重描述其他資料沒有提到、或很少提到的較重要內容,如運行原理、主流用法,相關知識,要害特性等。

1. Java Web程序工作原理

Tomcat的Server.xml文件中定義了網絡請求路徑到主機本地文件路徑的映射。比如,<context path="/yourapp" docBase="yourapp_dir/webapp"/>

 

我們來看一下,一個HTTP Request-Response Cycle的處理過程。

HTTP Request URL一般分為三段:host, context, path。

如http://yourhost/yourapp/en/index.Html這個URL,分為host=yourhost, context=yourapp, path=en/index.html三段。其中,Context部分由request.getContext()獲得,path部分由request.getServletPath()獲得(返回結果是“/en/index.html”)。

yourhost主機上運行的Tomcat Web Server接收到這個URL,根據Context定義,把yourapp這個網絡路徑映射為yourapp_dir/webapp,并在此目錄下定位en/index.html這個文件,返回到客戶端。

 

假如我們這個URL更換為http://yourhost/yourapp/en/index.jsp,這個時候Tomcat會試圖把yourapp_dir/webapp/en/index.jsp文件編譯成Servlet,并調用運行這個Servlet。

我們再把這個URL更換為http://yourhost/yourapp/en/index.do。

注重,戲劇化的事情就發生在這個時候,Servlet規范中最重要的類RequestDispatcher登場了。RequestDispatcher根據WEB-INF/web.xml配置文件的定義,調用對應的Servlet來處理en/index.do這個路徑。

假設web.xml里面有這樣的定義。

  <servlet>

    <servlet-name>DispatchServlet</servlet-name>

    <servlet-class>yourapp.DispatchServlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>DispatchServlet</servlet-name>

    <url-pattern>*.do</url-pattern>

  </servlet-mapping>

那么,RequestDispatcher會調用yourapp.DispatchServlet類處理這個路徑。

假如web.xml沒有定義對應en/index.do這個路徑的Servlet,那么Tomcat返回“您請求的資源不存在”。

RequestDispatcher用于Web Server中,也可以用于應用程序中進行處理轉向,資源定位。比如,我們在處理en/index.do的代碼中調用,

request.getRequestDispatcher(“cn/index.jsp”).forward(request, response), 就可以轉交另外的資源cn/index.jsp來處理。

 

幾乎所有的Web Framework都需要定義自己的Dispatch作用的Servlet,并調用RequestDispatcher進行轉向處理。

閱讀Web Framework源代碼,有兩條主要線索,(1)根據web.xml找到對應的Servlet類;(2)搜索包含“RequestDispatcher”詞的代碼文件。

 

我們看到,request, response  這兩個參數,被RequestDispatcher在各種Servlet之間傳來傳去(JSP也是Servlet)。所以,request的setAttribute()和getAttribute()方法是Servlet之間傳送數據的主要方式。

在MVC結構中,一般的處理流程如下:

處理HTTP Request的基本單位一般稱為Action,是一個比Servlet輕量得多的接口定義,通常只有一兩個方法,如execute(perform), validate等。

我們知道,URL->Servlet映射,定義在Web.xml配置文件里,但MVC框架通常會有另外一個定義URL-> Action映射的配置文件。

入口Dispatcher Servlet根據URL -> Action的映射關系,把請求轉發給Action。

Action獲得輸入參數,調用商業邏輯,并把結果數據和View標識給(Model & View)返回給Dispatcher Servlet。

Dispatcher Servlet根據這個View 標識,定位相應的View Template Path,把處理轉交給View(JSP +TagLib, Velocity, Free Marker, XSL等)。

View一般通過request.getAttribute()獲得結果數據,并顯示到客戶端。至于是誰把結果數據設置到request.attribute里面,有兩種可能:Action或Dispatcher Servlet。

2. Struts

http://struts.apache.org/

Struts是目前用戶群最大、開發廠商支持最多的開源Web Framework。

Struts勞苦功高,為普及MVC框架作出了不可磨滅的貢獻。顯赫的聲望,趨于老化的厚重結構,令Struts成為很多現代Web Framework參照、挑戰的目標。

 

Struts應用主要包括3件事情: 配置struts-config.xml文件,實現Action類,實現View;還有一些高級擴展用法。下面分別講述。

 

1. 配置struts-config.xml文件:

Struts支持多級配置文件,具體用法和限制,詳見Struts文檔。這里只討論struts-config.xml主流配置的內容。:-)

 

(1) URL Path到Action的映射。

如<action path="/LogonSubmit" type="app.LogonAction" ... />

 

Struts的入口Servlet是ActionServlet。

ActionServlet需要此信息把URL Path調用對應的Action類處理。

在Struts運行期間,一個URL Path,只存在一個對應的Struts Action實例。所有的該URL Path的請求,都經過這同一個Struts Action實例處理。所以Struts Action必須線程安全。

想想看,其實這個要求并不過分,Action只是一個處理程序,不應該保存跨HTTP請求的狀態數據,按理來說,也應該做成線程安全的。

 

(2) Template Name到View Template Path的映射。

<forward name="sUCcess" path="/pages/Welcome.jsp"/>

 

Action類返回一個Template Name,ActionServlet根據這個Template Name獲得對應的View Template Path,然后調用

request.getRequestDispatcher(“View Template Path”),把處理轉向路徑對應的Servlet。在這個例子中,是轉向/pages/Welcome.jsp編譯后的Servlet。

 

我們來看一個一個Velocity的例子。

<include name="success" path="/pages/Welcome.vm"/>

web.xml的定義如下

<servlet>

  <servlet-name>velocity</servlet-name>

<servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>

</servlet>

<servlet-mapping>

  <servlet-name>velocity</servlet-name>

  <url-pattern>*.vm</url-pattern>

</servlet-mapping>

 

這時,request.getRequestDispatcher(“/pages/Welcome.vm”)會調用VelocityViewServlet,由VelocityViewServlet負責裝并驅動運行/pages/Welcome.vm這個模板文件。

這里面有一個問題,假如調用的是DispatchRequester.include()

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品av网站| 国产91在线播放精品91| 日韩在线视频网| 国产精品国产三级国产aⅴ9色| 国自产精品手机在线观看视频| 啪一啪鲁一鲁2019在线视频| 精品欧美国产一区二区三区| 国产精品一区专区欧美日韩| 91爱视频在线| 精品国产91乱高清在线观看| 国产精品第七十二页| 国产97人人超碰caoprom| xxxxx成人.com| 久久久久亚洲精品成人网小说| 国产精品一区二区电影| 欧美劲爆第一页| 日韩av在线影视| 欧美激情三级免费| 国产91av在线| 91影视免费在线观看| 日韩乱码在线视频| 一区二区欧美在线| 九色91av视频| 亚洲亚裔videos黑人hd| 亚洲人成亚洲人成在线观看| 国产欧美精品在线| 91久久精品国产91久久性色| 欧美伦理91i| 日韩精品中文字| 亚洲免费中文字幕| 日韩av影视在线| 欧美专区在线视频| 92福利视频午夜1000合集在线观看| 国产精品999| 日韩av色在线| 欧美日韩国产色视频| 国产成人久久精品| 久久综合网hezyo| 欧洲s码亚洲m码精品一区| 免费不卡在线观看av| 日韩欧美在线视频| 国产aⅴ夜夜欢一区二区三区| 欧美成aaa人片在线观看蜜臀| 国产精品爱啪在线线免费观看| 亚洲男人天堂手机在线| 国产精品美腿一区在线看| 国产精品久久国产精品99gif| 日韩精品一区二区三区第95| 国内精品视频一区| 国产乱肥老妇国产一区二| 国产精品吴梦梦| 国产成人在线一区二区| 国产成人精品视频| 国产精品电影网| 久久久久久久一区二区| 国产成人一区二区| 国产精品久久77777| 欧美电影在线观看| 日韩女优在线播放| 97国产suv精品一区二区62| 深夜精品寂寞黄网站在线观看| 国产一区私人高清影院| 久久久久久999| 亚洲国产精品大全| 午夜精品一区二区三区在线视| 久久在线免费视频| 亚洲一区二区久久| 国产日韩在线看片| 亚洲成人av在线| 亚洲性夜色噜噜噜7777| 欧美亚洲国产成人精品| 日韩欧美国产一区二区| 狠狠色狠狠色综合日日小说| 亚洲一区二区三区xxx视频| 久久电影一区二区| 久久成人18免费网站| 综合国产在线观看| 欧美日韩国产成人在线观看| 国产精品自拍偷拍| 国产精品白嫩初高中害羞小美女| 久久精品99国产精品酒店日本| 久久久亚洲天堂| 日韩中文在线中文网在线观看| 日韩经典一区二区三区| 亚洲综合社区网| 亚洲第一天堂无码专区| 亚洲最新中文字幕| 国产成人av网| 日韩在线免费观看视频| 91中文精品字幕在线视频| 国产在线日韩在线| 丝袜亚洲另类欧美重口| 91国内在线视频| 欧美日韩综合视频| 亚洲va欧美va国产综合剧情| 久久综合久中文字幕青草| 久久天天躁日日躁| 在线播放国产一区二区三区| 黑人精品xxx一区一二区| 日韩免费电影在线观看| 国产精品草莓在线免费观看| 狠狠做深爱婷婷久久综合一区| 欧美激情综合亚洲一二区| 国产日韩在线免费| www国产精品com| 色七七影院综合| 国产精品久久久久久超碰| 日韩欧美亚洲一二三区| 欧美国产精品va在线观看| 亚洲sss综合天堂久久| 国产日韩欧美综合| 亚洲美女在线观看| 欧美亚洲午夜视频在线观看| 亚洲女性裸体视频| 乱亲女秽乱长久久久| 亚洲国产成人91精品| 日韩av网址在线观看| 国产精品久久久久7777婷婷| 黑人巨大精品欧美一区二区免费| 亚洲国产精品久久久久久| 色哟哟网站入口亚洲精品| 色樱桃影院亚洲精品影院| 国产亚洲一区精品| 精品国产乱码久久久久酒店| 久久久精品国产网站| 国产一区二区三区高清在线观看| 欧美性xxxxxxx| www.美女亚洲精品| 日韩欧美国产黄色| 91精品在线播放| 亚洲性生活视频在线观看| 国产成人精品优优av| 一区二区三区美女xx视频| 911国产网站尤物在线观看| 日韩av最新在线| 成人激情春色网| 久久久久久香蕉网| 亚洲人成在线观| 欧美裸体xxxxx| 韩国国内大量揄拍精品视频| 国产精品一区二区久久| 亚洲丁香久久久| 久久免费精品日本久久中文字幕| 欧美国产日韩xxxxx| 91免费看片在线| 欧美在线一区二区视频| 91久久精品美女高潮| 欧美日韩一区免费| 亚洲精品美女久久| 深夜福利一区二区| 欧美性猛交xxxx乱大交极品| 亚洲欧美激情一区| 日本乱人伦a精品| 久久伊人精品视频| 亚洲欧美激情另类校园| 久久精视频免费在线久久完整在线看| 欧美日韩国产丝袜另类| 欧美性xxxx在线播放| 亚洲天堂免费视频| 在线精品播放av| 不卡在线观看电视剧完整版| 91免费版网站入口| 欧美天天综合色影久久精品| 国产成人精品在线|