<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          時隔一年再看 JavaWeb

          共 5773字,需瀏覽 12分鐘

           ·

          2021-03-26 07:23

          公眾號關注 “GitHub今日熱榜
          設為 “星標”,帶你挖掘更多開發(fā)神器!






          一 ,原始時代(Servlet出現(xiàn)之前)


          在上世紀90年代,因為nternet和瀏覽器的飛速發(fā)展,使得基于瀏覽器的B/S模式隨之火爆發(fā)展起來。最初,用戶使用瀏覽器向WEB服務器發(fā)送的請求都是請求靜態(tài)的資源,比如html、css等。


          CGI階段,有興趣可以去了解,CGI全稱是通用網(wǎng)關接口,是一種Web規(guī)范,幾乎是所有的語言都能夠寫CGI,甚至Shell;


          這一階段,服務器比較弱,請求也很簡單,就是用戶發(fā)一個請求,服務器接收后新建進程,然后返回結果;但是動態(tài)網(wǎng)站才是趨勢,強大的java肯定不要錯失良機,Servlet技術誕生了。


          二,石器時代(Servlet來了)


          來段代碼感受一下


          import javax.servlet.ServletException;
          import javax.servlet.annotation.WebServlet;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import java.io.IOException;
          @WebServlet("/demo2")
          public class servletdemo2 extends HttpServlet {
              @Override
              protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                  System.out.println("dogit");
              }
              @Override
              protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                  System.out.println("dopost");
              }
          }


          但是代碼編寫時,惡心的事情發(fā)生了>>>>表現(xiàn)、邏輯、控制、業(yè)務全部混在Servlet類中;


          public void doGet(HttpServletRequest request,HttpServletResponse)
             throws IOException,ServletException
          {
              response.setContentType("text/html;charset=gb2312");
              PrintWriter out = response.getWriter();
              out.println("<html>");
              out.println("<head><title>Hello World!</title></head>");
              out.println("<body>");
              out.println("<p>Hello World!</p>");
              out.println("</body></html>");
          }


          三,青銅時代(Java Server Page)


          老一輩程序猿的快樂來了------JSP


          JSP全稱Java Server Pages,是一種動態(tài)網(wǎng)頁開發(fā)技術。它使用JSP標簽在HTML網(wǎng)頁中插入Java代碼。標簽通常以<%開頭以%>結束。JSP是一種Java servlet,主要用于實現(xiàn)Java web應用程序的用戶界面部分。網(wǎng)頁開發(fā)者們通過結合HTML代碼、XHTML代碼、XML元素以及嵌入JSP操作和命令來編寫JSP。JSP通過網(wǎng)頁表單獲取用戶輸入數(shù)據(jù)、訪問數(shù)據(jù)庫及其他數(shù)據(jù)源,然后動態(tài)地創(chuàng)建網(wǎng)頁。

          JSP程序與CGI程序有著相似的功能,但和CGI程序相比,JSP程序有如下優(yōu)勢:

              

          • JSP標簽有多種功能,比如訪問數(shù)據(jù)庫、記錄用戶選擇信息、訪問JavaBeans組件等,還可以在不同的網(wǎng)頁中傳遞控制信息和共享信息。

          • JSP程序與CGI程序有著相似的功能,但和CGI程序相比,JSP程序有如下優(yōu)勢:

          • JSP性能更加優(yōu)越,因為JSP可以直接在HTML網(wǎng)頁中動態(tài)嵌入元素而不需要單獨引用CGI文件。

            

          服務器調用的是已經編譯好的JSP文件,而不像CGI/Perl那樣必須先載入解釋器和目標腳本。JSP 基于Java Servlet API,因此,JSP擁有各種強大的企業(yè)級Java API,包括JDBC,JNDI,EJB,JAXP等等。JSP頁面可以與處理業(yè)務邏輯的Servlet 一起使用,這種模式被Java servlet 模板引擎所支持。最后,JSP是Java EE不可或缺的一部分,是一個完整的企業(yè)級應用平臺。這意味著JSP可以用最簡單的方式來實現(xiàn)最復雜的應用。


          <%@page import="servlet.user" %>
          <%@ page import="java.util.Date" %>
          <%@ page contentType="text/html;charset=UTF-8" language="java" %>
          <html>
          <head>
              <title>jspdemo</title>
          </head>
          <body>
          <%
              user user = new user();
              user.setUsername("張三");
              user.setId(1001);
              user.setPassword(new Date().toString());
              request.setAttribute("u", user);
          %>

          <h1>獲取對象中的值</h1>
          ${requestScope.u}

          </body>
          </html>


          然后問題又來了,雖然JSP可以實現(xiàn)網(wǎng)站快速開發(fā),但是維護不方便,對程序猿極其不友好;


          四,鐵器時代(Servlet+JSP+JavaBean)


          MVC框架模式迎來曙光。


          從servlet一直到三層架構的轉變,其實都是為了實現(xiàn)高內聚,低耦合。


          一個模塊最好只實行一個功能。這個是所謂的“內聚”; 模塊與模塊之間、系統(tǒng)與系統(tǒng)之間的交互,是不可避免的,但是我們要盡量減少由于交互引起的單個模塊無法獨立使用或者無法移植的情況發(fā)生, 盡可能多的單獨提供接口用于對外操作, 這個就是所謂的“低耦合”;


          V即View視圖是指用戶看到并與之交互的界面。比如由html元素組成的網(wǎng)頁界面,或者軟件的客戶端界面。MVC的好處之一在于它能為應用程序處理很多不同的視圖。在視圖中其實沒有真正的處理發(fā)生,它只是作為一種輸出數(shù)據(jù)并允許用戶操縱的方式。

              

          M即model模型是指模型表示業(yè)務規(guī)則。在MVC的三個部件中,模型擁有最多的處理任務。被模型返回的數(shù)據(jù)是中立的,模型與數(shù)據(jù)格式無關,這樣一個模型能為多個視圖提供數(shù)據(jù),由于應用于模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重復性。

              

          C即controller控制器是指控制器接受用戶的輸入并調用模型和視圖去完成用戶的需求,控制器本身不輸出任何東西和做任何處理。它只是接收請求并決定調用哪個模型構件去處理請求,然后再確定用哪個視圖來顯示返回的數(shù)據(jù)。


          五,至今(框架來了)


          Struts的出現(xiàn)


          2001年6月,struts1.0出現(xiàn),struts針對jsp推出了一套struts標簽,從而使得jsp中沒有了Java代碼,結構清晰,功能強大。針對servlet,它提供了Action類來代替了servlet,這個Action類具有servlet的功能,并且能夠進行一些請求過濾和自動轉碼的功能。


          SSH SSM三大框架組合,無論怎么樣的框架,萬變不離其宗,Servlet才是真正的根基,框架只是個工具,讓開發(fā)更簡單;


          Spring家族的出現(xiàn)


          • 前后端分離+SpringMvc(剛需)

          • SpringBoot+SpringCloud 微服務思想興起

              

          以往我們開發(fā)應用程序都是單體型,雖然開發(fā)和部署比較方便,但后期隨著業(yè)務的不斷增加,開發(fā)迭代和性能瓶頸等問題,將會困擾開發(fā)團隊,微服務就是解決此問題的有效手段,微服務最重要的特點就是服務拆分,各服務之間相互調用;但是這些服務又可能部署在不同服務器上,那服務之間怎么遠程調用呢?

              

          迎來RPC跟HTTP兩者先爭,其中最著名的兩個 Dubbo(阿里巴巴) 和 Spring Cloud 框架


          • RPC 遠端過程調用

              

          其調用協(xié)議通常包含傳輸協(xié)議和編碼協(xié)議,Dubbo 是一個分布式服務框架,致力于提供高性能和透明化的 RPC 遠程服務調用方案,以及 SOA 服務治理方案。簡單的說,Dubbo 就是個服務框架,說白了就是個遠程服務調用的分布式框架。



          • 基于 HTTP 的 REST 方式

              

          Spring Cloud 拋棄了 Dubbo 的 RPC 通信,采用的是基于 HTTP 的 REST 方式。嚴格來說,這兩種方式各有優(yōu)劣。雖然從一定程度上來說,后者犧牲了服務調用的性能,但也避免了上面提到的原生 RPC 帶來的問題。而且 REST 相比 RPC 更為靈活,服務提供方和調用方的依賴只依靠一紙契約,不存在代碼級別的強依賴,這在強調快速演化的微服務環(huán)境下,顯得更加合適



          Dubbo 專注 RPC 和服務治理,Spring Cloud 則是一個微服務架構生態(tài)。


          個人認為對于一些中小型企業(yè) Spring Cloud 可能是一個更好的選擇,具體區(qū)別我們還可以進一步了解。。。。


          • Spring cloud Alibaba


          Alibaba牛逼!

              

          有了spring cloud這個微服務的框架,為什么又要使用spring cloud alibaba這個框架了?最重要的原因在于spring cloud中的幾乎所有的組件都使用Netflix公司的產品,然后在其基礎上做了一層封裝。然而Netflix的服務發(fā)現(xiàn)組件Eureka已經停止更新,Nacos注冊中心來了;

              

          注冊中心Nacos

              

          nacos是阿里巴巴研發(fā)的一個集注冊中心與配置中心于一體的管理平臺,使用其他非常的簡單。下載地址為:https://github.com/alibaba/nacos/releases

              

          • Service Mesh服務網(wǎng)格

              

          另一種趨勢,值得我們期待:

              

          如果用一句話來解釋什么是 Service Mesh,可以將它比作是應用程序或者說微服務間的 TCP/IP,負責服務之間的網(wǎng)絡調用、限流、熔斷和監(jiān)控。對于編寫應用程序來說一般無須關心 TCP/IP 這一層(比如通過 HTTP 協(xié)議的 RESTful 應用),同樣使用 Service Mesh 也就無須關系服務之間的那些原來是通過應用程序或者其他框架實現(xiàn)的事情,比如 Spring Cloud、OSS,現(xiàn)在只要交給 Service Mesh 就可以了。



          出處:https://blog.csdn.net/weixin_44313584/article/details/110494868








          關注GitHub今日熱榜,專注挖掘好用的開發(fā)工具,致力于分享優(yōu)質高效的工具、資源、插件等,助力開發(fā)者成長!







          點個在看 你最好看


          瀏覽 49
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青草导航 | www九色 | 日本乱婬妺妺躁爽A片 | 精品免费囯产一区二区三区四区视频 | 小日子骚货操逼 |