一、Servlet簡介
Servlet運行在服務器端的Java小程序,是sun公司提供的一套規範,用來處理客戶端請求、響應給瀏覽器的動態資源。但Servlet的實質就是Java代碼,通過Java的API動態的向客戶端輸出內容。
Servlet規範:包含三個技術點:
1)Servlet技術
2)filter技術--過濾器
3)listener技術--監聽器
Java web請求-響應過程
二、Servlet的API(生命週期)
(1) Servlet接口中的方法
1)init(ServletConfig config)
執行時機:servlet對象創建的時候的執行
2)service(ServletRequest req, ServletResponse res)
執行時機:每次有http請求 的時候的執行
3)destroy()
執行時機:Servlet對象銷燬的時候執行
(2)
(3)Servlet的生命週期
1)Servlet何時創建
默認第一次訪問Servlet時創建
2)Servlet何時銷燬
服務器關閉servlet就銷燬
3)每次訪問時必須執行的方法
service(ServletRequest req, ServletResponse res)
整個servlet的訪問過程
一次http請求的詳細過程圖解
三、Servlet的配置
(1)基本配置
<servlet>
<servlet-name>quickStartServlet</servlet-name>
<servlet-class>com.alibaba.servlet.QuickStartServlet</servlet-class>
<init-param>
<param-name>url</param-name>
<param-value>www.baidu.com</param-value>
</init-param>
</servlet>
<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>quickStartServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
其中,url-pattern的配置方式
完全匹配 訪問的資源與配置的資源完全相同纔可以訪問到
<url-pattern>/quickStartServlet</url-pattern>
目錄匹配 格式:/虛擬的目錄.../* *代表的任意
<url-pattern>/aaa/bbb/ccc/*</url-pattern>
擴展名匹配 格式:*.擴展名
<url-pattern>*.action</url-pattern>
四、ServletContext對象
1)ServletContext對象簡介
【簡介】
ServletContext即Servlet上下文對象,該對象表示當前的web應用環境信息,一個Web應用只會創建一個ServletContext對象。
Web容器啓動的時候,它會爲每個Web應用程序都創建一個對應的ServletContext對象,它代表當前的web應用。
[注意]
由於一個Web應用中的所有Servlet共享一個ServletContext對象,所以多個Servlet通過ServletContext對象實現數據共享,
ServletContext對象通常稱爲Context域對象。
【ServletContext創建時機】
ServletContext對象是在TomCat服務器加載完當前Web應用後創建出來的。
ServletContext對象是作爲ServletConfig對象成員變量傳入Servlet中。
通過ServletConfig的getServletContext()方法就可以得到ServletContext對象。
看下ServletConfig中相關的ServletContext代碼:
class ServletConfig{ //ServletConfig對象中維護了ServletContext對象的應用
ServletContext context;
getInitParameter();
getInitParameterNames();
public ServletContext getServletContext(){ //返回一個ServletContext對象
return contex;
}
}
在Servet中的init的方法實例化一個ServletConfig
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
[ 注意 ]
this.ServletConfig.getServletContext():通過ServletConfig對象來獲取ServletContext對象。
ServletContext對象:啓動時創建
ServletConfig對象:調用init方法之前創建的,在ServletContext對象之前。
【在Servlet中得到ServletContext的兩種方式】
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 得到ServletContext的方式一
ServletContext context1 = this.getServletConfig().getServletContext();
// 得到ServletContext的方式二
ServletContext context2 = this.getServletContext();
}
【ServletContext的5大作用】
1.獲取web的上下文路徑
String getContextPath();
2.獲取全局的參數
配置全局初始化參數
<!-- 配置全局初始化參數 -->
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
String getInitParameter(String name);
Enumeration getInitParameterNames();
3.和域對象相關的
ServletContext域對象的作用範圍:整個web應用(所有的web資源都可以隨意向servletContext域中存取數據,數據是可以共享)
void setAttribute(String name,Onject object);
Object getAttribute(String name);
void removeAttribute(String name);
域對象(域對象就是在不同資源之前來共享數據,保存數據,獲取數據)
ServletContext是我們學習的第一個域對象(Servlet共有三個域對象ServletContext、HttpServletRequest、HttpSession)
4. 請求轉發的
RequestDispatcher getRequestDispatcher(String path);
在Servlet跳轉頁面:
4.1請求重定向(你找我借錢,我沒有,你自己去找他借錢)
1.地址欄會改變,變成重定向到的地址
2.可以跳轉到項目內的資源,也可以跳轉項目外的資源
3.瀏覽器向服務器發出兩次請求,那麼不能使用請求來作爲域對象來共享數據。
4.2請求轉發(你找我借錢,我沒有,我幫你去向他借錢)
1.地址欄不會改變
2.只能跳轉到項目內的資源,不能跳轉項目外的資源。
3.瀏覽器向服務器發出一次請求,那麼可以使用請求作爲域對象共享數據。
5.讀取web項目的資源文件
String getRealPath(String path);
InputStream getResourceAsStream(String path);
URL getResource(String path);
【利用ServletContext對象來收發數據(Servlet3.0新特性)】
利用ServletContext實現SendServlet和ReceiveServlet之間的數據共享。
四、Servlet實戰案例
主要業務邏輯:就是在Servlet中,首先從request中接受前臺頁面的請求數據,然後,訪問數據庫,將請求數據和數據庫中的數據進行對比,如果數據庫中存在該用戶,則返回成功登陸頁面,否則,返回錯誤提示信息