一.servlet接口
Servlet接口,Servlet就是一種實現了Servlet接口的類,它是由web容器負責創建 並調用,用於接收和響應用戶的請求.
在 Servlet 接口中定義了 5 個抽象方法,具體如下:
二.Servlet的使用
第一步:編寫一個類,實現Servlet接口
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Myservlet implements Servlet {
/**
* Servlet實例化後,調用init()方法進行初始化
* Servlet什麼時候進行初始化?
* 不是服務器一啓動就進行實例化,二是第一次請求時,纔會進行實例化.
* init()只執行一次.
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("Servlet初始化了");
String encoding= servletConfig.getInitParameter("encoding");
System.out.println(encoding);
}
/**
* service方法調用時需要使用兩個參數:ServletRequest和ServletResponse
* 每一次請求都會創建新的ServletRequest和ServletResponse對象
* service()有幾次請求就執行幾次
*/
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
//向控制檯輸出
System.out.println("hello servlet");//service處理請求比較麻煩,比如我們需要判斷用戶的請求方式
//向瀏覽器輸出
response.getWriter().write("hello service");
}
/**
* Servlet什麼銷燬?
* Web應用停止或者服務器關閉
* 只執行一次
*/
@Override
public void destroy() {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
}
第二步:配置
在 WebContent->WEB-INF,web.xml 文件下添加配置信息
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<display-name>day33</display-name>
<welcome-file-list>
<welcome-file>/login.jsp</welcome-file>
</welcome-file-list>
<!--配置servlet信息-->
<servlet>
<!--配置servlet的名稱,必須唯一-->
<servlet-name>Myservlet</servlet-name>
<!--配置servlet的全類名-->
<servlet-class>servlet快速入門.Myservlet</servlet-class>
<!--配置初始化參數-->
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<!--配置Servlet的加載時機,值時一個正整數,值越小,表示越先被加載,值相同,誰在上面,誰先被加載-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!--需要和上面的名字一致-->
<servlet-name>Myservlet</servlet-name>
<!--配置servlet的請求路徑-->
<url-pattern>/myServlet</url-pattern>
</servlet-mapping>
</web-app>
第三步:運行訪問
控制檯顯示:
瀏覽器顯示:
三.Servlet生命週期
Servlet 生命週期三個階段
階段一:初始化階段 Servlet 接收到請求後,會先檢查內存中是否有該 Servlet 對象,如果有直接使用該 對象,如果沒有就創建實例,後調用 init()方法,需要注意,在 Servlet 的整個生命週期 內,它的 init() 方法只會調用一次。
階段二:運行階段 Servlet 生命週期中最主要的階段,該階段會爲這個請求創建`ServletRequest`對象和 `ServletResponse`對象,然後傳遞給 service()方法,在整個 Servlet 生命週期內,每一次 訪問請求,都會創建新的`ServletRequest`和`ServletResponse`對象。並且調用 service()方 法 。
階段三:銷燬階段 Servlet 隨着 Web 應用的銷燬而銷燬,在銷燬 Servlet 之前,Servlet 的 destroy() 方 法會被調用,在該方法裏面可以進行資源釋放操作,destroy()只會被調用一次,需要注 意的是 Servlet 對象一旦被創建就會駐留在內存中,直到服務器關閉。
四.使用便捷類
HttpServlet 類
抽象類,專門用於處理 HTTP 請求的 Servlet
主要功能 : 1. 根據用戶請求方式不同,定義相應的 doXxx()方法處理用戶請求。
2. 通 過 service() 方 法 將 HTTP 請 求 和 響 應 分 別 轉 爲 HttpServletRequest 和 HttpServletResponse 類型的對象
使用步驟: 1. 新建類,基礎 HttpServlet
2. 重寫 doGet、doPost 方法
3. 在 web.xml 文件中配置
測試 doGet 方法 :
採用 GET 方式訪問`HttpServletDemo`,只需要在地址欄輸入 HttpServletDemo 訪問地址 即可打印`thisisdoGet!!!`
測試 doPost 方法 :
採用POST就必須使用表單了,創建表單提交html文件 ,設置提交數據到`HttpServletDemo`即可.
注意:表單action裏的數據.
五.路徑通配符
通配符優先級 有如下映射關係
Servlet1 映射到 /abc/*
Servlet2 映射到 /*
Servlet3 映射到 /abc
Servlet4 映射到 *.do
當請求 URL 爲`/abc/a.html`,“/abc/*”和“/*”都匹配,Servlet1 響應
當請求 URL 爲`/abc`時,“/abc/*”和“/abc”都匹配,Servlet3 響應
當請求 URL 爲`/abc/a.do`時,“/abc/*”和“*.do”都匹配,Servlet1 響應
當請求 URL 爲`/a.do`時,“/*”和“*.do”都匹配,Servlet2 響應
當請求 URL 爲`/xxx/yyy/a.do`時,“/*”和“*.do”都匹配,Servlet2 響應