Servlet 運行原理

一:servlet定義

Servlet是一個Java應用程序,運行在服務器端,用來處理客戶端請求並做出響應的程序。html

二:簡單servlet實例

//導入所需的包

import javax.servlet.http.*;java

import javax.servlet.*;web

import java.io.*;瀏覽器

public class FirstServlet extends HttpServlet {tomcat

//處理請求的方法服務器

public void doGet(HttpServletRequest req, HttpServletResponse resp)app

throws ServletException, java.io.IOException {webapp

//數據發送給客戶端—>控制檯方式輸出post

//System.out.println(「Hello Servlet」);url

//數據發送給客戶端—>HTML頁面輸出

resp.setContentType(「text/html」);

resp.getWriter().print(「<html>」);

resp.getWriter().print(「<head>」);

resp.getWriter().print(「</head>」);

resp.getWriter().print(「<body>」);

resp.getWriter().print(「Hello World」);

resp.getWriter().print(「</body>」);

resp.getWriter().print(「</html>」);

}

}

三:servlet配置到Tomcat中去

Tomcat是一個web容器,也叫web服務器。咱們都知道J2EE有十三個標準,這些標準大部分都是接口,Tomcat只是實現了JSP 和 servlet 開發標準。實現了全部的開發標準,就是應用程序服務器,好比Jboss。

編譯好的servlet類只能運行在tomcat容器中,客戶端瀏覽器不能夠直接訪問Servlet,須要在web.xml中配置一下

<servlet>

<servlet-name>FirstServlet</servlet-name>

<servlet-class>FirstServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>FirstServlet</servlet-name>

<url-pattern>/servlet/FirstServlet</url-pattern>

</servlet-mapping>

Tomcat啓動成功後,在瀏覽器中輸入:http://localhost:8080/abingtest/servlet/FirstServlet

四:servlet運行原理

當咱們在瀏覽器中輸入http://localhost:8080/abingtest/servlet/FirstServlet的時候,Tomcat是如何找到咱們的servlet ,運行,並返回咱們想看到的頁面的呢。

1. WebApplication的標準目錄結構:

WEB-INF/classes

/lib

Web.xml

也就是一個完整的web應用程序目錄下,必須包含以上的目錄結構。

Classes 文件夾下是項目中用到的類文件,均由JDK編譯成了.class文件

Lib文件夾是咱們項目中引用的jar包

Web.xml是整個web應用程序的配置文檔。

瞭解了這些,咱們再來看Tomcat的工做流程。

2. Tomcat解析URL

a) 首先來看URL中包含的信息:」協議」 + 「端口號」 + 「路徑(項目名稱+文件路徑)」

Tomcat啓動後,監聽咱們的8080端口,當有Url請求發過來以後,解析出項目名稱 abingtest,而後到webapps目錄下搜索到該項目文件夾。

b) 項目文件找到後,開始尋找類文件。

這個時候Tomcat去Web.xml文件中尋找<servlet-mapping> 配置節中包含」servlet/FirstServlet」字符串,進而找到該類文件所在的位置。

3. Servelt中的doGet() 和 doPost() 方法

咱們寫的FirstServlet 繼承了HttpServlet ,重寫了HttpServlet中的doGet() 方法,HttpServlet中還有一個doPost()方法。這兩個方法都是用來處理Http請求的。Servlet會根據咱們提交表單的方法(method=post/get)調用service方法來自動選擇(咱們在下一篇文章中來詳細說明一下Service方法是如何自動調用FirstServlet中的doGet()方法的)

4. Servlet如何接收數據

 

import javax.servlet.http.*;

import javax.servlet.*;

import java.io.*;

public class FirstServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, java.io.IOException {

//獲取表單數據

String userName = request.getParameter(「userName」);

}

}

Http協議會將網頁中的全部內容包裝成爲一個request對象傳遞給servlet ,Servlet經過這個對象拿到表單中的全部數據,處理完成以後,經過Response對象返回給客戶端瀏覽器。

5. Servlet的生命週期

Servlet的生命週期是由Tomcat容器管理的

a) 客戶發出請求—>Web 服務器轉發到Web容器Tomcat;

b) Tomcat主線程對轉發來用戶的請求作出響應建立兩個對象:HttpServletRequest和HttpServletResponse;

c) 從請求中的URL中找到正確Servlet,Tomcat爲其建立或者分配一個線程,同時把2建立的兩個對象傳遞給該線程;

d) Tomcat調用Servlet的servic()方法,根據請求參數的不一樣調用doGet()或者doPost()方法;

e) 假設是HTTP GET請求,doGet()方法生成靜態頁面,並組合到響應對象裏;
Servlet線程結束,Tomcat將響應對象轉換爲HTTP響應發回給客戶,同時刪除請求和響應對象。
從該過程當中,咱們能夠理解Servlet的生命週期:Servlet類加載(對應3步);Servlet實例化(對應3步);調用init方法(對應3步);調用service()方法(對應四、5步);;調用destroy()方法(對應6步)。


五:Servlet生命週期的各個階段

相關文章
相關標籤/搜索