JavaWeb學習筆記7 —— Servlet
參考教程B站狂神https://www.bilibili.com/video/BV12J411M7Sj
Servlet簡介
- Servlet就是sun公司開發動態web的一門技術
- Sun在這些API中提供一個接口叫做:Servlet,如果你想開發一個Servlet程序,只需要完成兩個小步驟:
- 編寫一個類,實現Servlet接口
- 把開發好的Java類部署到web服務器中。
把實現了Servlet接口的Java程序叫做,Servlet
Servlet入門
Serlvet接口Sun公司有兩個默認的實現類:HttpServlet,GenericServlet
- 構建一個普通的Maven項目,刪掉裏面的src目錄,這個項目裏面建立Moudel;這個空的工程就是Maven主工程;
創建Maven項目詳見博客:https://blog.csdn.net/qq_43594119/article/details/106199248
maven的servlet地址: https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api
new 一個Module
- 關於Maven父子工程的理解:
父項目(Project)的porm.xml文件裏有:
<modules>
<module>servlet-01</module>
</modules>
字模塊(Module)的porm.xml文件裏有:
<parent>
<artifactId>javaweb-02-servlet</artifactId>
<groupId>com.ylw</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
父項目中的jar包,子項目可以直接使用
- Maven環境優化
- 修改web.xml爲最新的,內容如下
<?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"
metadata-complete="true">
</web-app>
原來的
<!--<!DOCTYPE web-app PUBLIC-->
<!-- "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"-->
<!-- "http://java.sun.com/dtd/web-app_2_3.dtd" >-->
<!--<web-app>-->
<!-- <display-name>Archetype Created Web Application</display-name>-->
<!--</web-app>-->
- 將maven的結構搭建完整,在main下新建並標記文件夾。詳見博客:https://blog.csdn.net/qq_43594119/article/details/106199248
java目錄下建好包
- 編寫一個Servlet程序
- 新建一個java class 文件
- 實現Servlet接口,這裏我們直接繼承HttpServlet
- 重寫方法(ctrl+o 快捷鍵)
- 編寫Servlet的映射
爲什麼需要映射:我們寫的是JAVA程序,但是要通過瀏覽器訪問,而瀏覽器需要連接web服務器,所以我們需要再web服務中註冊我們寫的Servlet,還需給他一個瀏覽器能夠訪問的路徑;
在web.xml裏註冊
<!--註冊Servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.ylw.servlet.HelloServlet</servlet-class>
</servlet>
<!--Servlet的請求路徑,上面的name和下面的name要一樣-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
-
配置Tomcat,詳見博客:https://blog.csdn.net/qq_43594119/article/details/106199248
-
啓動Tomcat測試
進入剛剛註冊的servlet
Servlet原理
Servlet是由Web服務器調用,web服務器在收到瀏覽器請求之後,會:
Mapping問題
- 一個Servlet可以指定一個映射路徑
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
- 一個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>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello3</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello4</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello5</url-pattern>
</servlet-mapping>
- 一個Servlet可以指定通用映射路徑,*號是通配符
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello/*</url-pattern>
</servlet-mapping>
- 默認請求路徑
這樣寫的話,Tomcat訪問就不會進index.jsp文件了,直接進servlet
<!--默認請求路徑-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
- 指定一些後綴或者前綴等等….注意:這時候 * 前面就不要加路徑了
<!--可以自定義後綴實現請求映射
注意點,*前面不能加項目映射的路徑
hello/sajdlkajda.ylw
-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>*.ylw</url-pattern>
</servlet-mapping>
- 優先級問題 指定了固有的映射路徑優先級最高,如果找不到就會走默認的處理請求;
<!--404-->
<servlet>
<servlet-name>error</servlet-name>
<servlet-class>com.kuang.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>