JavaWeb| 深入servlet技術(一)
- 2019 年 10 月 4 日
- 筆記
1.寫在前面的話
今天起正式開始寫JavaWeb的專欄,前面的一篇關於HTTP協議的那些東西,也是為這個專欄打基礎的,廢話不多說,我們今天來認識認識servlet這個傢伙!
2.servlet這傢伙到底是什麼?
Servlet(Server Applet)是Java Servlet的簡稱,稱為小服務程序或服務連接器,用Java編寫的服務器端程序,具有獨立於平台和協議的特性,主要功能在於交互式地瀏覽和生成數據,生成動態Web內容。
狹義的Servlet是指Java語言實現的一個接口,廣義的Servlet是指任何實現了這個Servlet接口的類,一般情況下,人們將Servlet理解為後者。Servlet運行於支持Java的應用服務器中。從原理上講,Servlet可以響應任何類型的請求,但絕大多數情況下Servlet只用來擴展基於HTTP協議的Web服務器。
最早支持Servlet標準的是JavaSoft的Java Web Server,此後,一些其它的基於Java的Web服務器開始支持標準的Servlet。
那麼servlet到底有什麼作用?
1. 接收客戶端發送過來的請求數據
2. 處理請求
3. 將處理的結果通過響應發送到客戶端
3.咱們來創建一個servlet看看
我是用intellij idea來開發的,所以創建servlet比較方便,idea可以用servlet3.0來創建servlet,具體看下圖↓
就這樣簡單的兩步就創建了我們的servlet,我們來看看servlet裏面有些啥吧
package com.kuls.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "JAPServlet") public class JAPServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
直接扔給大家一堆代碼,這是我們最原始的一個servlet,在3.0版本中,我們還需要在注釋裏面添加一個參數(上面的第十行) :
@WebServlet(name = "JAPServlet",urlPatterns = "/demo")
這樣我們就成功的創建了我們的第一個servlet,接下來咱們來操作操作!
4.HttpServletRequest簡介-獲取請求行和請求頭
在servlet的API中,定義了一個叫HttpServletRequest的接口,它是繼承自ServletRequest接口,專門用於封裝HTTP的請求,因為HTTP請求裏面包括請求體,請求行,請求頭,所以在HttpServletRequest中分別定義了接收請求體,請求行,請求頭的相關方法。
特意在網上找了張圖,裏面都是獲取請求行相關信息的方法:
光看沒用,咱們去代碼中實現一下:
@WebServlet(name = "JAPServlet",urlPatterns = "/demo") public class JAPServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("獲取請求方法:"+request.getMethod()); System.out.println("返回url:"+request.getRequestURI()); System.out.println("獲取URL中屬於web應用程序的路徑"+request.getContextPath()); } }
我在doGet()方法中寫了幾個方法,寫完之後我們進行部署,然後去訪問http://localhost:8080/demo1_war_exploded/demo(注意:這個是Tomacat給我們項目分配的網址,這個是可以修改的,後面的demo就是我們urlPatterns中所定義的參數),訪問之後可以看到控制台給我們返回的信息:
獲取請求方法:GET 返回url:/demo1_war_exploded/demo 獲取URL中屬於web應用程序的路徑/demo1_war_exploded
上面主要講解了獲取請求行的方法,接下來我們來講解一下獲取請求頭的相關方法:
同樣是找了張圖,由於篇幅關係,這次我就不給大家代碼演示了。
5.HttpServletResponse獲取請求參數
獲取請求參數:
上面我們說過我們把需要傳遞的參數放在請求行的url中或者是放在請求體中,當我們需要獲取這些參數時,都是可以通過上面的方法來獲取的。
這裡我給大家舉個小栗子吧:
1.我們首先簡單的寫一個jsp,在jsp中寫一個表單,如果這個地方不會,大家可以去相關的教程網站學習。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> <form action="demo" method="get"> 用戶名:<input name="username" type="text"> <input type="submit" name="tijiao"> </form> </body> </html>
2.我們來編寫servlet:
@WebServlet(name = "JAPServlet",urlPatterns = "/demo") public class JAPServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); System.out.println(username); } }
同樣的步驟部署我們的網站,然後可以看到
咱們隨便輸入一個「JAVAandPython君」,點擊提交,咱們回到控制台↓
可以看到我們已經獲取到數據並且打印出來了,其他方法也是類似的使用!
6.response對象發送響應行和響應頭
在servlet的API中,定義了一個叫HttpServletResponse的接口,它是繼承自HttpServletResponse接口,專門用於封裝HTTP的請求,因為HTTP請求裏面包括請求體,請求行,請求頭,所以在HttpServletResponse中分別定義了接收請求體,請求行,請求頭的相關方法。
發送響應行:
可以看到這兩個方法都是設置狀態碼,但是sendError()只能發送錯誤狀態的狀態碼,setStatus()只能發送成功的狀態碼。如果是一個404界面,我們則需要用sendError()傳送一個狀態碼。
發送響應頭:
這些方法大家需要了解一下就行了,我們需要使用某些數據的時候可以來查看這些方法。
7.HttpServletResponse發送請求體
由於在HTTP響應消息中,大量的數據都是通過響應體來進行傳遞的,因此servletResponse遵循以IO流傳遞大數據的設計理念,所以定義了兩個與輸出流相關的方法:
像我們的文字、視頻、音頻之類的都可以通過二進制來進行輸出,咱們接着上次的代碼去實現一下:
@WebServlet(name = "JAPServlet",urlPatterns = "/demo") public class JAPServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); System.out.println(username); String result = "恭喜你!成功啦!"; ServletOutputStream stream = response.getOutputStream(); stream.write(result.getBytes()); } }
部署一下網站;
可以看到我們成功的傳送到客戶端瀏覽器!
END 總結
其實這部分內容大部分都是需要死記硬背的,也就是純粹的知識點,不過沒記住也沒關係,可以收藏一下這篇文章,忘記了的話可以反過來看一看,servlet是整個javaweb裏面的基礎核心,很多的框架都是基於servlet來實現的,所以這部分的知識一定要掌握紮實,接下來我會帶着大家一起學Javaweb並且帶着大家去寫一個基於MVC的項目!希望大家持續關注,Java的開發框架的視頻也會慢慢出來的。