Struts與Java-Web應用簡介

Struts與Java-Web應用簡介
2007年04月12日 星期四 15:31

引言
程序員有兩個通病:要麼成天張口便是一堆似懂非懂高深玄乎的專用名詞;亦或就是隻顧埋頭於漫無邊際的代碼中,這爲程序員的兩大忌。故我將陸續寫一些類似本文既不追捧時髦名詞也不侷限代碼的基礎性文章。

1.Struts 介紹
Jakarta-Struts是Apache軟件組織提供的一項開放源代碼項目。它爲Java Web應用提供了模型-視圖-控制器(MVC)框架,尤其適用於開發大型可擴展的J2EE Web應用。Struts爲Web應用提供了一個通用的框架,使得開發人員可以把精力集中在如何解決實際業務問題上。此外,Struts框架提供了許多可擴展和定製的地方,使得應用程序可以方便的擴展框架,來更好的適應用戶的實際需求。但值得注意的是現在的大型軟件項目均並非純粹的Struts應用,而是集成了多個開源項目的複雜平臺。(比如:Struts、Webwork、Spring、iBatis、Log4j、Hibernate等等)

1.1.Struts實現的MVC機制Struts實質上就是在JSP Model2的基礎上實現的一個MVC框架。在Struts框架中,模型由實現業務邏輯的JavaBean或EJB組件構成,控制器由ActionServlet和Action類來實現,視圖由一組JSP文件和ActionFormBean組成。

1.2.Struts的工作流程
1.2.1.檢索和用戶請求匹配的ActionMapping實例,如果不存在,就返回用戶請求路徑無效信息。1.2.2.如果ActionForm實例不存在,就創建一個ActionForm對象,把客戶提交的表單數據保存到ActionForm對象中。
1.2.3.根據配置信息決定是否需要表單驗證。如果需要驗證就調用ActionForm的validate()方法。1.2.4.ActionServlet根據ActionMapping實例包含的映射信息決定將請求轉發給哪個Action,並調用它的execute()方法。

2.Java Web應用概述
Java Web應用的核心技術是Java Server Page和Servlet。

2.1.Servlet組件
Servlet在Web應用中擔任主要角色。Servlet運行於Servlet容器中,可以被Servlet容器動態加載,來擴展服務器的功能,並提供特定的服務。Servlet按照請求/響應的方式工作。在Struts框架中控制器組件就是由Servlet來構成的。當用戶請求訪問某個Servlet時,Servlet容器將創建一個ServletRequest對象和一個ServletResponse對象。在ServletRequest對象中封裝了用戶請求信息,然後Servlet容器把ServletRequest對象和ServletResponse對象傳遞給用戶Servlet,Servlet把響應結果寫到ServletResponse中,然後由Servlet容器把響應結果傳遞給用戶。在Java Servlet API中,有一下幾個比較主要的類:
2.1.1.HttpServletRequestServlet容器把HTTP請求信息保存在HttpServletRequest對象中,Servlet組件從Request對象中讀取這些信息。此外,HttpServletRequest還可以存放request範圍內的共享數據。
2.1.2.HttpServletResponse用於生成並返回HTTP響應結果。2.1.3.HttpSessionServlet容器爲每個HTTP會話創建一個HttpSession實例,HttpSession可以存放Session範圍內的共享數據。2.1.4.ServletContextServlet容器爲每一個Web應用創建一個ServletContext實例,ServletContext可以存放Application範圍的共享數據。

2.2.JSP組件
在傳統的HTML文件中加入Java程序片斷和JSP標籤,就構成了JSP網頁(組件)。當JSP容器接收到Web用戶的一個JSP文件請求時,她會對JSP文件進行語法分析並生成Java Servlet源文件,然後對其編譯。一般情況下,Servlet源文件的生成和編譯僅在初次調用JSP文件時發生。儘管JSP在本質上就是Servlet,但這兩者的創建方式不一樣。Servlet完全由Java程序代碼構成,擅長於流程控制和事務處理;JSP有HTML代碼和Java程序片斷以及JSP標籤構成,可以方便的編寫動態網頁。在Struts框架中,JSP位於MVC設計模式的視圖層,而Servlet位於控制層。

2.3.共享數據在Web應用中的範圍
在Web運用中如果某種數據需要被多個Web組件共享,可以把這些共享數據存放在特定的範圍內。共享數據有四種存在範圍:
2.3.1.Page共享數據的有效範圍是用戶請求訪問的當前JSP網頁。
2.3.2.Request共享數據的有效範圍爲“用戶請求訪問的當前Web組件,以及和當前Web組件共享同一個用戶請求的其他Web組件”。如果擁護請求訪問的是JSP網頁,那麼該JSP網頁的<%@include>指令以及標記包含的其他JSP文件也能訪問共享數據。
2.3.3.Session共享數據存在於整個HTTP會話的生命週期內。
2.3.4.Application共享數據存在於整個Web運用的生命週期,Web應用中的所有Web組件都能共享它。共享數據實際上存放在ServletContext對象中。

2.4.Web組件的三種關聯關係Web應用的一大特徵就是他們能彼此鏈接和聚合信息資源。Web組件之間存在着三種關聯關係:請求轉發、URL重定向、包含。
2.4.1.請求轉發請求轉發允許把請求轉發給同一應用程序中的其他Web組件。這種技術通常應用於Web應用控制層的Servlet流程控制器,他檢查HTTP請求數據,並將請求轉發到合適的目標組件,目標組件執行具體的請求處理操作,並生成響應結果。Servlet類使用javax.servlet.RequestDispatcher.forward()方法來轉發所收到的HTTP請求。對於請求轉發,轉發的源組件和目標組件共享request範圍內的共享數據。
2.4.2.請求重定向請求重定向類似於請求轉發,但也有一些主要區別:
2.4.2.1.Web組件可以將請求重定向到任一URL,而不僅僅是同一應用中的URL.
2.4.2.2.重定向的源組件和目標組件之間不共用同一個HttpServletRequest對象,因此不能共享request範圍內的共享數據。
2.4.3.包含包含行關係允許一個Web組件聚集來自同一個應用中其他Web組件的輸出數據,並使用被聚集的數據來創建結果。之中技術通常被用於模板處理器,他可以控制網頁的佈局。

3.MVC設計模式
MVC是Model-View-Controller的簡稱,即模型-視圖-控制器。
3.1.視圖視圖是用戶看到並與之交互的界面。視圖向用戶顯示並接收相關的數據,但它並不參與任何的實際業務處理。
3.2.模型模型是應用程序的主體部分。模型表示業務數據和業務邏輯,一個模型能爲多個視圖提供數據,大大提高了組件的可重用性。
3.3.控制器控制器接受用戶的輸入並調用模型和視圖去完成用戶的需求。當Web用戶提交HTML表單時,控制器接收請求並調用相應的模型組件去處理請求,然後調用相應的視圖來現實模板返回的數據。
3.4.MVC處理過程總結一下:首先,控制器接受用戶的請求,並決定應該調用哪個模型來處理;然後模型根據業務邏輯進行相應的處理,並返回數據;最後控制器調用相應的視圖來格式化模型返回的數據,並通過視圖呈現給用戶。
3.5.MVC的優點
3.5.1.多個視圖能夠共享一個模型。
3.5.2.模型是自包含的,與控制器和視圖保持相對獨立,所以可以方便的改變應用程序的數據層和業務規則。
3.5.3.控制器提高了應用程序的靈活性和可配置性。

4.結束語
在基於J2EE的MVC設計模式真可謂是百花齊放,不斷涌現出許多開源項目。Struts實屬一個MVC的經典實現,而且Struts後面有許多的資源,討論組,成功的經典項目等,因此在我們的項目中使用Struts框架除了能夠實現MVC以外還可以有效降低項目風險和開發成本。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章