Servlet 是 Server Applet 的縮寫,是服務端小程序的意思。使用 Java 語言編寫的服務器端程序,主要功能在於交互式地瀏覽和生成數據,生成動態Web內容,Servlet 主要運行在服務器端,並由服務器調用執行,是一種按照 Servlet 標準來開發的類。 是 SUN 公司提供的一門用於開發動態 Web 資源的技術。(言外之意:要實現 web 開發,需要實現 Servlet 標準)
Servlet 本質上也是 Java 類,但要遵循 Servlet 規範進行編寫,沒有 main() 方法,它的創建、使用、銷燬都由 Servlet 容器進行管理(如 Tomcat)。(言外之意:寫自己的類,不用寫 main 方法,別人自動調用)
Servlet 是和 HTTP 協議是緊密聯繫的,其可以處理 HTTP 協議相關的所有內容。這也是 Servlet 應用廣泛的原因之一。
提供了 Servlet 功能的服務器,叫做 Servlet 容器,其常見容器有很多,如 Tomcat, Jetty, WebLogic Server, WebSphere, JBoss 等等。
Servlet實現方式
- 創建動態 web 項目
- 新建類
- 實現 Servlet 規範
- 重寫 service 方法
- 配置 web.xml
- 發佈項目
- 啓動項目
- 訪問並查看結果
案例實操
1)創建動態 web 項目
2)新建類
package com.xxx.web;
public class HelloWeb {
}
3)實現 Servlet 規範
實現 Servlet 規範,即繼承 HttpServlet 類,並導入相應的包,該類中已經完成了通信的規則,我們只需要進行業務的實現即可。
package com.xxx.web;
import javax.servlet.http.HttpServlet;
public class HelloWeb extends HttpServlet {
}
4)重寫 service 方法
滿足 Servlet 規範只是讓我們的類能夠滿足接收請求的要求,接收到請求後需要對請求進行分析,以及進行業務邏輯處理,計算出結果,則需要添加代碼,在規範中有一個叫做 service 的方法,專門用來做請求處理的操作,業務代碼則可以寫在該方法中。
package com.xxx.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloWeb extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("I received a request");
resp.getWriter().write("<h1>Hello World!</h1>");
}
}
5)配置 web.xml
在完成好了一切代碼的編寫後,還需要向服務器說明,特定請求對應特定資源,此時通過一個名叫 web.xml 的配置文件完成。
<!-- 配置servlet -->
<servlet>
<servlet-name>helloweb</servlet-name><!-- 給服務器看的 -->
<servlet-class>com.xxx.web.HelloWeb</servlet-class><!-- servlet對應的資源路徑 -->
</servlet>
<servlet-mapping>
<servlet-name>helloweb</servlet-name><!-- 給服務器看的 -->
<url-pattern>/helloweb</url-pattern><!-- 給瀏覽器看的,對外訪問路徑 -->
</servlet-mapping>
6)發佈項目
到此,需要編寫和配置的地方已經完成,項目已經完整了,但是如果需要外界能夠訪問, 還需要將項目發佈到服務器上並運行服務器。
7)啓動項目
看到類似一長串信息表示啓動成功,接下來就可以訪問項目了
8)訪問並查看結果
在項目正確發佈到服務器上之後,用戶即可通過瀏覽器訪問該項目中的資源。注意 url 的格式正確,tomcat 的端口爲 8080。<http://localhost:8080/hw/helloweb>,頁面結果
後臺結果
到這裏我們的第一個 Servlet 就實現了!
擴展
工作原理
執行過程
客戶端發出請求根據 web.xml 文件的配置,找到對應的 url-pattern 讀取其中的值,找到對應的 servlet-name,找到指定的 class 並加載執行該 class,返回結果由 Web 服務器將結果響應給客戶端