1. 程式人生 > >對servlet,springmvc和Struts2的一些比較和看法

對servlet,springmvc和Struts2的一些比較和看法

Tomcat處理一個http請求的過程:http://localhost:8080/test/index.jsp

1. 請求傳送到8080埠,被connector監聽到,建立requestresponse物件用來請求交換資料,並建立新的執行緒處理這個請求

2. Connector將該請求交給它所在的serviceengine處理,並等待迴應

3. Engine根據請求的URL,匹配相應的虛擬主機

4. 匹配成功後,將請求交給此虛擬主機來處理

5. 虛擬主機獲得/test/index.jsp,匹配他所擁有的的context

6. Pathtestcontext獲得index.jsp,在裡面找到*.JSPjspservlet

7. 呼叫jspservletdoget,dopost方法

8. 執行完成後將response返回給engine

9. Engineresponse返回給connector,再返回給客戶端瀏覽器

springMVC分發請求的過程

1. 發起請求到前端控制器

2. 前端控制器查詢handlerMapping查詢handler

3. 控制器呼叫介面卡執行handler

4. Handler處理完成之後會返回modelandview

5. 前端控制器解析modelandview,將其結析為真正的檢視返回view,填充到request作用域中

6. 前端控制器向用戶響應結果

Struts2接收 請求過程

1. 接收http請求,根據請求

URLstruts2攔截器攔截,匹配相應的action

2. 建立該action的代理物件

3. 通過Struts攔截器對action物件屬性進行賦值

4. 呼叫action的相關方法拿到返回結果

5. 通過攔截器將action中的屬性值填寫到模板檔案中

6. response響應給瀏覽器

通過以上servletspringmvcstruts2處理請求方式可以看出,三種處理方式都是通過解析URL,再將解析結果與自身的一個mapping檔案相比較,再將請求交給相應的controllerservlet或者是action來處理,處理完之後,將結果通過JSP或者其他檢視工具裝換傳給瀏覽器的,servlet

Tomcat自帶的請求處理方式,但我們也可以看出,在處理請求的過程中,所有的請求都使用同一個servlet,所以當時用servlet是應該注意儘量不要定義全域性變數,否則會出現執行緒不安全現象的發生,使用struts2時,由於每一個請求都建立了一個action物件,儘管保證了執行緒的安全,但是訪問量過大時,會建立大量的action物件,佔用大量的記憶體,可能會造成記憶體空間不足,springMVCcontroller也是單例物件,根servlet不同的是,他對同一類資源的訪問寫到了同一個controller中,只需要根據方法來執行不同的操作,

servlet中是通過重寫doGet,doPost方法來實現呼叫業務邏輯的(即service層)不同調用,重寫service(),則會將業務邏輯放到servlet中,不會呼叫doGet(),doPost()方法,相對比而言,springmvc提供的方式跟靈活一些,也更加好理解一些

相關推薦

servletspringmvcStruts2一些比較看法

Tomcat處理一個http請求的過程:http://localhost:8080/test/index.jsp1. 請求傳送到8080埠,被connector監聽到,建立request和response物件用來請求交換資料,並建立新的執行緒處理這個請求2. Connecto

SpringMVCStruts2區別比較

view dispatch blog 前端控制器 servlet sdn 對象 del 多例 區別1: Struts2 的核心是基於一個Filter即StrutsPreparedAndExcuteFilterSpringMvc的核心是基於一個Servlet即Dispatch

SpringMVCStruts2比較的優點

我們用Struts2時採用的傳統的配置檔案的方式,並沒有使用傳說中的0配置。spring3 mvc可以認為已經100%零配置了(除了配置spring mvc-servlet.xml外)。 Spri

java中如何使用空參構造方法自動生成不同名字的使用非靜態的屬性靜態屬性有什麽區別原因是什麽?如何理解static關鍵字

區別 關鍵字 內部 方法 屬性 count per setname person 空參構造自動生成對象時,使用非靜態的屬性 代碼: package com.swift; //使用無參構造方法自動生成對象,序號不斷自增 public class Person { p

陣列物件一些自己的看法

演算法使效率變得不同,演算法在陣列上運用的基數很大,陣列與物件之間非常相似的地方就是陣列中的每個元素都對應一個下標,而物件中每個鍵值對是對應的,正因為如此,資料結構也變得清晰,當有等級關係的資料,可以用陣列來儲存,先處理事件n及n的分支,在處理n+1。沒有等級的資料,也就是類

效能特性測試系列1——STL容器QT容器效能相關比較總結

 閒話就不多扯了,本次測試了qt容器,和stl容器相關的效率,增加自己的理解,畢竟耳聽為虛,眼見為實,書和資料怎麼說都只是一個理論,直接測試效能才是王道。 流程  qt,stl容器對應關係對比->橫向比較每個對應關係容器效率->縱向比較

Spring MVCStruts2比較的優點

我們用struts2時採用的傳統的配置檔案的方式,並沒有使用傳說中的0配置。spring3 mvc可以認為已經100%零配置了(除了配置spring mvc-servlet.xml外)。 Spring MVC和Struts2的區別: 1. 機制:spring mvc的

隨筆55 Struts1Struts2的區別對比

tro 輸出 servlet 更強 api port java action 接口 Action 類: ? Struts1要求Action類繼承一個抽象基類。Struts1的一個普遍問題是使用抽象類編程而不是接口,而struts2的Action是接口。 ? Struts

EHCIOHCI的比較區別

  目前專案涉及到了USB裝置,不可避免的涉獵到UHCI OHCI EHCI   那麼它們到底有啥區別呢?如何區分?    什麼是 ehci?什麼是 ohci?就是host controller 的介面.從硬體上來說,usb 裝置要想工

mysql資料庫引擎MyISAMInnoDB的比較使用場合

資料庫中資料管理的一種方式,MySQL支援插入式的儲存引擎,也就是說你同一資料庫中的資料表可以選擇不同儲存引擎 檢視mysql版本 mysql> select version(); +-----------+ | version() | +-----------+

mysql inexists效能比較使用

in 是把外表和內表作hash 連線,而exists是對外表作loop迴圈,每次loop迴圈再對內表進行查詢。一直以來認為exists比in效率高的說法是不準確的。 如果查詢的兩個表大小相當,那麼用in和exists差別不大。 如果兩個表中一個較小,一個是大表,則子查詢

Struts1Struts2的區別對比

Action 類: • Struts1要求Action類繼承一個抽象基類。Struts1的一個普遍問題是使用抽象類程式設計而不是介面。 • Struts 2 Action類可以實現一個Action介面,也可實現其他介面,使可選和定製的服務成為可能。Struts2提供一個

struts3.0的上傳改進struts2--上傳下載

package action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.struts2.ServletActionContext; impor

etcdredis的比較日常使用場景

個人觀點:etcd的紅火來源於kurbernetes用etcd做服務發現,而redis的興起則來源於memcache快取本身的侷限性。 etcd是一種分散式儲存,更強調的是各個節點之間的通訊,同步,確保各個節點上資料和事務的一致性,使得服務發現工作更穩定,本身

findxargsgrep管道的一些深入理解

發送 文件名 rgs rom 輸入 很多 () option 理解 轉自於:http://fatmouse.xyz/2016/05/10/2016-05-10-find-grep-xargs-and-pipe/ 問題 相信大家都知道在目錄中搜索含有固定字符串文件的命令:

1、試程式程序執行緒的慨念功能進行比較

答:程式 是計算機指令的集合它,以檔案的形式儲存在磁碟上。 程序是一個程式在其 自身的地址空間中的一次執行活動。 程序是資源申請、排程和獨立執行的單位,因此,它使用系統中的執行資源,而程式不能申請系統資源,不能被系統排程,也不能作為獨立執行的單位,因此,它不佔系統的執行資源。 執行緒:程序中的一個單一的連續控

【Linux】- findxargsgrep管道的一些理解

問題 相信大家都知道在目錄中搜索含有固定字串檔案的命令: find . -name '*.py' |xargs grep test 剛開始的時候,我不熟悉xargs命令,所以直接使用的命令是: find . -name '*.py' |grep test 結果並不是自己所期望的。

為什麼做java的web開發我們會使用struts2springMVCspring這樣的框架?

  今年我一直在思考web開發裡的前後端分離的問題,到了現在也頗有點心得了,隨著這個問題的深入,再加以現在公司很多web專案的控制層的技術框架由struts2遷移到springMVC,我突然有了一個新的疑問無法得到正確的解釋,為什麼我們現在做java的web開發,會選擇struts2或者springMVC這樣

初識利用Servlet獲取顯示頁面提交的資料以及MySQL資料庫的簡單操作 7.04

Servlet:web伺服器端的程式設計技術。是繼承了javax.servlet.http.HttpServlet類的Java類。由支援servlet的web伺服器(tomcat)呼叫和啟動執行。一個

SpringMVCStruts2的執行流程面試中簡單回答

1、SpringMVC的執行流程: 傳送請求——>DispatcherServiet捕獲——>HandlerMapping查詢Handler返回HandlerExecutionChain——>執行Handler返回ModelAndView ——>選擇