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路徑")

    http://ip地址:8080/servlet路徑?參數名=參數值 (get請求)

  • 重寫(覆蓋)

    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 中有

  1. 指令: &lt;%@ 指令名 %&gt;
  2. 腳本: &lt;% 可以是任意java代碼 %&gt;
  3. 表達式: &lt;%= 表達式 %&gt; 把執行結果顯示在頁面上

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 這個文件沒有修改,請瀏覽器使用上一次緩存的文件

這些數字稱爲響應狀態碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章