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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Struts2到底为我们做了什么

發布時間:2023/12/14 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts2到底为我们做了什么 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

tips:本文會不斷持續更新,直到完善為止。如有不足之處歡迎提出。

認識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 {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {<span style="color:#ff0000;">// 從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);<span style="color:#ff0000;">req.getRequestDispatcher("/success.jsp").forward(req, resp);</span>} } 除了上述代碼外,我們還需建立起JSP頁面中的form請求與Servlet類的響應之間的關系。這一關系是在web.xml中維護的,代碼如下:

    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作為分層開發模式中表現層的核心所在。

    (未完待續)

    總結

    以上是生活随笔為你收集整理的Struts2到底为我们做了什么的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 国产精品网站视频 | 污污污www精品国产网站 | 精品动漫一区二区三区的观看方式 | 97久久精品| 制服丝袜手机在线 | 极品少妇网站 | 欧美人与性动交α欧美精品 | 91成人一区二区三区 | 一级做a免费 | www.欧美亚洲| 国产麻豆精品在线 | 色偷偷噜噜噜亚洲男人的天堂 | 99热中文 | 人人人插 | 久操国产 | 在线视频成人 | 欧美黄色免费网站 | 玉足脚交榨精h文 | 欧美乱视频| 久久综合国产 | 色婷婷久久五月综合成人 | 天天操狠狠干 | 朝桐光av在线一区二区三区 | 日本三级韩国三级三级a级按摩 | 91精品国产91综合久久蜜臀 | 精品国产乱码一区二区 | 亚洲国产剧情在线观看 | 美女在线观看视频 | 老妇女玩小男生毛片 | 国产激情在线视频 | 电家庭影院午夜 | 粗大挺进潘金莲身体在线播放 | 日本免费中文字幕 | 日韩欧美久久 | 亚洲精品福利在线 | 亚洲乱码精品 | 亚洲香蕉在线 | 美女视频久久 | 久久精品国产亚洲av久 | 大陆农村乡下av | 777米奇影视第四色 五月丁香久久婷婷 | 人人做人人爽 | 色香av| 一级片免费网址 | 久久精品视频在线免费观看 | www在线观看视频 | 少妇精品久久久久久久久久 | 久久阁| 日本在线天堂 | 两个人看的www视频免费完整版 | 亚洲免费av电影 | 97精品国产97久久久久久粉红 | 欧美爱爱一区二区 | 久久综合九色综合欧美狠狠 | 天堂久久av | 二级黄色片 | 香蕉久热| 国产伦精品一区二区三区高清版 | 校园春色亚洲色图 | 欧美日韩一区二区三区不卡 | 少妇精品久久久久久久久久 | 中文字幕一区二区三区视频 | 午夜影院在线看 | 玩弄人妻少妇500系列 | 亚洲视频色图 | 亚洲精品国产精品国自产网站按摩 | 乳色吐息在线观看 | av一区二区免费 | 色婷婷av一区二区三区之e本道 | 欧美亚洲专区 | 69毛片 | 午夜精品福利一区二区 | 无码人妻丰满熟妇啪啪欧美 | 少妇人妻一区 | 欧美色图片区 | 成人在线高清视频 | 久久久久久久国产视频 | 欧美日韩少妇精品 | 亚洲Av无码成人精品区伊人 | 日韩精品成人 | 国产午夜精品视频 | 欧美国产日韩精品 | 国产亚洲精品久久久久久久久动漫 | 午夜成年人视频 | 国产成人无码AA精品区 | 国内免费毛片 | 天天操精品 | 亚洲福利社 | 男女69视频 | 有色影院 | 色播视频在线观看 | 日本免费小视频 | 婷婷五月在线视频 | 久久无码精品丰满人妻 | 婷婷亚洲视频 | 天天干狠狠爱 | 日本乱论视频 | 经典杯子蛋糕日剧在线观看免费 | 国产精品人人 |