<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                Servlet已經被很多框架深深地隱藏了起來 ## Servlet + JSP 當時的Web 服務器只能處理靜態的HTML頁面,圖片,JavaScript這樣的東西,比如Apache的這個著名的Web服務器。 人類想要看一點動態的內容,比如什么留言板,購物網站等,還得靠極為難用的 CGI。 后來的Servlet一出現,CGI就被拋棄了。 ![](http://p8a6vmhkm.bkt.clouddn.com/picgo20180820091429.png?picgo) 著名的開源論壇軟件 Jive 就是Jsp+ Servlet的巔峰之作 其他JSP也可以當Controller,但是代碼太過冗長。JSP本質上也是Servlet,只是穿上了一層外衣,可以讓程序員們輕松寫動態頁面,實際運行的時候還是會編譯成Servlet類。 所以Servlet和JSP都生活在Servlet Container當中,所謂Container就是可以執行Servlet和JSP的一個東西,比如說Tomcat或者說Jetty 但是不論是JSP還是Servlet,能處理的只有HTTPQ請求,必須有人把HTTP請求發給他們。 一般這種事情可以讓Tomcat,Jetty來做,他們自己可以接收HTTP請求,然后轉發給JSP或者Servlet 當然Tomcat也可以從Apache那里接收HTTP請求,然后發給Servlet處理,處理完了以后再轉發給Apache,最后給到人類的瀏覽器。 這種方法雖然麻煩,但是好處在于非常靈活,擴展性好,比如一個Apache可以把請求分發給后臺多個Tomcat之一 Apache,Nginx 他們專心致志地去處理靜態內容 (HTML, JS, 圖片),Tomcat等執行業務邏輯,訪問數據庫,生成頁面返回 ![](http://p8a6vmhkm.bkt.clouddn.com/picgo20180820092036.png?picgo) ## 應用服務器 當應用程序開發越來越多的時候,出現了一些通用的需求,比如安全、事務、分布式等。 這些需求應用程序不愿意處理,操作系統也不愿意處理,那么的可以把這些大家都不愿意做的事給中間件來做。 所以Java搞出了一大堆規范,比如EJB,JMS,JTA等,也把Servlet和JSP合并到其中,形成了J2EE 其中EJB生活在EJBContainer中,號稱可以支持真正的分布式計算:一個EJB可以有多個實例,分布到多個服務器中,應對用戶的請求。 人們把 Servlet Container 稱為 Web Container , 和 EJB Container 一起,還有其他的一些東西,被合并到一個叫做 Application Server 當中去了。 最知名的幾個 Application Server 就是 Weblogic , WebSphere , JBoss。 國內的金蝶也實現過一個,叫做 Apusic ![](http://p8a6vmhkm.bkt.clouddn.com/picgo20180820092424.png?picgo) ## 退居幕后 EJB卻是一個扶不起的阿斗,它笨重、性能低下、難于測試,昂貴。 大家紛紛開始使用框架,比如Structs,SpringMVC 在這些框架里面Servelt雖然處于一個非常重要的角色,但是通常情況下只需要配置Web.xml就可以了。 Container把HTTP請求傳遞給Servelt,但是它卻不能禽獸處理,需要傳遞給框架,框架再分派給Controller 而程序員所需要做的事情就是寫Controller,Service,DAO等 框架極大的減少了人們的工作量: 之前對于每個 HTTP 請求,程序員得手工地去解析 URL, 調用相關的 Java Bean。 現在只需要用個配置文件或者注解就可以把 URL 給映射到一個 Java 類。 之前對于 HTTP 請求中的參數, 程序員也得手工解析和驗證。 現在也可以直接映射到 Java 對象或者變量 ![](http://p8a6vmhkm.bkt.clouddn.com/picgo20180820092854.png?picgo) 后來出現了一個Spring Boot的東西,Servlet徹底給隱藏了。 像Tomcat和Jetty這樣的Servlet Container也被內嵌到了Spring Boot中,程序員開發的Web應用,竟然可以像一個普通的Java程序一樣從main開始運行。 ## 威脅來臨 雖然Servet退居幕后,但是核心地位依然穩固,專門處理HTTP請求。 直到Netty出現,它完全不用Servlet Container,也就是說人家本來就是一個Container Servlet只能處理HTTP,而Netty可以支持各種各樣的協議:HTTP,FTP,UDP等。 甚至還支持自定義協議。程序員完全可以自定義一套應用的RPC協議,放到Netty上運行。 Netty的底層是Java NIO,又封裝了Java NIO復雜的技術細節,可以輕松實現高性能、高可靠的網絡服務器。 所以有可能以后就是用Netty開發的服務器端,運行著眾多的Web 服務器,他們之間使用私有的協議互相調用,效率極高,性能極高。 不過目前直接使用Netty的程序員不多,雖然有不少人在使用基于Netty的Dubbo,但是Netty也被封裝隱藏起來了。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看