今天初次接觸了Servlet,跟著狂神寫了第一個 HelloServlet 程式,故記錄筆記在此~
(1)Servlet簡介
-
Srevlet就是sun公司開發動態web的一門技術
-
sun公司在這些API中提供了一個介面,叫做:Servlet,如果你想開發一個Servlet程式,只需要完成2個小步驟:
- 撰寫一個類,實作Servlet介面
- 把開發好的Java類部署到web服務器中
-
把實作了Servlet介面的 Java程式 叫做:Servlet
Servlet介面在Sun公司有兩個默認的實作類:HttpServlet,GenericServlet
(2) HelloServlet 程式步驟
1、構建一個普通的Maven專案(javaweb-03-servlet),刪掉里面的src目錄,以后我們的學習就在這個專案里面建立Module;這個空的工程就是Maven的主工程;
2、在pom.xml中放入專案所需要的依賴
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!--https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
3、在主工程下新建Module,選擇webapp創建Maven專案
4、關于Maven父子工程的理解:
父專案的 pom.xml中會多出modules標簽:
<modules>
<module>servlet-01</module>
</modules>
子模塊的pom.xml中:
<parent>
<artifactId>javaweb-03-servlet</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
注意:父專案中的jar包,子專案可以直接使用!,反之不行
5、Maven環境優化!把子模塊的web.xml中的webapp版本換成Tomcat 9–>ROOT–>WIN-INF–>web.xml中的,把Maven結構搭建完整,main中新建java原始碼檔案夾和resources資源檔案夾
<?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>
6、撰寫一個Servlet程式
- 撰寫一個普通類(HelloServlet)
- 實作Servlet介面,這里我們直接繼承HttpServlet

package com.xiao.servlet;
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;
//HttpServlet
public class HelloServlet extends HttpServlet {
//由于get或者post,只是請求實作的不同方式,可以相互呼叫的,只是業務邏輯不一樣
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//ServletOutputStream outputStream = resp.getOutputStream();
PrintWriter writer = resp.getWriter(); //回應流
writer.print("Hello Servlet!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
7、撰寫Servlet的映射
為什么需要映射?
- 我們寫的是Java程式,但是要通過瀏覽器訪問,而瀏覽器需要連接web服務器,所以我們需要在web服務中注冊我們寫的Servlet!還需要給他一個瀏覽器能夠訪問的路徑!
<!--web.xml中撰寫映射~-->
<!--注冊Servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.xiao.servlet.HelloServlet</servlet-class>
</servlet>
<!--Servlet的請求路徑(映射路徑)-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/xiao</url-pattern>
</servlet-mapping>
8、IDEA中配置Tomcat(配置截圖時是Tomcat 10,后來出錯了換成Tomcat 9了,一樣的配置,就沒截圖了)








(3)Servlet原理
(4)Mapping問題
1、一個Servlet可以指定一個映射路徑
<!--Servlet的請求路徑(一個映射路徑)-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/xiao</url-pattern>
</servlet-mapping>
2、一個Servlet可以指定多個映射路徑
<!--Servlet的請求路徑(多個映射路徑)-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/xiao</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/xiao2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/xiao3</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/xiao4</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/xiao5</url-pattern>
</servlet-mapping>
3、一個Servlet可以指定通用映射路徑
<!--Servlet的請求路徑(通用映射路徑)-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/xiao/*</url-pattern>
</servlet-mapping>
4、默認請求路徑
<!--Servlet的【默認】請求路徑-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
5、指定一些后綴或者前綴等…
<!--可以自定義后綴實作請求映射
注意點:* 前面不能加專案映射的路徑(/,或者 /hello/* 都不行!)
只要以指定后綴結尾的都可以訪問!-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>*.xiao</url-pattern>
</servlet-mapping>
<!--http://localhost:8080/servlet_01_war/kjdshffkjaf.xiao 可以訪問
http://localhost:8080/servlet_01_war/hello/kjdshffkjaf.xiao 可以訪問-->
6、優先級問題
- 指定了Mapping固有映射路徑—>優先級最高,找不到就會走默認的處理請求
<!--404報錯-->
<servlet>
<servlet-name>error</servlet-name>
<servlet-class>com.xiao.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
第一個 HelloServlet 程式筆記到此結束~
跟著狂神學習java的第23天,加油鴨!堅持下去~
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/286931.html
標籤:其他
上一篇:初始指標與結構體

