日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从web层运作流程认识Struts2

發布時間:2023/12/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从web层运作流程认识Struts2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫的太好,忍不住轉載了,轉自:原文鏈接

認識Struts2有一段時間了,用它做了幾個小型web應用,發現用Struts2使得開發這些小web應用變得非常簡單。這讓我變得有點茫然。如果沒有Struts2,如何開發web應用?開發web的本質是什么?Struts2存在的意義是什么?它究竟為我們做了什么?我們要拋開它天生的驕傲,還原它的本質。由于本人才學疏淺,以下探討不光是我個人見解,更多的是借鑒了廣大網友和相關書籍的經驗之談, 在此先謝過這些高手。

鳴謝:《Struts2技術內幕-深入解析Struts2架構設計與實現原理》陸舟 著

http://www.cnblogs.com/sharpxiajun/p/3936268.html (為什么做java的web開發我們會使用Struts2,spingMVC和sping這樣的框架?)

(這一篇文章也值得一看)

作者:夏天的森林

首先,先不要急著討論Struts2的本質,要先弄清楚幾個web開發的基礎概念

1.分層開發模式

從宏觀上說,web開發模式中最重要的一條是分層開發模式。分層開發模式是指,在開發J2EE程序時,將整個程序根據功能職責進行縱向劃分。一個比較典型并為大家熟知的劃分方法是將整個程序分為:表示層、業務層和持久層



我們所熟悉的一些著名的框架,實際上就是為了解決各個開發層次的編程問題而設計的解決方案。比如說:Struts2是表示層的框架;Spring是業務層的框架;Hibernate是持久層的框架。

2.MVC模式

在分層開發模式的前提下,每一個層次都可以單獨研究,并尋找合適的解決方案和最佳實踐。對于表示層,有一種稱之為MVC的模式為廣發使用,并在此基礎上創建了許多這種模式的開發框架。

其實任何一個B/S應用的本質就是“請求--響應”的處理過程的集合體,

在這個 請求--響應 的過程中,有三大元素是必不可少的:

  • 數據模型——Model
  • 對外交互——View
  • 程序的執行和控制——Control

  • 下面圖是我根據一副流行了很多年講述MVC模型的圖制作的,幫助大家理解MVC模型:

    通過這張圖可以清楚地了解到一個web應用最基礎的業務流程。

    接下來,在探討Struts2的工作本質之前,不妨忘記所謂的框架,先來研究下一個最基本的web應用的業務流程,用最本質的方式來實現一個簡單的MVC雛形,以這種方式來思考Struts2到底為表示層解決了什么樣的編程難題,難道只是實現MVC這么簡單嗎?

    我們知道,Servlet的作用是接收瀏覽器傳給服務端的請求(request),
    并將服務端處理完的響應(response)返回給用戶的瀏覽器,瀏覽器和服務端之間通過http協議進行溝通,
    其過程是瀏覽器根據用戶的選擇將相關信息按http協議報文的規范組裝請求的http報文,
    報文通過網絡傳輸到指定的服務器,服務器通過特定的web容器接收這個報文信息,例如:tomcat,jetty,jboss這樣的web容器,
    web容器將http報文解析出來,如果是用戶請求,最終解析出來的報文信息會用一個request對象存儲起來,
    服務端使用這個request做完相應的處理后,服務端程序將結果封裝到response對象里,
    然后將response對象交給web容器,web容器則把這個response對象轉變為http協議的報文,
    并將報文回傳給瀏覽器,瀏覽器最后解析這個相應報文,將最終結果展示給用戶。

    在了解以上這些后,我們以Registration(注冊)作為業務場景,我們需要一個JSP頁面來呈現用戶注冊的各個字段、一個User類來表示用戶實體以及一個RegistrationServlet類來處理注冊請求。代碼如下:

    registration.jsp

    <form action="/struts2_example/registration" method="post"> user name:<input type="text" name="user.name" value="hnyd" /> birthday:<input type="text" name="user.birthday" /> <input type="submit" value="submit" /> </form>


    User.java

    public class User { private String name; private Date birthday; public User() { } // 此處省略setter與getter方法 }
    RegistrationServlet.java

    public class RegistrationServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //從request獲取參數 String name = req.getParameter("name"); String birthdayString = req.getParameter("birthday"); // 做必要的類型轉化 Date birthday = null; try { birthday = new SimpleDateFormat("yyyy-MM-dd").parse(birthdayString); } catch (Exception e) { e.printStackTrace(); } // 初始化User類,并設置字段到user對象中去 User user = new User(); user.setName(name); user.setBirthday(birthday);</span> // 調用業務邏輯代碼完成注冊 UserService userService = new UserService(); userService.register(user); req.getRequestDispatcher("/success.jsp").forward(req, resp);} }
    除了上述代碼外,我們還需建立起JSP頁面中的form請求與Servlet類的響應之間的關系。這一關系是在web.xml中維護的,代碼如下:

    <servlet> <servlet-name>Register</servlet-name> <servlet-class>com.example.web.RegistrationServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Register</servlet-name> <url-pattern>/struts2_example/registration</url-pattern> </servlet-mapping>

    上面是一個簡單的用Servlet處理的業務,由于Http協議與Java數據形式的不匹配性RegistrationServlet在數據類型轉化和實例化對象上花費了大量的精力,我們編寫了額外的代碼,把頁面上傳來的日期值轉化為Java中的Date對象。在參數的數量和Java對象越來越來復雜的情況下,這種額外的代碼就會變成一種災難,甚至成為我們開發的主要瓶頸之一。

    Struts2通過攔截器幫助我們完美的完成了以上這些和核心業務無關的工作。

    RegistrationServlet.java的最后一行,Servlet將處理過的數據重定向至success.jsp頁面,即通過硬編碼的方式完成程序執行跳轉的,這種方式不但無法支持多種新的視圖技術(模板技術、JSON數據流等等),同時也無法使我們從復雜的視圖跳轉的硬編碼中釋放出來。

    解決這個問題的最有效的途徑是把不同的視圖技術進行分類,然后針對不同的視圖類別封裝不同的視圖跳轉邏輯。Struts2就是這么做的,Struts2通過配置文件來進行區分并實現不同的視圖跳轉。

    即:Struts2是一個運行于web容器的表示層框架,其核心作用是幫助我們處理Http請求

    Struts2處理Http請求(Request),并進行內部處理,再進行Http返回。?

    總而言之,Struts2幫我們解決了我們需要和Http打交道的眾多繁瑣的工作,這也是Struts2作為分層開發模式中表現層的核心所在。

    總結

    以上是生活随笔為你收集整理的从web层运作流程认识Struts2的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。