JavaWeb_day33:Servlet 2
Servlet
概念: 伺服器端小程式
作用:1) 處理請求 2) 返回響應
執行環境:Tomcat (apache) 8.5 支援servlet 3.1
Tomcat: 目錄結構
bin 指令碼目錄 startup.bat shutdown.bat(ctrl+c)
conf 配置目錄 預設埠8080, server.xml 搜尋8080 然後修改
logs 日誌目錄
webapps 應用程式目錄
編寫servlet
* java類要繼承 HttpServlet
* 在servlet類上添加註解 @WebServlet(urlPatterns="/servlet路徑")
4行
http://ip地址:8080/servlet路徑?引數名=引數值 (get請求) * 重寫(覆蓋)
13行
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1. 處理請求 request.setCharacterEncoding("utf-8"); // 設定解碼字符集 request.getParameter("引數名"); // 返回引數值 String // 2. 返回響應 response.setContentType("text/html;charset=utf-8"); // 設定響應的內容格式,及字元編碼 PrintWriter w = response.getWriter(); // 拿到字元輸出流 w.println("html程式碼"); }
1. servlet 的生命週期
瀏覽器首次向此servlet傳送請求時,會建立它的例項物件;以後再發送請求使用的仍然是第一次建立的物件。
結論:整個生命週期中,servlet只有一個例項(單例的)
- 構造方法首先執行(只執行一次)
- 初始化方法init (只執行一次)
- 服務方法 service (反覆被執行)來一次請求執行一次
- 銷燬方法 destroy (只執行一次)在伺服器停止前,或重新部署時
2. doGet與doPost
覆蓋service方法,可以處理所有型別的請求
覆蓋doGet方法,僅能處理get方式的請求
覆蓋doPost方法,僅能處理post方式的請求
3. 練習,把資料庫中的資料展現在頁面上
一個java web專案:
|-
|-WEB-INF (受保護不能直接訪問)
|-classes 放自己編寫的java類
|-lib 放第三方的jar包
|-css 放樣式表
|-js 放js指令碼
|-jsp 放網頁檔案
|-index.jsp 首頁面 如果沒有寫具體的地址,會按 index.html, index.jsp
注意:在一個專案內,多個servlet的urlPatterns不能重複,要確保唯一
使用serlvet生成html標籤,程式碼難以維護,可讀性差,容易出錯。
4. jsp
java server page
用途:主要用來生成html標籤
在表現形式上類似於html 但多了一行
2行
<%@ page contentType="text/html;charset=utf-8" %>
上面的程式碼稱為 page 指令,主要作用就是指明此頁面是一個jsp頁面,並且通過contentType說明他的字元編碼和格式
jsp 中有
- 指令:
<%@ 指令名 %>
- 指令碼:
<% 可以是任意java程式碼 %>
- 表示式:
<%= 表示式 %>
把執行結果顯示在頁面上
5. EL表示式語言
expression language 在jsp用來展示結果的語言
語法${ 表示式語言 }
要用el表示式顯示覆雜的內容,需要把內容提前放入作用域
, el再從作用域
中把內容取出來顯示
// 設定屬性
pageContext.setAttribute("名稱", Object); // 把內容起一個名字放入作用域
之後就可以通過EL表示式
${pageScope.名稱}
el表示式可以通過
${物件.屬性名} 但這裡的屬性名,依據是物件的get方法,而不是私有屬性名
把get方法中get去掉(或把is方法的is去掉),剩餘的單詞首字母小寫,作為物件的屬性名,例如
getName() ==> name
getUsername() ==> username
getHelloWorld() ==> helloWorld
isClose() ==> close
6. JSTL
java 標準標籤庫
java standard tag library
主要的工具就是配合el表示式,實現迴圈,條件判斷等功能
前提: 加入jstl-1.2的jar包
匯入標籤庫
<%@ taglib uri="標籤庫唯一標識" prefix="字首" %>
6.1 forEach
4行
<c:forEach items="要遍歷的集合" var="臨時變數名" begin="起始數字" end="結束數字">
${臨時變數名}
</c:forEach>
要遍歷的集合 必須使用${} 從作用域獲取
6.2 if
2行
<c:if test="布林條件">內容</c:if>
7. MVC 思想
Model 模型 ==> 資料(例如從資料庫查詢出來的list集合, 裡面包含java物件)
View 檢視 ==> 資料的展現形式 (jsp就是一種檢視技術)
Controller 控制器 ==> 把模型和檢視聯絡起來 (servlet 充當控制器作用)
由servlet器查詢資料,把資料放入作用域,跳轉至jsp檢視
jsp檢視從作用域中獲取資料,並展示
注意: 伺服器常見的錯誤型別
500 Internal Server Error 伺服器內部錯誤,由於應用程式自己沒有正確處理異常,異常拋給了tomcat,這時就會出現500
404 Not Found 資源未找到錯誤,發生於要訪問的資源不存在(資源可能是servlet, jsp, html)
405 Method Not Allowed 方法不支援,
當沒有覆蓋doGet但傳送了get請求時
當沒有覆蓋doPost但傳送了post請求時
200 OK 表示這次請求正常,沒有錯誤
304 這個檔案沒有修改,請瀏覽器使用上一次快取的檔案
這些數字稱為響應狀態碼