Struts2的工作原理及工作流程

?

眾所周知,Struts2是個非常優秀的開源框架,我們能用Struts2框架進行開發,同時能 快速搭建好一個Struts2框架,但我們是否能把Struts2框架的工作原理用語言表達清楚,你表達的原理不需要說出底層是怎么實現的,我估計大多數 的人也聽不懂。當面試官問到我們Struts2的工作原理時,我們該怎么回答這個問題呢?回答什么才能讓自己說的與眾不同,先看看其他朋友總結的

一 工作原理

在Struts2框架中的處理大概分為以下幾個步驟?
1 客戶端初始化一個指向Servlet容器(例如Tomcat)的請求?
2 這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對于Struts2和其他框架的集成很有幫助,例如:SiteMesh Plugin)?
3 接著FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請是否需要調用某個Action?
4 如果ActionMapper決定需要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy?
5 ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調用的Action類?
6 ActionProxy創建一個ActionInvocation的實例。?
7 ActionInvocation實例使用命名模式來調用,在調用Action的過程前后,涉及到相關攔截器(Intercepter)的調用。?
8 一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果通常是(但不總是,也可 能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2 框架中繼承的標簽。在這個過程中需要涉及到ActionMapper?

二 工作流程

1、客戶端瀏覽器發出HTTP請求.
2、根據web.xml配置,該請求被FilterDispatcher接收
3、根據struts.xml配置,找到需要調用的Action類和方法, 并通過IoC方式,將值注入給Aciton
4、Action調用業務邏輯組件處理業務邏輯,這一步包含表單驗證。
5、Action執行完畢,根據struts.xml中的配置找到對應的返回結果result,并跳轉到相應頁面
6、返回HTTP響應到客戶端瀏覽器

看到網友的對Struts2的原理總結,我自己也總結以便后續的面試,以下是我的疑問

1、客服端發起一個請求,通過HTTP協議指向Tomcat容器,tomcat拿到請求她干了什么?
2、我們web.xml配置
1   <filter>
2         <filter-name>struts2</filter-name>
3         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
4 </filter>
5  <filter-mapping>
6         <filter-name>struts2</filter-name>
7         <url-pattern>/*</url-pattern>
8 </filter-mapping>

?


我們從web配置文件中可以看到org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,這個Filter這個類有什么用?
這個?/*?是攔截所有的請求,他攔截了請求做了什么處理? <url-pattern>/*</url-pattern>
3.我們struts.xml配置
<struts><package name="default" namespace="/" extends="struts-default"><action name="hello"><result>/Hello.jsp</result></action></package>

?

</struts>
誰負責根據struts.xml配置,找到需要調用的Action類和方法呢?
4。最后根據struts.xml中的配置找到對應的返回結果result,在返回HTTP響應到客戶端瀏覽器


結束語 我覺的要說清楚Struts原理,不光死記硬背資料上的寫的原理,還要帶著這些問題去做總結。

轉載于:https://www.cnblogs.com/printN/p/6501308.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456301.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456301.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456301.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

正則表達式采坑

[a-zA-Z]匹配大小寫字符 \w 匹配字母、數字、下劃線 {5,7} 表示前面的字符&#xff08;即&#xff1a;\w&#xff09;必須至少出現 5 次最多出現 7 次. 合起來就是 >6 少于8個的字符 [a-zA-Z]\w{6,12} --------------》》 就是要輸入七位數到十三位&#x…

easyui動態顯示和隱藏表頭

為什么80%的碼農都做不了架構師&#xff1f;>>> var _bt{date:日期,subtime:填寫時間,xz:小組,uname:操作人,qdbh:渠道編號,mt:媒體,zh:賬戶,sjd:時間段,tfwz:投放位置,tfh:投放號,td:團隊,sjje:實際金額,jxs:進線數,cb:成本,yxzyjx:有效資源進線,yxzyl:有效資源率…

物聯網

如果要說未來什么技術正在或將徹底改變人類生活、工作和娛樂的方式&#xff0c;那必須是物聯網。小到各種可穿戴產品&#xff0c;大到汽車、工廠和樓宇&#xff0c;物聯網能使一切設備互聯并具備智慧。物聯網也正改變著產業的格局&#xff0c;索尼、夏普、東芝等日本傳統電子設…

理解:復雜度是O(log^n) 就是二分法

冒昧問一下&#xff0c;為什么二分法查找的復雜度是O(log^n)&#xff1f;這是怎么計算的&#xff1f; 你要從1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#xff0c;7&#xff0c;8里面找到3&#xff0c;分成幾步&#xff1f; 第一步&#xff0c;…

淺談管理數據平臺的一些想法

前言&#xff1a; 對于任何使用大數據技術的公司來說&#xff0c;大數據平臺特別是Hive來說&#xff0c;維護其高效快速的運行&#xff0c;對整個公司的運作來說至關重要。比如說&#xff1a;某個調度任務失敗了造成業務部門的某些報表無法正常產出&#xff1b;hive平臺最近速…

MongoDB誤刪表恢復

一、場景描述公司某工程師執行db.giveget_card.drop()&#xff0c;誤將線上表刪除。幸好每天都有做備份&#xff0c;這個時候就體現了備份的重要性了&#xff0c;哈哈哈。。。二、模擬故障過程備份數據大小&#xff1a;rs_test01:PRIMARY> use ycsb switched to db ycsb rs_…

linux下kill某個應用

linux命令行與桌面切換快捷鍵CtrAltF1&#xff0c;CtrAltF7 ps -e | grep abc sudo kill xyz 轉載于:https://www.cnblogs.com/cj2014/p/6512354.html

flask中數據庫的基本操作-增刪改查【備忘】

1.增加數據&#xff08;就相當于增加一個實例對象&#xff09; user1 User(namelong,email1006550026qq.com,password123456,role_id1) db.session.add(user1) db.session.commit() 2.修改數據 修改用戶表里面的name為long的姓名為&#xff1a;fang 首先查詢到名為…

兩個文件比較之comm命令

comm命令可用于兩個文件之間的比較。它有很多不錯的選項可用來調整輸出&#xff0c;以便我們執行交集、求差&#xff08;difference&#xff09;以及差集操作。? 交集&#xff1a;打印出兩個文件所共有的行。? 求差&#xff1a;打印出指定文件所包含的且互不相同的那些行。?…

【轉】error while loading shared libraries: xxx.so.x 錯誤的原因和解決辦法

原博客地址&#xff1a;http://www.cnblogs.com/Anker/p/3209876.html#undefined error while loading shared libraries: xxx.so.x" 錯誤的原因和解決辦法 今天在執行一個protobuf程序時&#xff0c;提示error while loading shared libraries: libprotobuf.so.8: cannot…

Flask學習記錄之Flask-SQLAlchemy

Flask-SQLAlchemy庫讓flask更方便的使用SQLALchemy,是一個強大的關系形數據庫框架,既可以使用orm方式操作數據庫,也可以使用原始的SQL命令. Flask-Migrate 是一個數據遷移框架,需要通過Flask-script庫來操作. 一.配置Flask-SQLAlchemy 程序使用的數據庫地址需要配置在SQLALCH…

Postico —— OS X 上的免費 PostgreSQL 客戶端

Postico 是 OS X 下的一個 PostgreSQL 客戶端管理工具。要求 OS X 10.8 或者更新版本。 文章轉載自 開源中國社區 [http://www.oschina.net]

hdu 1760 A New Tetris Game(搜索博弈)

題目鏈接&#xff1a;hdu 1760 A New Tetris Game 題意&#xff1a; 給你一個矩陣&#xff0c;0表示可以放格子&#xff0c;現在給你2*2的格子&#xff0c;lele先放&#xff0c;問是否能贏。 題解&#xff1a; 爆搜。具體看代碼 1 #include<bits/stdc.h>2 #define F(i,a,…

flask-restful接口

同flask一樣&#xff0c;flask-restful同樣支持返回任一迭代器&#xff0c;它將會被轉換成一個包含原始 Flask 響應對象的響應&#xff1a; class ArticleApi(Resource):def get(self):return {"hello":"world"},201&#xff0c;{"course":&quo…

如約而至 Nexus 6 的 Android 7.1.1 已經上線

經過近一個月的等待&#xff0c;Google 已正式為 Nexus 6 推送 Android 7.1.1 更新&#xff0c;本次更新版本號為 N6F26Q&#xff0c;可以點擊這里下載完整系統鏡像或者下載 OTA 升級包。 相比其他 Nexus 和 Pixel 設備&#xff0c;Nexus 6 已經發布了超過兩年之久&#xff0c;…

關于jedis2.4以上版本的連接池配置,及工具類

jedis.propertise 注意以前版本的maxAcitve和maxWait有所改變&#xff0c;JVM根據系統環境變量ServerType中的值 取不同的配置&#xff0c;實現多環境&#xff08;測試環境、生產環境&#xff09;集成。 redis.pool.maxTotalredis.pool.maxActive.${ServerType} redis.pool.max…

關于response格式轉換

調用圖靈機器人api實例&#xff1a; class RobotHandler(WebSocketHandler):def open(self):# print("WebSocket opened",self.request.remote_ip)robot_set.add(self)# 獲取websocket的發過來的信息def on_message(self, message):urlhttp://openapi.tuling123.com/…

微軟老兵 Antoine LeBlond 將正式離職

Antoine LeBlond (安東勒布朗)是微軟眾高管之一,他在微軟工作將近25年之久,然而他將在下周一,也就是他在微軟的第9000天正式離職. 在發給微軟眾同事的郵件中,勒布朗表示他希望"探索微軟之外的世界". 勒布朗在微軟Office部門度過了他在微軟的前20年時光,并與前微軟高管…

轉載——java synchronized詳解

文章來源&#xff1a;http://www.cnblogs.com/GnagWang/archive/2011/02/27/1966606.html轉載于:https://www.cnblogs.com/insist8089/p/6515885.html

Django中的F對象和Q對象

F對象 可以獲取到自己的屬性值實現自己的屬性自己的屬性關聯的復雜條件支持運算 Q對象 Q對象實際上是對條件的一個封裝封裝后支持邏輯運算與或非 &|~ 支持嵌套 例子 from django.db.models import Max, Avg, F, Q from django.http import HttpResponse from django.s…