首頁>Club>
8
回覆列表
  • 1 # 範帥專一啊

    java web的基礎api是servlet,透過servlet實現http請求的訪問。更底層的實現就是servlet容器了。常用的容器有tomcat,jetty, weblogic等。

    tomcat有兩大元件,connector和container,每個connector是一個http埠連線,接受http請求,封裝成httpservletrequest,然後呼叫container處理。由於有海量使用者訪問,因此connector有bio和nio兩種模式。bio模式每個connector繫結一個執行緒池,每個請求一個執行緒處理。nio模式使用java nio api,基於reator模式,實現io多路複用。

    container是一種層次結構,從頂層到底層分為server,service,host,context,context是最基本的容器,我們通常開發的java web程式就部署為一個context。java web servlet容器頂層介面servletcontext就代表一個context。

    java web可能用mvc框架,如spring mvc,Struts2等。將所有的請求集中在一個前端控制器中,如spring mvc中的dispatcher servlet。對對於靜態頁面的訪問,tomcat提供了基本的servlet支援。每個servlet容器如tomcat, jetty等都提供了靜態訪問的預設servlet,當web.xml中配置的servlet不匹配時由預設servlet處理,返回靜態頁面。

  • 2 # 執著的瘋子8

    底層是套接字程式設計,從tcp/ip協議開始,進行點對點的連線,進行資料交換。但是這個資料交換沒有一個統一的規範,比如你給我發個1,我給你回個2,每個人寫的程式都不相同。於是便有了http協議,這個協議規範你,你發訊息的時候,得先發瀏覽器引數,機器環境,編碼,等等,再發送請求引數。伺服器回你訊息的時光,得先回響應程式碼,響應時間,編碼等,再發送內容。但是這樣存在一個問題就是,內容沒規範,於是有了html來對內容進行包裝。這樣一個b/s就構建起來了。既然這個server永遠是按照規範解析,封裝這些資料,為了不重複發明輪子,便有了servlet,統一將各種操作進行封裝。同時由於同一個伺服器頁面不止對應1個servlet且涉及到併發轉發驗證等功能,所以tomcat等公司製造了tomcat等伺服器,來根據你訪問的地址值進行判斷轉發分流到相應的servlet。一個完整的java web就出來了。

  • 3 # 井151276607

    web服務的重要(主要)任務是解析瀏覽器請求的url,找到、獲取相應的資源文件,並返回給瀏覽器。

    為了儘量降低web應用系統開發難度和標準化,當時的sun公司的開發人員定義了一組簡潔的api如servlet和filter及等,以及相關的上下文環境物件。使用一個web.xml檔案描述使用者開發的servlet、 jsp、文字類文件及其他媒體檔案資源與url路徑的對映關係、使用者開發的servlet的載入與配置,filter的連線與路由等等。

    java web規範對於web應用開發,具有重要意義。對許多其他語言的web開發框架有直接的影響。

  • 4 # 夕陽雨晴

    Java Web是什麼原理?做了三年多的Java Web開發,這個所謂的原理真心沒有想過。現在的Spring、Struts等開源框架,將較底層的內容大面積封裝,平時僅是使用,而且被封裝好的開源框架真心好用,往往忽略了原理方面的內容。所謂的Java Web原理,在我看來,似乎和Servlet生命週期是一致的。在某一定程度上,應該可以簡單的等同起來。

    之前在準備程式設計師面試,看重視了一下理論基礎,結合《Java程式設計師面試秘笈》,我借用裡面的描述來談談Servlet的生命週期。

    (1)裝載Servlet。這項操作一般是動態執行的,然而,伺服器通常會提供一個管理的選項,用於在伺服器啟動時強制裝載和初始化特定的Servlet。(2)伺服器建立一個Servlet的例項。(3)伺服器呼叫Servlet的init()方法。(4)一個客戶端請求到達伺服器。(5)伺服器建立一個請求物件。(6)伺服器建立一個響應物件。(7)伺服器啟用Servlet的Service()方法,請求物件和響應物件作為service()方法的引數。(8)service()方法獲得請求物件的信心,處理請求,訪問其他資源,獲得需要的資訊。(9)service()方法使用響應物件的方法,將響應傳回伺服器,最終到達客戶端。service()方法可能啟用其他方法以處理請求,例如doGet()、doPost()或程式設計師自己開發的新的方法。對於更多的客戶端請求,伺服器建立新的請求物件和響應物件,仍然啟用此Servlet的service()方法,將這兩個物件作為引數傳遞給它,但無須再次呼叫init()方法。一般Servlet只初始化一次,當伺服器不再需要Servlet時(一般在伺服器關閉時),伺服器呼叫Servlet的destroy()方法。

    以上就是Servlet的生命週期,間接解釋了部分的Java Web原理,但是仍忽略了很多東西,如HTTP協議原理、伺服器端Web程式設計原理,Servlet與Web容器之間的業務邏輯,Java Web應用程式的組成、常用Java Web伺服器的工作原理等內容,這也說明,在IT行業,越要做的出色,越要了解甚至熟悉更加底層的東西,也是一種程度的學無止境。

  • 5 # 北遊教育

    這個要仔細辨別一下,先看他是不是面授課程。某些培訓學校儘管宣傳是面授課,但我覺得將會上課時是看的是講師的講課影片,隨後班上有一個助教講師承擔解釋你的問題。

    只是並不是講師面對面授課就會少好多師生互動環節、也不可以更好的調起學員的學習興趣。因此去試聽是要注意這個IT培訓學校是不是真的是講師面對面授課。

    像黑馬先鋒這樣的培訓機構,他們不僅有面授課程,可以隨時和講師互動,還有免費試聽課,給你深度瞭解考慮的機會,其實並不是哪家培訓機構好就是適合自己的,要看他們上課時內容技術是不是新穎、能否聽懂。

    老師講課講得內容是不是當下正流行的某些技術這一點很重要,因為如果講的是過時內容,那麼就說明這家培訓學校的課程未能緊跟市場需求,要是你在這學習IT培訓,學完後都不太容易就業的。

    課程內容新的話再看自個可否聽懂,通常試聽期間IT培訓學校會給你安排正在講基礎階段的班次讓你試聽,也可以看看自己是否真的感興趣的,像黑馬先鋒這樣既是現在流行的新技術,又可以先免費試聽在做決定的,就很不錯

  • 6 # IT人劉俊明

    如果你是70、80後的程式設計師,你一定要看一看這篇文章,保證滿滿的回憶。如果你是90後,那你更要看看這篇文章,因為你能找到java web發展的歷史。

    Web開發的歷史

    web開發的歷史其實並不久遠,要搞清楚java web開發的特點(主要是優點),首先要了解web開發的歷史(簡單的迴歸一下)。早期的web是非常簡單的結構,使用者發出請求(request),伺服器給出迴應(response),這個時期的web應用,我們稱為web site(網站),特點是一些列靜態內容的集合。看一個圖示:

    圖中的伺服器保持了一系列html指令碼來響應使用者的請求,可以說這個時期的web應用還是比較簡單的,但是卻確立了兩個重要的物件:一個request(代表請求),另一個是response(代表迴應)。如果把web開發的歷史比喻成一部美國大片的話,那麼request和response絕對是這部大片的那女主角,而且每一部都是不可或缺的主角(簡單的說就是死不了)。

    看到這個圖,不知道第一批從事web開發的80後是否和我一樣,已經有點感觸了,當年為了搞清楚這個結構,曾經連續多少個通宵做實驗(實驗環境比較惡劣)。沒關係,這僅僅是個開始,我想當你看完這篇文章的時候,你會淚流滿面的(相信我)。為了配合一下這張結構圖,我配一張圖片(當年的我):

    在web發展過程中,有一個小插曲,就是在web site向web application發展的過程中,出現了一個小“玩意兒”,就是applet,很多人瞭解java都是從使用java applet開始的(70,80後那一批程式設計師)。當時風靡校園(我當時在讀大一)的網易聊天室,哎呀那個火啊(大家回憶一下你在學校機房上網時的興奮),這個聊天室就是採用了applet構建的,當時applet給靜態頁面一個動態互動的可能,著實火了一段時間。現在知道applet的程式設計師,你已經暴露年齡了。看一張圖片吧:

    過了這個插曲,真正的三層web開發來了,一個里程碑式的web處理方式CGI,看一張圖:

    CGI的推出,使得web開發正式進入了動態處理時代,伺服器能與客戶有真正意義上的交流了,有能儲存資料的資料庫了,雖然CGI的使用週期並不長,但是一定要紀念一下它,畢竟它是里程碑式的變革。java web技術正是踩著CGI的肩膀來到了廣大程式設計師的面前,java web解決了CGI的效能問題。CGI是以程序為單位管理請求的,而java web則是以執行緒為單位,處理能力更強,佔用的資源更少,這個核心的元件就是Servlet。看一組資源佔用圖,先看CGI的:

    再看一下java web中的servlet資源圖:

    孰優孰劣一目瞭然,Servlet解決相同數量的請求,卻佔用較少的系統資源,這就是為什麼廣大程式設計師拋棄了CGI轉向java web的原因。

    另外,開發一個Servlet並不複雜,看一個Servlet編寫的HelloWorld應用:

    這個程式碼結構是不是很親切,是不是很有Coding的感覺,其實Servlet就是個java 類而已,只不過增加了幾個限制而已,所以開發一個Servlet並不複雜。然後就是把它部署到web伺服器上(Tomcat這個老人家現在身體依然硬朗!),然後就等待客戶的請求就可以了。這是Servlet的三層部署圖:

    java web開發的技術體系還包括javabean和jsp,採用MVC結構來組合這三個技術是java web開發的基礎內容,先看一下MVC的功能圖:

    再看一下組合使用Servlet+javaBean+JSP的Model2開發結構:

    這個結構是標準的Java web開發結構,現在是不是很少能看到這麼“乾淨”的描述圖了?以上就是標準的java web 開發的歷史描述,當然這並不是說這些內容已經過時了,反而它一直是官方的標準解決方案。只不過web發展迎來了另一個階段,繁榮的開源架構時代來了。。。

    開源框架時代

    這個時代的典型代表就是Struts、Spring和Hibernate,簡稱SSH。

    嚴格的說,這部分內容並不是官方解決方案,但是這些方案卻得到了廣大程式設計師的擁護,一方面原因是EJB的方案太重了,另一方面開源架構使用起來非常方便和靈活,所以從03年以後這些開源框架得到了普通的使用。

    下面我簡單描述一下這三個框架:

    Struts基於MVC結構的解決方案,分為struts1(已經淘汰了,用過Struts1的程式設計師已經老了)和struts2兩個版本,和Python一樣,這兩個版本不相容,目前Struts2的最新版本是2.5.14.1,簡單的說Struts就是構建了現成的MVC框架,程式設計師往這個框架里加程式碼就可以了,使用起來非常方便。

    Hibernate框架完成了面向物件與面向關係的對映,讓java程式以面向物件的方式操作面向關係的資料庫。整體結構基於DAO進行擴充套件,很多操作只需要配置一下就可以了,極其方便。

    Spring提供了javaBean的容器,池化了javabean,提高了效能,而且核心程式碼不到2M,小巧且強大。

  • 中秋節和大豐收的關聯?
  • 你會如何評價《花戒指》裡的婉碧?