深入淺出Struts2+Spring+Hibernate框架 -开发者知识库

深入淺出Struts2+Spring+Hibernate框架 -开发者知识库,第1张

一、深入淺出Struts2

  • 什么是Struts2?

    struts2是一種基於MVC的輕量級的WEB應用框架。有了這個框架我們就可以在這個框架的基礎上做起,這樣就大大的提高了我們的開發效率和質量,為公司節省了不少的人力成本。

  • 為什么使用Struts2?

    struts2實現了視圖與業務應用邏輯的解耦(軟件工程的高內聚,低耦合原則)

    在Model 1時代,開發web項目我們都是在JSP里寫入處理業務邏輯的JAVA代碼,尤其像涉及到數據庫和頁面form表單數據之間交互的時候,每次都要寫連接、查詢、增加、修改、刪除等數據庫代碼。有各種如HTML與Java,JavaScript在一個頁面的,可讀性差,重復,多余,耦合,性能差,不易維護等各種問題。讓我們觀察model1與model2的不同:

深入淺出Struts2+Spring+Hibernate框架 -开发者知识库,第2张

                                                                    model 1的程序流程

 

     到Model2時代,JSP不再承擔控制器的責任。它僅僅是表現層角色,僅僅用於將結果呈現給客戶,JSP頁面的請求與Servlet(控制器)交互,而Servlet負責與后台 的Javabean通信。在Model2模式下,模型(Model)由JavaBean充當,視圖(View)由JSP頁面充當,而控制器(Controller)則由Servlet充當,Model2模式也叫“MVC模式”。

深入淺出Struts2+Spring+Hibernate框架 -开发者知识库,第3张

                        model 2 程序流程

 

       在后來開發者根據Model2模式開發出了一個框架,那就是我們現在用的Struts2。控制器(Contoller)由FilterDispather充當,模型(Model)由Action充當,視圖(View)由Result來充當,這樣實現了與Servlet API的解耦,使得ACtion的單元測試更加簡單,而且強大的類型轉換也使得我們少做了很多重復的工作。下圖是Struts2 MVC結構:                    

 深入淺出Struts2+Spring+Hibernate框架 -开发者知识库,第4张

  Struts2的請求周期:

    1、客戶端初始化一個指向Servlet容器(例如Tomcat)的請求

    2、這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其他框架的集成很有幫助,例如:SiteMesh Plugin) 

    3、接着FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請是否需要調用某個Action 

       FilterDispatcher是控制器的核心,就是mvc中c控制層的核心。下面粗略的分析下我理解的FilterDispatcher工作流程和原理:FilterDispatcher進行初始化並啟用核心doFilter

   4、如果ActionMapper決定需要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy 

    5、ActionProxy通過ConfigurationManager詢問框架的配置文件,找到需要調用的Action類 ,這里,我們一般是從struts.xml配置中讀取。

    6、ActionProxy創建一個ActionInvocation的實例。

    7、ActionInvocation實例使用命名模式來調用,在調用Action的過程前后,涉及到相關攔截器(Intercepter)的調用。

 

  • Struts2的兩種配置方式

    配置就像程序的影子,與程序總是與影隨行。大部分框架技術,配置總是作為其中重要的組成部分,在框架的運行中發揮作用。聲明應用程序有兩種不同的方式,XML和注解的方式。

XML配置方式

struts.xml的配置

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"
>
<!-- 上面的頭注意版本,從樣例里復制過來 -->
<struts>
<constant name="struts.objectFactory" value="spring"></constant>

<package name="mypackage" extends="struts-default">
<action name="myNews6Action_*" class="myNews6Action" method="{1}">
<result name="success">/WEB-INF/jsp/index.jsp</result>
<result name="deleteok">/WEB-INF/jsp/ok.jsp</result>
<result name="deleteon">/WEB-INF/jsp/error.jsp</result>
</action>
</package>
</struts>

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复