Servlet學習

Servlet概述

  • 概念:server applet,即運行在服務器端的小程序
    2021-04-12_141553.jpg

    需要遵守的規(guī)則(接口),就是servlet。
    servlet就是一個接口,定義了Java類被瀏覽器訪問到(tomcat識別)的規(guī)則
    自定義一個類,實現(xiàn)servlet接口,復寫方法

Servlet快速編寫

繼承Servlet的類并沒有創(chuàng)建對象,也沒有調(diào)用方法,單就被執(zhí)行

1.創(chuàng)建JavaEE項目

2.定義一個類,實現(xiàn)Servlet接口
public class ServletDemo1 implements Servlet
ps(Servlet繼承失敗解決:https://blog.csdn.net/weixin_41362471/article/details/109451690)

3.實現(xiàn)接口中的抽象方法(5個)

4.配置Servlet

web.xml文件中配置
<!--配置servlet-->
<servlet>
      <servlet-name>demo1</servlet-name>
      <servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
       <servlet-name>demo1</servlet-name>
       <url-pattern>/demo1</url-pattern>//這個'/'真的很致命,一定記住寫
</servlet-mapping>

Servlet執(zhí)行原理

2021-04-12_194536.jpg

xml文件中的全類名,基本都牽扯到反射。
1.當服務器收到客戶端瀏覽器請求后,會解析請求URL路徑,獲取訪問的Servlet的資源路徑
2.查找web.xml文件,是否有<url-pattern>標簽體內(nèi)容
3.如果有,則找到對應的<servlet-class>全類名
4.tomcat會將字節(jié)碼文件加載進內(nèi)存,并且創(chuàng)建其對象(反射機制)
5.調(diào)用其方法(例如:service()方法)

Servlet中的生命周期

即5種方法中主要的:創(chuàng)建,提供服務,被銷毀3種方法

/*
初始化方法:用于加載資源
在Servlet被創(chuàng)建時執(zhí)行,只會執(zhí)行一次:
說明Servlet在內(nèi)存中只存在一個對象,即Servlet是單例的
問題:多個用戶同時訪問會有線程安全問題
解決:盡量不要在Servlet中定義成員變量,將成員變量定義在方法中,如果定義在類中就盡量不要對其修改值
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init........");
}
---------------------------------------------------
xml中<servlet>下配置
1.第一次被訪問時創(chuàng)建,即默認情況
<load-on-startup>負數(shù)</load-on-startup>
2.在服務器啟動時創(chuàng)建
<load-on-startup>0或正數(shù)</load-on-startup>
/*
獲取ServletConfig對象
ServletConfig:Servlet的配置對象
*/
@Override
    public ServletConfig getServletConfig() {
        return null;
}
/*
提供服務方法
每一次Servlet被訪問時,都會被執(zhí)行一次。執(zhí)行多次
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) 
throws ServletException, IOException {
        System.out.println("service.....");
}
/*
獲取Servlet的一些信息,版本,作者等等
*/
@Override
public String getServletInfo() {
        return null;
}
/*
銷毀方法:用于釋放資源
在服務器正常關(guān)閉時執(zhí)行,Servlet被銷毀,執(zhí)行一次
先執(zhí)行destroy方法,再銷毀Servlet
*/
@Override
    public void destroy() {
        System.out.println("Destroy.....");
}

Servlet3.0

  • 優(yōu)勢:支持注解配置。可以不需要web.xml
  • 1.創(chuàng)建JavaEE項目,選擇Servlet的版本3.0以上,不創(chuàng)建web.xml
    2.定義一個類,實現(xiàn)Servlet接口
    3.復寫方法
    4.在類上使用@WebServlet注解,進行配置
@WebServlet(urlPatterns = "/demo")//" "中寫資源路徑
//@WebServlet("/demo2")

Servlet體系結(jié)構(gòu)

2021-04-13_131509.jpg
  • GenericServlet
    將Servlet接口中除service()方法都做了默認空實現(xiàn),只將service()方法作為抽象方法
    所以定義Servlet類時可以繼承GenericServlet類,只實現(xiàn)service()方法即可,如果需要復寫其他四個方法,也可以復寫,但不是必須
  • HttpServlet(重要,常用)
    對http協(xié)議的一種封裝,簡化操作
    1.定義類繼承HttpServlet
    2.復寫doGetdoPost方法

Servlet相關(guān)配置

  • urlpartten:Servlet訪問路徑
    一個Servlet(資源)可以定義多個訪問路徑:@WebServlet({"/d4","/dd4","/ddd4"})
    路徑定義規(guī)則:/xxx或許/xxx/xxx*.do
@WebServlet({"/d4","/dd4","/ddd4"})
@WebServlet("/user/demo4")
@WebServlet("/user/*")//*代表著任意名字,當找不到訪問文件時,就會訪問*
@WebServlet("*.do")//想要訪問輸入demo4.do
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 夜鶯2517閱讀 128,155評論 1 9
  • 版本:ios 1.2.1 亮點: 1.app角標可以實時更新天氣溫度或選擇空氣質(zhì)量,建議處女座就不要選了,不然老想...
    我就是沉沉閱讀 7,451評論 1 6
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂有人憂愁,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,835評論 28 54
  • 兔子雖然是枚小碩 但學校的碩士四人寢不夠 就被分到了博士樓里 兩人一間 在學校的最西邊 靠山 兔子的室友身體不好 ...
    待業(yè)的兔子閱讀 2,767評論 2 9

友情鏈接更多精彩內(nèi)容