JavaWeb 入門:Hello Servlet
Servlet 概述
- serlvet sun公司 開發(fā)動態(tài)web 的一門技術(shù)。
- Servlet(Server Applet)是Java Servlet的簡稱,稱為小服務(wù)程序或服務(wù)連接器,用Java編寫的服務(wù)器端程序,具有獨立于平臺和協(xié)議的特性,主要功能在于交互式地瀏覽和生成數(shù)據(jù),生成動態(tài)Web內(nèi)容。
- 廣義的Servlet是指任何實現(xiàn)了這個Servlet接口的類,。Servlet運行于支持Java的應(yīng)用服務(wù)器中。從原理上講,Servlet可以響應(yīng)任何類型的請求,但絕大多數(shù)情況下Servlet只用來擴展基于HTTP協(xié)議的Web服務(wù)器。
- sun公司在api 中提供了一個接口 如果我們想要開發(fā)一個servlet程序 我們只需要做到兩點
1、寫一個普通類實現(xiàn)servlet 這個接口
2、把寫好的servlet 放進(jìn)服務(wù)器。
sun公司給出了兩個默認(rèn)的實現(xiàn)類 HttpServlet 和 GenericServlet
Hello Servlet
工程結(jié)構(gòu)
![[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KhBPeiJV-1620396757425)(C:\Users\ASUS\Desktop\javaweb_study\javaweb\web服務(wù)器講解.assets\image-20210507221216543.png)]](http://img.jbzj.com/file_images/article/202107/2021071615512373.png)
1、創(chuàng)建一個maven 項目 添加web框架(將web.xml 換成最新的4.0 后面有完整配置文件) 配置tomcat
2、導(dǎo)入依賴
dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
3、編寫一個Servlet程序 編寫一個普通類實現(xiàn)HttpServlet接口
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* @author crush
* idea 提示快捷鍵 alt + enter
* 重寫快捷鍵 是 ctrl + o
*/
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter writer = resp.getWriter();
writer.print("hello Servlet");
System.out.println("");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
4、編寫Servlet 的映射
為什么需要映射?我們是不是需要通過瀏覽器去訪問,而瀏覽器需要連接web服務(wù)器,需要在web 服務(wù)器注冊我們寫的servlet,還需要給它一個瀏覽器能夠訪問的路徑。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.crush.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
測試:
![[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-dO79ndZl-1620396757428)(C:\Users\ASUS\Desktop\javaweb_study\javaweb\web服務(wù)器講解.assets\image-20210507221205112.png)]](http://img.jbzj.com/file_images/article/202107/2021071615512374.png)
Servlet的運行過程
Servlet程序是由Web服務(wù)器調(diào)用的,Web服務(wù)器收到客戶端的Servlet訪問請求后:
- ①Web服務(wù)器首先檢查是否已經(jīng)裝載并創(chuàng)建了該Servlet的實例對象。如果是,則直接執(zhí)行第④步,否則,執(zhí)行第②步;
- ②裝載并創(chuàng)建該Servlet的一個實例對象;
- ③調(diào)用Servlet實例對象的init()方法;
- ④創(chuàng)建一個用于封裝HTTP請求消息的HttpServletRequest對象和一個代表HTTP響應(yīng)消息的HttpServletResponse對象,然后調(diào)用Servlet的service()方法并將請求和響應(yīng)對象作為參數(shù)傳遞進(jìn)去;
- ⑤Web應(yīng)用程序被停止或重新啟動之前,Servlet引擎將卸載Servlet,并在卸載之前調(diào)用Servlet的destroy()方法。

5、Mapping 問題:
1、一個Servlet 可以指定一個映射路徑
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.crush.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
2、一個Servlet 可以指定多個映射路徑
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.crush.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
3、一個Servlet 可以指定通用映射路徑
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.crush.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello.*</url-pattern>
</servlet-mapping>
4、默認(rèn)請求路徑
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.crush.servlet.HelloServletDays</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
5、可以指定一些前綴或者后綴
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.crush.servlet.HelloServletDays</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>*.crush</url-pattern>
</servlet-mapping>
6、優(yōu)先級問題
指定固定的映射路徑優(yōu)先級最高,如果找不到就會走默認(rèn)的處理請求。
模擬指定error 頁面
1、寫一個ErrorServlet 類
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* @Author: crush
* @Date: 2021-05-07 23:03
* version 1.0
*/
public class ErrorServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter writer = resp.getWriter();
writer.print("404");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
2、配置映射路徑
<servlet>
<servlet-name>error</servlet-name>
<servlet-class>com.crush.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
測試:訪問不存在的路徑 會直接到訪問我們自己寫的ErrorServlet 訪問其他的具體的路徑仍然不變
![[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-PUm7RU9R-1620400096023)(C:\Users\ASUS\Desktop\JavaWeb_study\JavaWeb\5Servlet概述.assets\image-20210507230742029.png)]](http://img.jbzj.com/file_images/article/202107/2021071615512476.png)
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
使用springboot每日推送早安問候語到用戶微信的全過程
近期網(wǎng)上又出現(xiàn)一股給女朋友做微信公眾號推送的潮流,所以這篇文章主要給大家介紹了關(guān)于如何使用springboot每日推送早安問候語到用戶微信的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11
MyBatis-Plus實現(xiàn)公共字段自動填充功能詳解
在開發(fā)中經(jīng)常遇到多個實體類有共同的屬性字段,這些字段屬于公共字段,也就是很多表中都有這些字段,能不能對于這些公共字段在某個地方統(tǒng)一處理,來簡化開發(fā)呢?MyBatis-Plus就提供了這一功能,本文就來為大家詳細(xì)講講2022-08-08
JAVA使用commos-fileupload實現(xiàn)文件上傳與下載實例解析
這篇文章主要介紹了JAVA使用commos-fileupload實現(xiàn)文件上傳與下載的相關(guān)資料,需要的朋友可以參考下2016-02-02

