學習課程: 【這可能是B站講的最好的Servlet教程,5小時打通Servlet全套教程丨2022最新版,輕鬆掌握servlet基礎+案例實操】 https://www.bilibili.com/video/BV1Kr4y1V7ZE/?share_source=copy_web&vd_source= ...
學習課程: 【這可能是B站講的最好的Servlet教程,5小時打通Servlet全套教程丨2022最新版,輕鬆掌握servlet基礎+案例實操】 https://www.bilibili.com/video/BV1Kr4y1V7ZE/?share_source=copy_web&vd_source=2c07d62293f5003c919b2df9b2e0549e
Servlet的實現
基本介紹
Servlet是Server與Applet的縮寫,是服務端小程式的總思。使用Java語言編寫的伺服器端程式,可以像生成動態的WEB頁,Servlet主要運行在伺服器端,並由伺服器調用執行,是一種按照Servlet標準來開發的類。是SUN公司提供的一門用於開發動態Web資源的技術。(言外之意:要實現web開發,需要實現Servlet標準)
它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 伺服器上的資料庫或應用程式之間的中間層。使用 Servlet,您可以收集來自網頁表單的用戶輸入,呈現來自資料庫或者其他源的記錄,還可以動態創建網頁。
Servlet本質上也是Java類,但要遵循Servlet規範進行編寫,沒有main()方法,它的創建、使用、銷毀都由Servlet容器進行管理(如Tomcat)。(言外之意:寫自己的類,不用寫main方法,別人自動調用)
Servlet是和HTTP協議是緊密聯繫的,其可以處理HTTP協議相關的所有內容。這也是Servlet應用廣泛的原因之一。
提供了Servlet功能的伺服器,叫做Servlet容器,其常見容器有很多,如Tomcat,Jetty,WebLogic,Server,WebSphere,JBoss等等。
Servlet架構:
實現Servlet規範
實現 Servlet 規範,即繼承 HttpServlet 類,需要導入相應的包,(在此之前需要導入對應的servlet的jar包)。該類中已經完成了通信的規則,我們只需要進行業務的實現即可。
import javax.servlet.http.HttpServlet;
public class servlet01 extends HttpServlet{
}
重寫service方法和設置註解
-
重寫service方法
滿足Servlet規範只是讓我們的類能夠滿足接收請求的要求,接收到請求後需要對請求進行分析,以及進行業務邏輯處理,計算出結果,則需要添加代碼,在Servlet中有一個叫做service的方法,專門用來做請求處理的操作,業務代碼則可以寫在該方法中。
service() 方法是執行實際任務的主要方法。Servlet 容器(即 Web 伺服器)調用 service() 方法來處理來自客戶端(瀏覽器)的請求,並把格式化的響應寫回給客戶端。
每次伺服器接收到一個 Servlet 請求時,伺服器會產生一個新的線程並調用服務。service() 方法檢查 HTTP 請求類型(GET、POST、PUT、DELETE 等),併在適當的時候調用 doGet、doPost、doPut,doDelete 等方法。
-
設置註解
在完成好了一切代碼的編寫後,還需要向伺服器說明,特定請求對應特定資源。
開發servletI項目,使用@WebServlet將一個繼承於javax.servlet.http,HttpServlet的類定義為Servlet組件。
在Servlet3.0中,可以使用@VebServleti註解將一個繼承於javax.servlet.http.HttpServlet的類標註為可以處理用
戶請求的Servlet。
package com.xxxx.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("/ser01")
//@WebServlet(name = "Servlet01", value = "/ser01")//name就是一個名字可寫可不寫,value後面可以接數組,數組中的地址都可以訪問到該頁面
//@WebServlet(name = "Servlet01", value = {"/ser01", "/ser001"})
@WebServlet("/ser01")//路徑中的 "/" 一定不能忘
public class Servlet01 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Hello Servlet!");
resp.getWriter().write("Hello Servlet!");
}
}
實現Servlet的方式
- 繼承HttpServlet類
- 繼承GenericServlet類:GenericServlet類是HttpServlet類的父類,所以也可以用來實現Servlet;
- 實現Servlet介面:GenericServlet類也實現了Servlet介面,實現Servlet介面也可以使用Servlet;
以上三種方式通常使用HttpServlet,方法也更全面;
繼承GenericServlet類:
package com.xxxx.servlet;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/ser02")
public class servlet02 extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("繼承GenericServlet類...");//GenericServlet是HttpServlet的父類
}
}
實現Servlet介面:
package com.xxxx.servlet;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/ser03")
public class servlet03 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("實現Servlet介面");//GenericServlet實現了該介面
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}