Servlet是一個Java應用程序,運行在服務器端,用來處理客戶端請求並做出響應的程序。html
//導入所需的包
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>」); } } |
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
當咱們在瀏覽器中輸入http://localhost:8080/abingtest/servlet/FirstServlet的時候,Tomcat是如何找到咱們的servlet ,運行,並返回咱們想看到的頁面的呢。
WEB-INF/classes
/lib
Web.xml
也就是一個完整的web應用程序目錄下,必須包含以上的目錄結構。
Classes 文件夾下是項目中用到的類文件,均由JDK編譯成了.class文件
Lib文件夾是咱們項目中引用的jar包
Web.xml是整個web應用程序的配置文檔。
瞭解了這些,咱們再來看Tomcat的工做流程。
a) 首先來看URL中包含的信息:」協議」 + 「端口號」 + 「路徑(項目名稱+文件路徑)」
Tomcat啓動後,監聽咱們的8080端口,當有Url請求發過來以後,解析出項目名稱 abingtest,而後到webapps目錄下搜索到該項目文件夾。
b) 項目文件找到後,開始尋找類文件。
這個時候Tomcat去Web.xml文件中尋找<servlet-mapping> 配置節中包含」servlet/FirstServlet」字符串,進而找到該類文件所在的位置。
咱們寫的FirstServlet 繼承了HttpServlet ,重寫了HttpServlet中的doGet() 方法,HttpServlet中還有一個doPost()方法。這兩個方法都是用來處理Http請求的。Servlet會根據咱們提交表單的方法(method=post/get)調用service方法來自動選擇(咱們在下一篇文章中來詳細說明一下Service方法是如何自動調用FirstServlet中的doGet()方法的)
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對象返回給客戶端瀏覽器。
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步)。