[TOC]
# 什么是Servlet
Servlet 運行在服務端的Java小程序,是sun公司提供一套規范(接口),用來處理客戶端請求、響應給瀏覽器的動態資源。但servlet的實質就是java代碼,通過java的API 動態的向客戶端輸出內容
servlet規范:包含三個技術點
1)servlet技術
2)filter技術---過濾器
3)listener技術---監聽器
# 配置

~~~
<!-- servlet類的配置 -->
<servlet>
<servlet-name>first</servlet-name>
<servlet-class>study.MyFirst</servlet-class>
<init-param>
<param-name>url</param-name>
<param-value>jdbc:mysql:///mydb</param-value>
</init-param>
<!-- servlet在啟動的時候創建對象,里面數字代表優先級,越小優先級越大 -->
<load-on-startup>3</load-on-startup>
</servlet>
<!-- servlet虛擬路徑配置 -->
<servlet-mapping>
<servlet-name>first</servlet-name>
<url-pattern>/abc</url-pattern>
</servlet-mapping>
~~~
其中url-pattern的配置方式:
1)完全匹配 訪問的資源與配置的資源完全相同才能訪問到
2)目錄匹配 格式:/虛擬的目錄../* *代表任意
3)擴展名匹配 格式:*.擴展名
注意:第二種與第三種不要混用 /aaa/bbb/*.abcd(錯誤的)
2.服務器啟動實例化Servlet配置
Servlet的何時創建:默認第一次訪問時創建
為什么是默認?
當在servlet的配置時 加上一個配置 <load-on-startup> servlet對象在服務器啟動 時就創建
3.缺省Servlet
可以將url-pattern配置一個/,代表該servlet是缺省的servlet
什么是缺省的servlet?
當你訪問資源地址所有的servlet都不匹配時 , 缺省的servlet負責處理
其實,web應用中所有的資源的響應都是servlet負責,包括靜態資源
4.歡迎頁面

# 實現步驟
實現步驟:
1)創建類實現Servlet接口
2)覆蓋尚未實現的方法---service方法
3)在web.xml進行servlet的配置
但在實際開發中,我們不會直接去實現Servlet接口,因為那樣需要覆蓋的方法太多, 我們一般創建類繼承HttpServlet
實現步驟:
1)創建類繼承HttpServlet類
2)覆蓋doGet和doPost
3)在web.xml中進行servlet的配置
# 整個請求對象

每次請求都會創建新的請求和響應對象
# 生命周期
**Servlet接口中的方法**
1)init(ServletConfig config)
何時執行:servlet對象創建的時候執行
ServletConfig : 代表的是該servlet對象的配置信息
~~~
public void init(ServletConfig arg0) throws ServletException {
// 1.獲得servlet的---<servlet-name>abc</servlet-name>
String servletName = arg0.getServletName();
System.out.println(servletName);
// 2.獲得該servlet的初始化參數
String initParameter = arg0.getInitParameter("url");
System.out.println(initParameter);
//3.獲得Servletcontext對象,這個對象是局部的
ServletContext servletContext = (ServletContext) arg0.getServletContext();
}
~~~
2)service(ServletRequest request,ServletResponse response)
何時執行:每次請求都會執行
ServletRequest :代表請求 認為ServletRequest 內部封裝的是 http請求的信息
ServletResponse :代表響應 認為要封裝的是響應的信息
3)destroy()
何時執行:servlet銷毀的時候執行
**HttpServlet類的方法**
1)init()
2)doGet(HttpServletRequest request,HttpServletResponse response)
3)doPost(HttpServletRequest request,HttpServletResponse response)
4)destroy()
(3)Servlet的生命周期(面試題)
1)Servlet何時創建
默認第一次訪問servlet時創建該對象
2)Servlet何時銷毀
服務器關閉servlet就銷毀了
3)每次訪問必然執行的方法
service(ServletRequest req, ServletResponse res)方法
# ServletContext對象
## 什么是ServletContext對象
ServletContext代表是一個web應用的環境(上下文)對象,ServletContext對象 內部封裝是該web應用的信息,ServletContext對象一個web應用只有一個
問題:一個web應用有幾個servlet對象?----多個
ServletContext對象的生命周期?
創建:該web應用被加載(服務器啟動或發布web應用(前提,服務器啟動狀態))
銷毀:web應用被卸載(服務器關閉,移除該web應用)
## 怎樣獲得ServletContext對象
1)ServletContext servletContext = config.getServletContext();
2)ServletContext servletContext = this.getServletContext();
## ServletContext的作用
(1)獲得web應用全局的初始化參數
web.xml中配置初始化參數

通過context對象獲得參數

(2)獲得web應用中任何資源的絕對路徑
方法:String path = context.getRealPath(相對于該web應用的相對地址);
~~~
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//獲得ServletContext對象
ServletContext context = getServletContext();
//1、獲得初始化參數
String initParameter = context.getInitParameter("driver");
System.out.println(initParameter);
//2、獲得a b c d.txt的絕對路徑
//2.1 獲得a.txt
String realPath_A = context.getRealPath("a.txt");
System.out.println(realPath_A);
//2.2 獲得b.txt
String realPath_B = context.getRealPath("WEB-INF/b.txt");
System.out.println(realPath_B);
//2.3 獲得c.txt
String realPath_C = context.getRealPath("WEB-INF/classes/c.txt");
System.out.println(realPath_C);
//在讀取src(classes) 下的資源是可以同類加載器----專門加載classes 下的文件的
//getResource() 參數是一個相對地址 相對classes
//ContextServlet是我這個文件的類名,換成自己類的名字就行
String path = ContextServlet.class.getClassLoader().getResource("c.txt").getPath();
System.out.println(path);
//3、域對象---向servletContext中存數據,小的向大的存,大的不能向小的存
context.setAttribute("name", "zhangsan");
}
~~~
(3)ServletContext是一個域對象
什么是域對象?什么是域?
存儲數據的區域就是域對象
ServletContext域對象的作用范圍:整個web應(所有的web資源都可以隨意向 servletcontext域中存取數據,數據可以共享)
域對象的通用的方法:
setAtrribute(String name,Object obj);
getAttribute(String name);
removeAttribute(String name);
# eclipse模板
command+, 打開配置搜templates,是java下面的
點擊new

- 基礎
- 編譯和安裝
- scanner類(鍵盤錄入)
- Random類(隨機數)
- 數組
- 方法
- 類
- ArrayList集合
- char與int
- eclipse
- IDEA
- 變量與常量
- 常用API
- String,StringBuffer,StringBuilder
- 正則,Date,DateFormat,Calendar
- 包裝類,System,Math,Arrays,BigInteger,BigDecimal
- 集合,迭代器,增強for,泛型
- List,set,判斷集合唯一
- map,Entry,HashMap,Collections
- 異常
- IO
- File
- 遞歸
- 字節流
- 字符流
- IO流分類
- 轉換流
- 緩沖流
- 流的操作規律
- properties
- 序列化流與反序列化流
- 打印流
- commons-IO
- IO流總結
- 多線程
- 線程池
- 線程安全
- 線程同步
- 死鎖
- lock接口
- ThreadLoad
- 等待喚醒機制
- 線程狀態
- jdbc
- DBUtils
- 連接池DBCP
- c3p0連接池
- 網絡編程
- 多線程socket上傳圖片
- 反射
- xml
- 設計模式
- 裝飾器模式
- web service
- tomcat
- Servlet
- response
- request
- session和cookie
- JSP
- EL
- JSTL
- 事務
- 監聽器Listener
- 過濾器Filter
- json
- linux安裝軟件
- 反射詳解
- 類加載器和注解
- 動態代理
- jedis
- Hibernate
- 簡介
- 創建映射文件
- Hibernate核心配置文件
- 事務和增刪改查
- HibernateUtils
- 持久化對象的三種狀態
- 檢索方式
- query
- Criteria
- SQLQuery
- 持久化類
- 主鍵生成策略
- 緩存
- 事務管理
- 關系映射
- 注解
- 優化
- struts2
- 搭建
- 配置詳解
- Action
- 結果跳轉方式
- 訪問ServletAPI方式
- 如何獲得參數
- OGNL表達式
- valueStack 值棧
- Interceptor攔截器
- spring
- 導包
- IOC和DI
- Bean獲取與實例化
- Bean屬性注入
- spring注解
- 注解分層
- junit整合
- aop
- 動態代理實現
- cglib代理實現
- aop名詞
- spring的aop
- aop-xml詳解
- aop-注解詳解
- 代理方式選擇
- jdbcTemplate
- spring事務管理
- 回滾注意
- 事務傳播屬性
- MyBatis
- MyBatis簡介
- 入門程序
- 與jdbc hibernate不同
- 原始Dao開發
- Mapper動態代理方式
- SqlMapConfig.xml配置文件
- 輸入參數pojo包裝類
- resultMap
- 動態sql
- 一對一關聯
- 一對多
- 整合spring
- 逆向工程
- maven
- maven簡介
- 倉庫
- maven目錄結構
- maven常用命令
- 生命周期
- eclipse中maven插件
- 入門程序
- 整合struct
- 依賴范圍
- 添加插件
- idea配置
- jar包沖突
- 分模塊開發
- 構建可執行的jar包(包含依賴jar包)
- springMVC
- 處理流程
- java面試
- java版本升級
- java1-8版本變更
- java9新特性
- 鎖
- java資料
- idea
- jdk版本切換
- log4j
- 入門實例
- 基本使用方法
- Web中使用Log4j
- spring中使用log4j
- java代碼優化