Servlet

含義

由java編寫的,線程安全(一個對象的屬性,只提供給其他的線程get方法不提供set方法)的web組件;在MVC模式中起到控制層的作用;主要功能在於交互式地瀏覽和修改數據,生成動態Web內容;

 

功能

1、CGI:通用網關接口;

通用網關接口:以注入的方式從web容器中拿到和傳遞內置對象

注入:調用方法就傳遞數據,提高效率;config、request、response

依賴查找:依賴對象給數據;out、session、application

2、拿到請求參數,對請求參數的格式做驗證,創建表單bean,收集表單數據;

3、對請求進行分析,通過分析,把請求分發給業務層;

4、根據業務層的轉向信息轉到視圖層;

 

Servlet架構

流程

啓動tomcat, servlet就 創建了

1  tomcat啓動以後,用戶發請求[例如,查找姓名爲Tom的學生的信息,這個請求通過瀏覽器,通過表單發出去],這個請求發送到http協議上,首先給tomcat服務器,

2  tomcat服 務器接收這個請求,爲這個請求創建request, response內 置對象; request內置 對象存放請求字符串,請求參數,IP地址和cookie;

3  tomcat通 過配置[必須配置]把請求轉給控制層servlet組件,同時把request內置對象,response內置對象注入給servlet;

4  servlet調 用相應的方法後,創建表單bean,從request中 拿到請求參數封裝到表單bean; servlet拿到請求參數, 對請求參數進行分析,把請求分發給業務層[給業務層request, response, 表單bean] ;

5  業務組件如果需要到數據庫裏查找信息,業務層又把請求交給了持久層,調用持久層對象的方法[業務層已經把表單bean傳給了持久層,持久層拿到了表單bean,就拿到了用戶的請求參數]

6  持久層通過sql語句訪問數據庫,最後會拿到結果[Tom的姓名,年齡等一些信息],持久層拿到了用戶Tom的一些信息,持久層創建結果bean,然後把結果信息封裝到結果bean裏面,緊接着持久層把結果bean返回給業務層;

7  業務層會把這個結果bean設到request內置對象,然後業務層又向控制層返回一個轉向信息;

8  控制層對轉向信息進行分析,轉向了相應的視圖組件jsp[視圖組件不一定是jsp];

8  視圖組件從request內置對象當中拿到了結果信息,用el表達式或者標籤進行處理「這個過程叫渲染];

9  最後渲染的結果通過response放到HTTP協議返回給瀏覽器

 

語法

包聲明:字節碼文件要放到 WEB-INF/classes/以包對應的目錄結構下;

包導入:

import java.io.* ;
// HttpServlet屬於javax.servlet.http包下
// ServletException屬於javax.servlet包下
import javax.servlet.* ;
// HttpServletRequest、HttpServletResponse存放在javax.servlet.http包下
import javax.servlet.http.* ;

繼承HttpServlet;

至少複寫四個方法:

doGet方法

public void doGet(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException

接收和處理get請求,當地址欄或超鏈接向服務器發送get請求時,通過配置tomcat會調用servlet的doGet方法,同時把request和response對象(對象的地址)注入進來,方法的形參用子接口類型的變量來接收,還要拋出IOException和ServletException;

doPost方法

public void doPost(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException

處理post請求;

init方法:

public void init(ServletConfig config) throws ServletException

一創建servlet對象就會立馬調用該方法,並把config對象注入進來,獲取初始化信息;

destory方法:

tomcat關閉就會調用該方法銷燬servlet,做善後工作,最後servlet屍體”被GC掉;

 

部署和配置

方法一:servletjar包(tomcat/common/lib下)要放在jdk/jre/lib/ext下;

方法二:通過classpath指定,在classpath中加入此開發包的路徑;

tomcat一啓動就會讀取web.xml文件的<servlet>標籤,看到配置了<load-on-startup>標籤,就按<servlet-class>的指示到 WEB-INF/classes下找包對應的類----SimpleServlet,並調用無參的構造方法創建出SimpleServlet對象,

只有配置了<load-on-startup>纔會在tomcat一啓動就創建servlet對象,如果沒有配置該標籤,只有用戶第一次訪問servlet組件的時候纔會創建servlet對象

推薦:配置<load-on-startup>servlet創建越早越好;0-9代表創建servlet對象的優先級,數字越小優先級越高;

配置代碼:

<servlet>
        <servlet-name>simple</servlet-name>
         <servlet-class>cn.zte.pxb.servlet.SimpleServlet</servlet-class> //找到SimpleServlet對象
        <load-on-startup>0</load-on-startup>

</servlet>

<servlet-mapping>
        <servlet-name>simple</servlet-name>
         <url-pattern>/demo</url-pattern>

</servlet-mapping>

 

Servlet的訪問

先找真實項目名,讀取項目下的web-xml,找到相應的servlet對象(或創建servlet對象)

test虛項目名-->config下的servlet.xml-->真實項目名

組件demo映射-->當前真實項目的web.xml-->找到對應的servlet

找到url=demo的<servlet-mapping>中的<servlet-name>,再找到對應的servlet對象(如果沒有配load,就此時才創建)

調用servlet對象對應的get或者post方法

通過response內置對象拿到out內置對象,不是創建。

servlet拿到out,servlet發送靜態代碼給瀏覽器,誰拿誰發

 

Servlet生命週期

1. Tomcat啓動,創建servlet對象,或在用戶第一次訪問servlet組件時創建servlet對象;

2. Servlet對象一創建調用init()方法,把config對象注入, 獲取初始化參數;

3.用戶通過get發送請求,tomcat通過配置調用servlet對象的doGet()方法,同時把request,response對象注入進來;

4.在doGet()方法中, 創建表單bean, 封裝表單bean數據, 對請求進行分析,分發給業務層;

5.業務層獲得持久層的結果bean後, 向servlet的doGet()方法發送轉向信息, servlet對轉向信息進行分析,把請求分發視圖組件

6.視圖組件從request中拿到結果信息,對結果數據進行渲染,把最後的結果信息通過response回傳給瀏覽器;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章