? ? Struts框架在java web開發中很常用。最近我也在逐步摸索和學習。今天就來說說Struts的處理流程。
? ? 先來一幅Struts工作原理圖:

? ? 從上面這幅圖,我們可以清楚的看到Struts的實現原理:
- 客戶端的每個請求,都會首先到達ActionServlet,截取url;
- ActionServlet會根據截取的url,在struts-config.xml的action-mapping中,找到對應action的配置信息,然后讀取到ActionMapping中;
- ActionServlet拿到ActionMapping中的name屬性值,再從form-beans中找到對應的ActionForm,反射出實例來。將頁面表單內容通過自動轉換器轉換后,放入到這個ActionForm中,傳遞給action處理類;
- Action處理類拿到ActionForm,即可獲取表單數據。通過ActionMapping則可以實現頁面的轉發。
? ? 上面就是Struts工作原理的基本流程。通過斷點調試struts,詳細解釋一下運行的流程:

? ? 通過查看代碼得知,
- ActionServlet是通過process()方法來處理全部邏輯的。
- action配置信息并不是全部加載,而是找與截取的url對應的action配置信息,加載到ActionMapping中,也就是一個action對應一個ActionMapping。
- ActionForm也并不是每次都反射,而是會先判斷一下request或者session中是否已經創建,如果沒有,則創建一次,并保存在request或者session中。
- Action處理類同樣是先檢查是否已經創建過,然后在操作。而且struts1中的Action創建過程存在線程安全問題。
- ActionServlet根據Action返回的ActionForward,調用processForwardConfig,進行頁面導航。
? ??
- 前言
- Struts 簡單小結
- 深入淺出了解Struts的處理流程(有圖有真相)
- struts標簽+jstl標簽之國際化實例
- 一口一口吃掉Hibernate(二)——別被世俗蒙蔽了雙眼:Hibernate中Session之get和load方法的真正區別
- 一口一口吃掉Hibernate(一)——使用SchemaExport生成數據表
- 一口一口吃掉Hibernate(三)——Hibernate給表和字段設置前后綴及分隔符
- 一口一口吃掉Hibernate(四)——多對一單向關聯映射
- 一口一口吃掉Hibernate(五)——一對多單向關聯映射
- 一口一口吃掉Hibernate(六)——多對多關聯映射
- 一口一口吃掉Hibernate(七)——繼承映射
- 一口一口吃掉Hibernate(八)——Hibernate中inverse的用法
- 一覽Spring全貌
- 包辦婚姻的Spring IoC
- 3幅圖讓你了解Spring AOP
- Spring Aop實例之xml配置
- Spring Aop實例之AspectJ注解配置