快速入門
- 編寫一個類,實現Servlet接口,重寫5個方法。
- 編寫一個類,繼承GenericServlet類,重寫一個方法。
- 配置文件,配置Servlet信息。
<!-- 先配置Servlet信息 -->
<servlet>
<!-- 配置Servlet名稱,名稱必須唯一 -->
<servlet-name>ServletDemo1</servlet-name>
<!-- 配置Servlet的完全路徑(包名+類名) -->
<servlet-class>cn.itcast.servlet.ServletDemo1</servlet-class>
</servlet>
<!-- 配置Servlet映射(訪問路徑) -->
<servlet-mapping>
<!-- 配置Servlet名稱,和上面的名稱必須相同 -->
<servlet-name>ServletDemo1</servlet-name>
<!-- 配置虛擬路徑(訪問路徑) -->
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
Servlet的生命周期
生命周期:實例被創建,對外提供服務,銷毀。
- Servlet被創建后,調用init方法進行初始化(不是服務器一啟動實例就被創建,第一次請求訪問時servlet實例才被創建)
void init(ServletConfig config)
- 從客戶端發送所有的請求是service方法進行處理的。(有一次請求就調用一次service方法)
void service(ServletRequest req, ServletResponse res)
- 從服務器中移除服務,調用destroy方法。(服務器關閉,手動移除時調用,所以只調用一次)
void destroy()
Servlet的生命周期:第一次請求的時候,Servlet實例被創建,立即調用init方法進行初始化。實例通過service方法提供服務。服務器關閉或者移除服務時,調用destroy方法進行銷毀。
Servlet自動加載
Servlet默認是第一次訪問時候創建實例。通過配置,服務器啟動,創建實例。
init做初始化的操作,非常消耗時間的。
在<servlet>標簽下
<load-on-startup>3</load-on-startup>
-
值是正整數
- 如果值越小,優先級越高。
配置虛擬路徑(訪問路徑)
<servlet-mapping>
<url-pattern>/demo5</url-pattern>
</servlet-mapping>
* 完全路徑匹配
* 以/開頭的 /demo5 /servlet/demo5
* 訪問:http://localhost/day09/demo5
* 目錄匹配
* 以/開頭的 /*
* 訪問:http://localhost/day09/demo5可以訪問
* 擴展名匹配
* 不能以/開頭的 *.do *.action
* 訪問:http://localhost/day09/demo5.do
* 優先級:完全路徑匹配 > 目錄匹配 > 擴展名匹配(*****)
WEB開發中路徑的問題
* 相對路徑
* 一個文件相對于另一個文件的位置的關系。
* 不能以/開頭 寫法: ./demo等價于demo(當前目錄) ../demo(上一級目錄)
* 訪問1.html: http://localhost/day09/1.html
* 訪問demo5: http://localhost/day09/demo5
* 從1.html中去訪問demo5:./demo5 demo5
* 訪問2.html: http://localhost/day09/html/2.html
* 訪問demo5: http://localhost/day09/demo5
* 從2.html訪問demo5:../demo5
* 絕對路徑(推薦使用)
* 以/開頭的
* 訪問demo5: http://localhost/day09/demo5
* 從1.html使用絕對路徑訪問demo5:http://localhost/day09/demo5
* 簡寫方式:/day09/demo5
* 客戶端絕對路徑
* /day09/demo5 需要寫項目名
* 服務器絕對路徑
* /demo5 不能寫項目名
ServletConfig對象和配置文件相關
-
配置初始化參數
- 需要在<servlet></servlet>標簽下配置。
- 如果要是配置在某個servlet的標簽下,那么只能在該servlet中獲取初始化參數。
<init-param>
<param-name>username</param-name>
<param-value>root</param-value>
</init-param>
String getServletName() 獲取配置文件中servlet的名稱
String getInitParameter(String name) 獲取初始化參數
Enumeration getInitParameterNames() 獲取初始化參數的名稱們
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 測試ServletConfig對象的ApplicationContext
// 先獲取ServletConfig對象
ServletConfig config = getServletConfig();
// 獲取配置文件中Servlet的名稱
System.out.println("Servlet的名稱"+config.getServletName());
// 獲取初始化的參數
String username = config.getInitParameter("username");
Enumeration<String> e = config,getInitParameterNames();
while(e.hasMoreElements()){
String name = e.nextElement();
String value = config.getInitParameter(name);
System.out.println(name+" : "+value);
}
}
ServletContext對象(域對象)
* 定義:WEB容器在啟動時,它會為每個WEB應用程序都創建一個對應的ServletContext對象,它代表當前web應用。
一個WEB應用對應一個ServletContext對象
一個WEB應用下有多個Servlet程序
所有的servlet程序都共享同一個ServletContext對象
demo1存入內容 ServletContext demo2中取出來 實現數據共享
* 作用:
* 獲取WEB應用全局初始化參數
* 在web.xml中配置
<context-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</context-param>
String getInitParameter(String name)
getInitParameterNames()
* 實現數據的共享(*****)
void setAttribute(String name, Object object) 存入數據
void removeAttribute(String name) 刪除數據
Object getAttribute(String name) 獲取數據
* 讀取資源文件(*****)
InputStream getResourceAsStream(String path) 通過文件的地址獲取輸入流
String getRealPath(String path) 通過文件的地址獲取文件的絕對磁盤路徑
HTTP的協議
-
請求
- referer 記住當前網頁的來源
- user-agent 瀏覽器版本信息
- if-modefied-since
-
響應
- 響應頭
- location 和302一起來完成重定向的操作
- refresh 頁面的定時刷新
- last-modefied 和 if-modefied-since和304狀態碼一起來控制緩存。
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_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>OneServlet</servlet-name>
<servlet-class>PackageName.ServletName</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>OneServlet</servlet-name>
<url-pattern>/foo</url-pattern>
</servlet-mapping>
</web-app>