1. 程式人生 > >JavaWeb_day33:Servlet 2

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只有一個例項(單例的)

  1. 構造方法首先執行(只執行一次)
  2. 初始化方法init (只執行一次)
  3. 服務方法 service (反覆被執行)來一次請求執行一次
  4. 銷燬方法 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 中有

  1. 指令: <%@ 指令名 %>
  2. 指令碼: <% 可以是任意java程式碼 %>
  3. 表示式: <%= 表示式 %> 把執行結果顯示在頁面上

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 這個檔案沒有修改,請瀏覽器使用上一次快取的檔案

這些數字稱為響應狀態碼