概念: 服務器端小程序
作用: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路徑")
-
重寫(覆蓋)
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 但多了一行
<%@ 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
<c:forEach items="要遍歷的集合" var="臨時變量名" begin="起始數字" end="結束數字">
${臨時變量名}
</c:forEach>
要遍歷的集合 必須使用${} 從作用域獲取
6.2 if
<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 這個文件沒有修改,請瀏覽器使用上一次緩存的文件
這些數字稱爲響應狀態碼