按域名瀏覽

Java Servlet

簡介

當我們瀏覽社交媒體網站的時間軸,或在電子商務網站上購買我們最喜歡的商品,或在穀歌中搜索東西時,我們使用術語“服務器”指的是響應我們所有“請求”的遠程實體。這些請求隻不過是我們對本地計算機信息的要求。

圖1。客戶端和服務器

上圖演示了客戶機和服務器。它們一般都是計算機,它們通過互聯網連接在一起。我們可以將客戶端定義為可以向遠程計算機發出“請求”的計算機,將服務器定義為能夠理解請求並向客戶端發送“響應”的計算機。這些請求和響應通信通過一組定義良好的稱為“HTTP”協議的規則進行。

客戶端計算機使用特殊的軟件應用程序與服務器通信,最常見的應用程序是我們著名的瀏覽器,如'穀歌Chrome ', ' Mozilla Firefox ', Opera, Safari等http://www.facebook.com在瀏覽器的地址欄中,點擊“enter”按鈕,請求就從客戶端計算機發送到服務器。這裏的請求是獲取網站的主頁。

從服務器到客戶端的響應是一種特殊的標記語言,可以被瀏覽器理解,稱為HTML -超文本標記語言。基本上,HTML文件由內容和顯示內容的指令組成。

靜態和動態網站

我們日常使用的網站大致可以分為兩類。

a.靜態網站

b.動態網站。

靜態網站具有以HTML編碼的固定內容,並存儲在web服務器上。它總是保持相同的每個用戶訪問網站。例如,https://en.wikipedia.org/wiki/Encyclopedia是一個靜態網站。當請求上述網站時,世界上的每個用戶都會得到相同的HTML內容。這些網站的開發非常簡單和直接。

但是,想想https://www.facebook.com/。當你訪問Facebook時間軸時,Facebook服務器會向你的電腦發送一個HTML編碼的網站。但是,這個HTML內容是專門為您創建的。根據你的用戶名和密碼,Facebook服務器會識別你。它會根據你朋友的活動、你以前的請求、你關注的頁麵的更新以及專門為你創建的相關廣告來創建你的時間軸。這種類型的網站被稱為動態網站。

另一個例子是你的G郵件收件箱。與靜態網站相比,這些動態網站的開發需要更嚴格的技術。動態網站中可用的內容根據用戶的位置、時區、一天中的時間、國家、母語等而變化。大多數情況下,這些網站在後端使用可修改的數據庫,並根據這些數據庫提供頁麵。用戶的活動或請求可以對數據庫進行永久性的更改,以便用戶獲得定製的網頁視圖。例如,訪問電子郵件收件箱的用戶可以刪除、轉發、標記為重要郵件或將郵件移動到另一個文件夾,從而導致數據庫中的更改。這些結果修改了他的收件箱的HTML內容,這些內容在服務器上創建,發送到客戶端並顯示在他的瀏覽器中。

客戶端和服務器端技術

正如我們所討論的,一組技術,如HTML,被用於在客戶的計算機上呈現網站,這被稱為客戶端技術。HTML、CSS和Javascript是基本的客戶端技術。

然而,一些技術正在服務器端運行,以識別特定的用戶,並為該用戶組成一個動態網站。這些技術稱為服務器端技術。Java servlet、JSP、Python、Ruby on Rails、PHP都是一些流行的服務器端技術。

圖2所示。靜態和動態網頁

我們可以用一個簡單的類比來理解其中的區別。靜態網站就像麵包店裏現成的蛋糕。顧客可以簡單地點一個“黑森林”蛋糕,它將在沒有任何定製的情況下交付。對於每一位訂購它的顧客來說,它的特征、外觀、感覺和味道以及所有其他蛋糕特征都是完全相同的。另一方麵,動態網站就像為特殊場合訂購的蛋糕,對顏色、味道、蛋糕頂部的名稱、配料等都有非常具體的要求。在這裏,麵包師隻在從顧客那裏得到規格後才準備蛋糕。

動態網頁隻有在用戶發出請求時才會創建,服務器上運行的一組單獨的技術將負責創建這些頁麵並將它們發送給用戶。

在本文中,我們將討論“Java servlet”的基礎知識,這是一種用於開發交互式web應用程序的特定服務器端技術。

協議的作用

協議是一組預定義的規則,指示必須如何完成特定操作。例如,假設您考慮一個交通路口。在這種情況下,有車輛向四麵八方行駛,每一輛車都看著紅綠燈信號或交警的信號,並相應地行動。有一套規則和慣例,所有的用戶都遵守,這導致了一個順利的操作。盡管人們說不同的語言,使用不同類型的車輛,但遵守協議使他們能夠無縫地協作和工作。同樣,如果你考慮計算機網絡,這是一個涉及來自全球各地不同供應商的不同硬件和軟件技術和產品的領域。最終,當客戶機-服務器通信發生時,所有這些差異對用戶來說都是不可見的。盡管用戶使用不同的瀏覽器、操作係統和電腦,但Facebook的時間線將保持不變。他在任何地方都會得到幾乎相同的經驗。他不需要因為任何差異而改變訪問萬維網的程序。 It is possible only because of the protocols.

我們知道,互聯網是一個平台,全球數十億台設備都連接在其中。它們如何識別或定位彼此以進行通信?為了解決這個問題,我們需要一種尋址機製或一組規則,以便連接到互聯網的每個設備都能遵循。這組規則被稱為“IP協議”。該協議提供了類似於145.124.77.56的特定格式來尋址連接到internet的設備。雖然IP協議能夠對連接到互聯網的設備進行尋址和定位,但下一層通信功能是由另一組稱為“TCP協議”的規則定義的。因此,我們在計算機互聯網絡的各個層中使用了幾種協議。

web應用程序的開發位於應用層之下,我們很少有特定的協議來處理更高級別的通信,如客戶端請求和服務器響應。這一層常用的協議稱為“HTTP協議”。HTTP代表超文本傳輸協議。之所以叫這個名字,是因為這個協議定義了從服務器到客戶端傳輸超文本(HTML編碼)文檔的規則。圖像、音頻、視頻、文本等各種數據都可以在HTML的幫助下發送。

Java servlet基礎知識

利用Servlet技術在服務器端創建動態網頁。它駐留在服務器中,並根據客戶機程序的請求進行調用。有幾種技術可以從服務器創建和發送動態網頁。它們統稱為服務器端技術,與它們相比,servlet有幾個優點。因為servlet是基於Java語言的,所以它們是非常健壯和可伸縮的。

Java Servlet生態係統由豐富的API支持,可開發功能強大的程序。API代表應用程序編程接口,它基本上是Java接口、類和使用它們的必要文檔的集合。類似於用於特定任務的工具包,API提供了解決編程問題所需的所有預構建機製。下麵將詳細討論Java Servlet API。

在Java servlet API的幫助下,我們可以構建服務器端Java servlet程序,該程序將作為客戶端發送請求的web服務器的一部分執行。從外部角度看,客戶端看到服務器響應了每個請求。在內部,這些響應是由Java Servlet程序生成的。因此,Java servlet在動態網頁開發中扮演著重要而強大的角色。

Servlet API

如前一節所述,API是開發人員如何利用給定技術的可能性,Java Servlet API由包、類和這些包中的接口以及關於它們的詳細文檔組成。每個類和接口都有抽象和具體的方法,需要理解這些方法才能有效地開發Servlet程序。

最重要的兩個包是javax。Servlet和javax.servlet.http包。javax中的類和接口。servlet包is not specific to any protocols, whereas the entities inside javax.servlet.http package is meant for http requests and responses.

javax中重要接口的列表。servlet包and a brief description can be found here. For a detailed view of the entire Java API, please visit the official documentation sitehttps://docs.oracle.com/。

接口以抽象方法的形式提供了功能的抽象。它們清楚地定義了一個編程組件要滿足的契約或條款。Java Servlet技術為我們提供了很少的接口來滿足基本的需求。例如,' Servlet '是一個需要以通用Servlet或HTTPServlet的形式實現的接口。這些類聲明servlet生命周期所必需的方法,並且可以重寫這些方法以實現用戶的需求。因此,充分理解Servlet API中可用的接口和類對於開發應用程序至關重要。

javax中重要接口的列表。servlet包

Servlet

ServletRequest

ServletResponse

請求轉發;分派請求

ServletConfig

ServletContext

javax中重要類的列表。servlet包

GenericServlet

ServletInputStream

ServletOutputStream

ServletException

UnavailableException

javax.servlet.http包中重要接口的列表

HttpServletRequest

HttpServletResponse

HttpSession

HttpSessionListener

HttpSessionAttributeListener

HttpSessionBindingListener

HttpSessionActivationListener

javax.servlet.http包中重要類的列表

HttpServlet

餅幹

HttpServletRequestWrapper

HttpServletResponseWrapper

HttpSessionEvent

HttpSessionBindingEvent


開發Servlet應用程序

基於上麵討論的所有概念,讓我們嚐試構建一個基本的servlet程序。

要在您的本地計算機中執行Java Servlet程序,您應該將您的計算機設置為服務器,以便它能夠接收來自客戶機瀏覽器的請求、處理它們並發送動態響應。讓你的電腦成為服務器的最簡單的方法是安裝任何在互聯網上可用的輕量級web服務器軟件。對於我們的示例,我們使用Apache Tomcat web服務器,它可以從Apache網站下載。

安裝和測試Apache webserver的說明:

  • 從以下網站下載合適的Apache tomcat版本:https://tomcat.apache.org/download - 80. cgi。,並保存在本地文件夾中。
  • 要在您的計算機上運行web服務器,您必須根據計算機中存放Apache Tomcat和Java軟件的本地文件路徑,在計算機中設置以下環境變量。
  • 個人電腦的環境變量可在“高級係統設置”的“環境變量”部分設置,該部分可通過右鍵單擊“我的電腦”圖標獲得。下麵是一個示例屏幕。

圖3。設置tomcat服務器的環境變量

[根據係統配置為文件路徑提供正確的值。]給出的值僅供參考

使用給定的值設置以下環境變量。

  • $CATALINA_HOME: C:\Program Files\Apache軟件基金會\Apache Tomcat 6.0.26
  • JAVA_HOME: C:\Program Files\Java\ jdk1.6.0_14
  • classpath: C:\Program Files\Apache Software Foundation\Apache Tomcat 6.0.26\lib\servlet-api.jar
  • 下到Apache Tomcat根文件夾中的“bin”文件夾,運行“startup.exe”文件。現在服務器將啟動,您可以在命令提示符中看到服務器日誌。
  • 現在我們的服務器正在本地計算機上運行。基本上,當我們試圖訪問任何網站,我們提供URL統一資源定位器,它看起來像http://wikipedia.org。在我們的示例程序中,我們將使用在本地機器上運行的服務器,因此我們將使用http://localhost:8080訪問服務器。
  • 現在,打開瀏覽器,點擊URL“http://localhost:8080”。

這將根據您所安裝的軟件版本提供如下所示的Apache tomcat主頁。如果您能夠在瀏覽器中看到類似的頁麵,那麼您的服務正在運行並準備接收請求。

IMG_256

視圖。Apache Tomcat主頁

如果您看到上麵的屏幕,則說明我們成功地運行了服務器,並從我們的客戶端(internet瀏覽器)訪問了服務器。現在我們可以看到如何開發一個簡單的Java servlet程序並在這個設置中執行它。

一個Servlet示例

考慮到上述所有概念,讓我們開發一個簡單的Java Servlet應用程序來驗證用戶輸入的用戶名和密碼。舉例來說,我們正在考慮一個登錄應用程序。在這個應用程序中,用戶在web頁麵上輸入他的用戶名和密碼,然後Java Servlet程序驗證憑證。為簡單起見,我們避免了應用程序的數據庫部分,驗證在servlet程序本身中進行。

借助給定的圖,可以理解應用程序的目的。

Figure.5。Java Servlet應用程序示例

該應用程序由以下步驟組成。

  • 服務器向客戶端響應login.html文件,瀏覽器顯示登錄頁麵,其中包含用戶名和密碼文本框以及登錄按鈕。
  • 用戶在文本框中輸入用戶名和密碼,並提交“login”按鈕。
  • 輸入的用戶名和密碼被發送到服務器。java servlet程序LoginServlet.java被指定來處理這個請求。servlet程序檢查用戶名的值是否為“admin”,密碼是否為“adminpass”。理想情況下,用戶名和密碼將存儲在數據庫中,Java servlet程序與數據庫通信以驗證用戶憑據。但是,為了簡化這裏的理解,我們跳過了這一部分,並假設用戶輸入的憑證在java servlet程序本身中得到驗證。

執行程序

要執行Java servlet程序,我們需要了解下麵給出的tomcat文件夾結構的基礎知識。

IMG_256

圖7。Apache Tomcat文件夾結構

要執行示例應用程序,我們需要執行以下操作。

  1. 必須在web apps文件夾下創建每個web應用程序的新文件夾。應用程序的名稱必須是文件夾的名稱。這被稱為應用程序的上下文根。
  2. 編譯Java Servlet程序,並將類文件存儲在web apps/application_name/ web - inf /classes文件夾中。
  3. 將靜態HTML頁麵存儲在tomcat根文件夾中的專用文件夾中。
  4. 在WEB-INF文件夾中,我們需要創建一個名為web.xml的XML文件。這個文件的目的是描述web應用程序的各種特性。在我們的示例中,我們將隻看到基本的特性,即來自客戶機的請求被映射到服務器中的Java Servlet程序。代碼如下所示。

web . xml

< web xmlns = " http://java.sun.com/xml/ns/j2ee " xmlns: xsi = " http://www.w3.org/2001/XMLSchema-instance " xsi: schemaLocation = " http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd " version = " 2.4 " > <顯示名稱> Servlet Hello World < /顯示名稱> < Servlet > < servlet-name > loginRequest < / servlet-name > < Servlet類> LoginServlet < / Servlet類> < / Servlet > < Servlet映射> < servlet-name > loginRequest < / servlet-name > < url模式>登錄< / url模式> < / Servlet映射> < / web >

Login.html

  登錄頁麵




   
< tr>
User Login
Username: Password:
Baidu

LoginServlet.java

進口java.io.IOException;進口java.io.PrintWriter;進口javax.servlet.ServletException;進口javax.servlet.http.HttpServlet;進口javax.servlet.http.HttpServletRequest;進口javax.servlet.http.HttpServletResponse;LoginServlet擴展HttpServlet{公共無效doPost(HttpServletRequest請求,HttpServletResponse響應)拋出ServletException, IOException {response. setcontenttype ("text/html");PrintWriter out = response.getWriter();字符串名稱= request.getParameter(“標識”);Stirng password = request.getParameter("pwd"); if(name.equals("admin") && password.equals("adminpass")) out.println(""); out.println("Your login is successful"); out.println("
Baidu
"); out.close(); else out.println(""); out.println("Your login credentials are wrong"); out.println("
Baidu
"); out.close(); } }

java -解釋。

程序的第一部分是導入運行servlet程序所需的包和類。java是從基類HttpServlet擴展而來的,因此我們需要導入javax.servlet.http.HttpServlet。

javax.servlet.http.HttpServlet;

javax.servlet.http.HttpServletRequest;

javax.servlet.http.HttpServletResponse;

HttpServlet是一個抽象類,需要子類化它來開發用於任何自定義目的的HTTP servlet。一旦我們這樣做了,就必須實現以下任何一種方法。

doGet——用於來自客戶端的HTTP GET請求

doPoST -用於HTTP POST請求

雖然上麵兩個方法是最常見的重載方法,但還有另外兩個方法,即用於HTTP PUT和HTTP DELETE請求的doPut和doDelete。因此,調用這些方法的需求來自客戶端請求。

此外,init()和destroy()方法通常被重寫以管理資源。這些方法已在本文的“Servlet生命周期”一節中進行了解釋。

在HTTPServlet實現的情況下,不需要重寫服務方法,因為它將請求分派給適當的處理程序方法,如doGet或doPost。

HttpServletRequest和HttpServletResponse是任何servlet操作所需的兩個重要接口。它們表示請求和響應信息,它們由servlet容器創建,並作為參數傳遞給處理程序方法。

在給定的示例中,我們用請求和響應參數重寫了doPost方法。請求對象將包含從客戶端發送的所有數據。在本例中,用戶在提供用戶名和密碼後從登錄表單調用了這個servlet。因此,這兩個值將在請求對象中可用。在doPost方法的輸入過程中,響應對象將為空,並在適當的時候填充它。

在程序的下一部分中,將逐步構建響應對象。內容類型設置為文本或HTML。我們使用java中的PrintWriter對象。IO包用於在響應對象中寫入數據。在這裏,我們手動檢查用戶名和密碼值是否為“admin”和“adminpass”,為了簡單起見,不涉及任何數據庫。在憑證正確的情況下,響應對象將使用HTML代碼填充成功消息。另一方麵,如果憑證不正確,則在響應對象中寫入錯誤消息的HTML代碼。在方法的末尾,響應對象將作為HttpResponse發送到客戶端。這些操作由Servlet容器負責,開發人員不參與其中。雖然服務器端java程序和客戶端瀏覽器是兩個完全不同的技術實體,但兩者都遵循HTTP協議來實現它們之間的通信。

在更嚴格的servlet程序中,請求將被重定向到專用的java程序和幾個數據庫密集型操作。

事件流的描述

  1. 用戶輸入URLhttp://localhost:8080/sample/login.html在瀏覽器中。
  2. 為了簡單起見,HTML文件位於tomcat根文件夾中,服務器將向客戶機發送HTML代碼,瀏覽器將顯示登錄網站。
  3. 用戶在指定的文本框中輸入用戶名和密碼,然後單擊登錄按鈕。
  4. 在HTML文件中,用戶輸入的數據被捕獲在一個名為“form”的HTML元素中,該元素的編寫如下。

  1. 上述語句的含義是,當單擊提交按鈕提交表單時,表單內輸入的數據(在所有HTML輸入控件中,如文本框、複選框、單選按鈕等)將被發送到服務器端,標記為“login”。這個令牌將用於解析服務器中的哪個servlet程序被指定來處理這個請求。
  2. 在web.xml文件中,令牌' login '和Java servlet程序' LoginServlet.java '之間的映射已經配置好了,正如您在上麵的代碼中看到的那樣。
  3. 因此,無論何時提交帶有用戶名和密碼的表單,都會調用LoginServlet.java程序。如果輸入的值是正確的,用戶將獲得一個成功頁麵,或者向用戶顯示一個錯誤頁麵,如圖所示。

Servlet生命周期

servlet生命周期是一個完整的過程,從用戶的請求開始,為請求提供服務,然後從服務器上刪除servlet實例。它主要由三種不同的方法管理,從創建到銷毀。這些方法稱為servlet容器。

如圖所示,servlet生命周期可以通過以下步驟解釋。

圖7。Servlet生命周期

步驟1:在初始狀態下,服務器中處於非活動狀態的servlet java程序可用。Servlet的實例將不會被創建。當用戶向servlet發出請求時,servlet的生命周期開始。(在上麵的例子中,用戶名和密碼被發送到servlet進行驗證)

步驟2:當用戶請求到達服務器時,服務器識別出需要實例化一個特定的servlet程序來服務這個請求,java servlet對象將被創建,初始化過程將發生。這是通過init()方法完成的。調用init()方法之後,servlet對象就可以為請求提供服務了。在init()方法中,完成了所有必要的準備活動以服務請求。例如,可以在初始化狀態下建立到數據庫服務器的連接,並且該連接將在servlet的整個生命周期中得到維護。init()方法在servlet的生命周期中隻被調用一次。因此,在servlet的整個生命周期中隻創建一個servlet對象。

init()方法的結構如下所示。

public void init()拋出ServletException {

//初始化活動…

步驟3:一旦創建了servlet對象並完成了初始化,對象就可以為用戶的請求提供服務了。service()方法負責使用適當的操作來處理用戶的請求,這些操作可以是與數據庫相關的操作,也可以是一些編程邏輯或類似的操作。對於來自客戶端的每個連續請求,隻有service()方法將被一次又一次地調用。請求處理和響應創建實際上隻在這個方法中進行。該方法可以使用另一組方法,包括doGet()和doPost(),進一步為請求提供服務。程序員可以重寫這些方法來執行實際任務並創建動態響應。

在這裏,我們需要理解對象servlet中隻有一個是可用的,而多個請求是由對象在稱為多線程的概念的幫助下服務的,多線程是java編程的一個重要特征。

service()方法的結構如下所示。

public void service(ServletRequest request, ServletResponse response)拋出ServletException, IOException {} doGet()結構public void doGet(HttpServletRequest request, HttpServletResponse response)拋出ServletException, IOException{//編寫執行實際任務的Servlet代碼}public void doPost(HttpServletRequest request, HttpServletResponse response)拋出ServletException, IOException{//編寫執行實際任務的Servlet代碼}

步驟4:在應用程序結束時,當沒有更多請求時,servlet對象將從內存中刪除或銷毀。基本上,這被稱為垃圾收集,在Java虛擬機中發生一個自動過程,以清除內存中未使用的對象。它由destroy()方法執行。在這種方法中,servlet程序的所有關閉手續都完成了。它可以清除用於數據存儲/傳輸的緩衝區,或關閉任何數據庫連接,釋放資源等。與init()方法一樣,destroy()方法在servlet的生命周期內隻被調用一次。

破壞方法結構如下所示。

public void destroy(){//結束過程的代碼…}

結論

Java Servlet技術是J2EE - Java企業版的重要組成部分,它是用於開發服務器端解決方案的最健壯的解決方案。本文試圖涉及Java servlet中的一些介紹性主題。J2EE提供了一套豐富的技術,如JSP、JSF、EJB等,用於開發大型企業web應用程序。web應用程序領域已經被node.js等幾種新技術所占據,建議讀者對其具體需求有適當的了解並選擇該技術。同時,學習java編程免費並獲得課程結業證書。

《阿凡達》的照片
beplay2018官网優秀的學習團隊
beplay2018官网Great Learning的博客涵蓋了最新的技術發展和創新,可以用來建立有價值的職業生涯。你會找到職業指南、技術教程和行業新聞,讓自己跟上快速變化的技術和商業世界。

留下評論

你的電郵地址將不會公布。必填字段已標記

與夢想的工作免費的印度最值得信賴的教育平台上的證書課程

滾動到頂部
Baidu
map