Guava 系列 - Guava基礎
818
2025-04-02
目錄
1、Servlet快速入門
2、Servlet中的生命周期
3、Servlet3.0注解配置
4、IDEA與tomcat的相關配置
5、Servlet的體系結構
Servlet在JavaWeb中非常重要,在JavaWeb的核心知識體系都是圍繞Servlet來轉的。
1、Servlet快速入門
Servlet:Server applet,是運行在服務器端的小程序,Servlet就是一個接口,定義了Java類被瀏覽器訪問到(tomcat識別)的規則。需要我們自定義一個類,實現Servlet接口,覆寫方法。
快速入門步驟:
1)創建JavaEE項目;
2)定義一個類,實現Servlet的接口;
public class ServletDemo1 implements Servlet
3)覆寫接口中的抽象方法;
//提供服務的方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Hello Servlet");
}
4)配置Servlet(web.xml中 根標簽內)
【實現效果】:運行程序,在瀏覽器中輸入:http://localhost:8080/demo1,在IDEA后臺可見輸出信息
補充下,如果我們的項目比較多時,為了便于管理,最好是加上虛擬目錄,以項目名稱命名,在IEDA:RUN-》Edit Configurations中設置:
此時瀏覽器訪問為:
以上就是Servlet的快速入門實踐,那么Servlet的執行原理是怎樣的呢?
1)當服務器接收到瀏覽器的請求后,會解析請求URL路徑,獲取訪問的Servlet的資源路徑;
2)查找web.xml文件,是否有對應得
3)若有,則在找到對應的
4)tomcat會將字節碼文件加載進內存,并且創建其對象;
5)調用其方法。
2、Servlet中的生命周期
1)被創建:執行init方法,只執行一次
Servlet什么時候被創建?默認情況下,第一次被訪問時被創建,我們可以在web.xml文檔中
第一次被訪問時創建,
在服務器啟動時創建,
Servlet的init方法只執行一次,說明一個Servlet在內存中只存在一個對象,Servlet是單例的。多個用戶同時訪問時可能存在線程安全問題,為此解決方法是盡量不要在Servlet中定義成員變量,即使定義了成員變量,也不要對其修改值。
2)提供服務:執行service方法,執行多次
每次訪問Servlet時,service方法都會被調用一次。
3)被銷毀:執行destroy方法,只執行一次
服務器關閉時,Servlet被銷毀,注意,是需要服務器正常關閉時,才會執行destroy方法,該方法在Servlet被銷毀之前之前,一般用于釋放資源。
3、Servlet3.0注解配置
上面我們都是使用web.xml進行Servlet的配置,若一個項目中有很多個Servlet,我們就要在web.xml中針對每一個進行配置,很繁瑣。那么有沒有更好的配置方法呢?使用Servlet3.0,其好處是支持注解配置,可以不使用web.xml了。步驟:
1)創建JavaEE項目,選擇Servlet的版本為3.0以上,可以不創建web.xml;
2)定義一個類,實現Servlet接口;
3)覆寫方法;
4)在類上使用@WebServlet注解,進行配置;
@WebServlet("/資源路徑")
public @interface WebServlet {
java.lang.String name() default "";
java.lang.String[] value() default {};
java.lang.String[] urlPatterns() default {};
int loadOnStartup() default -1;
javax.servlet.annotation.WebInitParam[] initParams() default {};
boolean asyncSupported() default false;
java.lang.String smallIcon() default "";
java.lang.String largeIcon() default "";
java.lang.String description() default "";
java.lang.String displayName() default "";
}
【注意】urlparttrn定義Servlet的訪問路徑:
一個Servlet可以定義多個訪問路徑:@WebServlet({"/d4","/demo4"})
路徑定義規則:
/xxx:
/xxx/xxx:多層路徑,目錄結構,eg:@WebServlet("/user/demo4")、@WebServlet("/user/*")
*.do:@WebServlet("*.do")
4、IDEA與tomcat的相關配置
1)IDEA會為每一個tomcat部署的項目單獨建立一份配置文件;
查看控制臺的log:
Using CATALINA_BASE: ? "C:\Users\think\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Tomcat_8_5_31_4_servlet"
2)工作空間項目和tomcat部署的web項目
tomcat真正訪問的是“tomcat部署的web項目”,“tomcat部署的web項目”對應著“工作空間項目”的web目錄下的所有資源;
WEB-INF目錄下的資源不能被瀏覽器直接訪問;
斷電調試:使用“小蟲子”debug啟動。
5、Servlet的體系結構
Servlet——接口
|
GenericServlet——抽象類
|
HttpServlet——抽象類
以上就是Servlet的繼承結構,在前幾節中,我們都是實現Servlet接口,不得不覆寫Servlet接口的所有抽象方法,實際我們需要用的方法可能只有Service(),那么如何才能簡化這種寫法呢?
1)GenericServlet:將Servlet接口中的其他方法做了默認空實現,只將service()方法作為抽象,所以,定義Servlet類時,可以繼承GenericServlet,實現service()方法即可。
@WebServlet("/demo2")
public class ServletDemo2 extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("demo2....");
}
}
2)HttpServlet:對http協議的封裝,可以簡化操作,使用步驟如下,我們一般處理http請求時都是使用此方法:
定義類繼承HttpServlet;
覆寫doGet或doPost方法;
@WebServlet("/demo3")
public class ServletDemo3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet....");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost....");
}
}
作于202006011845,已歸檔
———————————————————————————————————
本文為博主原創文章,轉載請注明出處!
若本文對您有幫助,輕抬您發財的小手,關注/評論//,就是對我最大的支持!
祝君升職加薪,鵬程萬里!
Java Servlet Tomcat web前端
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。