日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Servlet的快速入门以及执行原理

發(fā)布時間:2023/12/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Servlet的快速入门以及执行原理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Servlet

server applet
概念:運行在服務(wù)器端的小程序.

  • Servlet就是一個接口,定義了Java類被瀏覽器訪問到(tomcat識別)的規(guī)則。
  • 將來我們自定義一個類,實現(xiàn)Servlet接口,復(fù)寫方法。

快速入門

  • 創(chuàng)建JavaEE(web)項目

  • 定義一個類,實現(xiàn)Servlet接口

  • 實現(xiàn)接口中的抽象方法

  • package com.yuanxinyi.servlet;import javax.servlet.*; import java.io.IOException;public class ServletDemo1 implements Servlet {@Overridepublic void init(ServletConfig servletConfig) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}/*** 提供服務(wù)的方法* @param servletRequest* @param servletResponse* @throws ServletException* @throws IOException*/@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("hello servlet");}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {} }
  • 配置Servlet(在web.xml中進行配置)
    配置servlet的原因:
    定義好了java類,瀏覽器需要通過url來進行訪問,url需要通過具體的資源名稱來映射這個java類對其進行訪問,所以需要將這個java類來配置成一個路徑。
  • <?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><servlet-name>demo1</servlet-name><!--需要配置該類的全類名--><servlet-class>com.yuanxinyi.servlet.ServletDemo1</servlet-class> </servlet><servlet-mapping><servlet-name>demo1</servlet-name><url-pattern>/demo1</url-pattern></servlet-mapping> </web-app>

    不要忘了配置虛擬機

    然后啟動服務(wù)器:

    輸入網(wǎng)址http://localhost:8080/demo1后在控制臺輸出hello servlet

    而且每請求一次,就輸出一次

    servlet的執(zhí)行原理


    執(zhí)行原理:
    1. 當(dāng)服務(wù)器接受到客戶端瀏覽器的請求后,會解析請求URL路徑,獲取訪問的Servlet的資源路徑
    2. 查找web.xml文件,是否有對應(yīng)的 < url-pattern >標(biāo)簽體內(nèi)容。
    3. 如果有,則在找到對應(yīng)的< servlet-class >全類名
    4. tomcat會將字節(jié)碼文件加載進內(nèi)存,并且創(chuàng)建其對象
    5. 調(diào)用其方法

    servlet中的方法

    • init初始化方法:在servlet被創(chuàng)建的時候執(zhí)行,只會執(zhí)行一次
    • service提供服務(wù)的方法:每一次servlet被訪問時執(zhí)行,會執(zhí)行多次
    • destory銷毀方法:在servlet被殺死時候執(zhí)行(在服務(wù)器正常關(guān)閉的時候執(zhí)行,只會執(zhí)行一次)
    • getServletConfig方法:獲取ServletConfig對象(ServletConfig:Servlet的配置對象)
    • getServletInfo方法:獲取Servlet的一些信息(版本、作者等等)

    測試這三個方法:

    package com.yuanxinyi.servlet;import javax.servlet.*; import java.io.IOException;public class ServletDemo2 implements Servlet {/*** 初始化方法* 早servlet被創(chuàng)建的時候執(zhí)行,只會執(zhí)行一次* @param servletConfig* @throws ServletException*/@Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("init....");}@Overridepublic ServletConfig getServletConfig() {return null;}/*** 提供服務(wù)的方法* 每一次servlet被訪問時執(zhí)行,會執(zhí)行多次* @param servletRequest* @param servletResponse* @throws ServletException* @throws IOException*/@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("service...");}@Overridepublic String getServletInfo() {return null;}/*** 銷毀方法* 在servlet被殺死時候執(zhí)行(在服務(wù)器正常關(guān)閉的時候執(zhí)行,只會執(zhí)行一次)*/@Overridepublic void destroy() {System.out.println("destory....");} }

    配置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><servlet-name>demo1</servlet-name><!--需要配置該類的全類名--><servlet-class>com.yuanxinyi.servlet.ServletDemo1</servlet-class> </servlet><servlet-mapping><servlet-name>demo1</servlet-name><url-pattern>/demo1</url-pattern></servlet-mapping><servlet><servlet-name>demo2</servlet-name><!--需要配置該類的全類名--><servlet-class>com.yuanxinyi.servlet.ServletDemo2</servlet-class></servlet><servlet-mapping><servlet-name>demo2</servlet-name><url-pattern>/demo2</url-pattern></servlet-mapping> </web-app>

    啟動服務(wù)器:
    第一次訪問的時候:控制臺打印
    init…
    service…
    第二次訪問只打印了service…
    正常點擊關(guān)閉服務(wù)器后打印了destory…
    非正常關(guān)閉的話不會打印

    servlet的生命周期

  • 被創(chuàng)建:執(zhí)行init方法,只執(zhí)行一次
  • Servlet什么時候被創(chuàng)建? 默認情況下,第一次被訪問時,Servlet被創(chuàng)建 可以配置執(zhí)行Servlet的創(chuàng)建時機 在< servlet>標(biāo)簽下配置
    1. 第一次被訪問時,創(chuàng)建< load-on-startup>的值為負數(shù)
    2. 在服務(wù)器啟動時,創(chuàng)建 < load-on-startup>的值為0或正整數(shù)

    Servlet的init方法,只執(zhí)行一次,說明一個Servlet在內(nèi)存中只存在一個對象,Servlet是單例的
    多個用戶同時訪問時,可能存在線程安全問題。 解決:盡量不要在Servlet中定義成員變量。即使定義了成員變量,也不要對修改值(不能使用同步代碼塊加鎖)

  • 提供服務(wù):執(zhí)行service方法,執(zhí)行多次
    每次訪問Servlet時,Service方法都會被調(diào)用一次。
  • 被銷毀:執(zhí)行destroy方法,只執(zhí)行一次
    Servlet被銷毀時執(zhí)行,服務(wù)器關(guān)閉時,Servlet被銷毀。
    只有服務(wù)器正常關(guān)閉時,才會執(zhí)行destroy方法。
    destroy方法在Servlet被銷毀之前執(zhí)行,一般用于釋放資源
  • 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

    以上是生活随笔為你收集整理的Servlet的快速入门以及执行原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。