JavaWeb——一文帶你入門Servlet(生命周期、注解配置方法、IDEA與tomcat的相關配置)

      網友投稿 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中 根標簽內)

      demo1

      cn.test.web.servlet.ServletDemo1

      demo1

      /demo1

      【實現效果】:運行程序,在瀏覽器中輸入: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的創建時機:

      第一次被訪問時創建,值為負數(默認為-1)

      在服務器啟動時創建,值為0或正整數

      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....");

      }

      }

      JavaWeb——一文帶你入門Servlet(生命周期、注解配置方法、IDEA與tomcat的相關配置)

      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小時內刪除侵權內容。

      上一篇:陶瓷介質濾波器與小型金屬腔體濾波器的區別
      下一篇:wps表格怎么一格分兩行?(wps表格怎么一個單元格分兩行)
      相關文章
      亚洲国产区男人本色| 中文字幕亚洲男人的天堂网络| 一本天堂ⅴ无码亚洲道久久| 亚洲一区二区三区高清视频| 亚洲在成人网在线看| 亚洲综合无码一区二区三区| 亚洲高清视频免费| 亚洲精品一卡2卡3卡三卡四卡| 蜜芽亚洲av无码精品色午夜| 久久国产亚洲高清观看| 亚洲欧洲国产经精品香蕉网| 亚洲国产成人久久77| 亚洲国产日韩精品| 亚洲国产精品日韩av不卡在线 | 国产成人精品日本亚洲网站| 亚洲精品二区国产综合野狼| 亚洲成AV人片在线观看无码| 亚洲AV无码AV男人的天堂| 亚洲一区二区在线免费观看| 亚洲成年人免费网站| 91亚洲国产成人久久精品| 国产成人精品日本亚洲11| 亚洲欧美日韩久久精品| 国产成人人综合亚洲欧美丁香花| 亚洲成年看片在线观看| 国产亚洲老熟女视频| 久久被窝电影亚洲爽爽爽| 色拍自拍亚洲综合图区| 亚洲国产综合在线| 亚洲日韩看片无码电影| 日韩色视频一区二区三区亚洲 | 亚洲精品偷拍无码不卡av| 亚洲人成片在线观看| 亚洲AV无码之国产精品| 亚洲国产成人久久一区WWW| 亚洲女同成av人片在线观看| 亚洲国产女人aaa毛片在线| 亚洲成av人片不卡无码| 亚洲欧美成人av在线观看| 亚洲福利在线播放| 亚洲av最新在线网址|