JavaEE學習日誌(五十): servlet對象詳解,web.xml配置文件詳解

JavaEE學習日誌持續更新----> 必看!JavaEE學習路線(文章總彙)

Servlet

Servlet是運行在服務器端的Java程序,也是JavaEE十三規範中的一個規範。

規範理解爲就是接口interface

實現步驟:

  1. 創建類,實現接口Servlet
  2. 重寫接口中全部的抽象方法
  3. 通知Tomcat服務器,運行實現類(去web.xml編寫配置文件)

Servlet快速入門

  1. 實現接口Servlet
  2. 重寫抽象方法,6個

JavaEE使用的類和接口,由Tomcat提供

import javax.servlet.*;
import java.io.IOException;

/*
    實現Servlet程序快速入門
    實現接口Servlet
    重寫抽象方法,6個

    JavaEE使用的類和接口,Tomcat提供
 */
public class QuickStartServlet implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    /*
        方法service
        參數:ServletRequest 接收客戶端提交的數據
             ServletResponse 向客戶端響應數據對象
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("快速入門");
        servletResponse.getWriter().print("aaa");//獲取流對象,返回值PrintWriter
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

編寫配置文件
在這裏插入圖片描述
運行Tomcat,在瀏覽器中輸入地址

在這裏插入圖片描述
在這裏插入圖片描述

Servlet技術概述

Servlet是JavaEE技術平臺的規範,只能運行在Web服務器。

作用:接收請求,進行響應

廣義的Servlet:Servlet接口所以的實現類
狹隘的Servlet:專門指的是Servlet接口

Servlet程序執行原理

在這裏插入圖片描述

Servlet生命週期

Servlet對象什麼時候生,什麼時候死

生命週期相關的三個方法:init,service,destroy

  • init(ServletConfig config) Servlet對象的初始化方法,對象被創建時調用。
    Servlet對象什麼時候被創建
  1. Servlet默認第一次訪問的時候,被創建
  2. Tomcat服務器啓動的時候創建對象,需要修改web.xml(一般不用)
<!--
            配置的是Servlet對象啓動的優先級
            理論上可以寫任意整數:數字越小,啓動的優先級越高
-->
<load-on-startup>5</load-on-startup>
  • service(request,response) 客戶端訪問一次,執行一次
  • destory() Servlet對象銷燬之前被調用
    Servlet對象什麼時候被銷燬
  1. 停止Tomcat服務
  2. Web項目從服務器中移除掉

Servlet的web.xml配置

	<servlet>
        <!--name,定義名字,隨意寫,一般寫類名前綴-->
        <servlet-name>path</servlet-name>
        <!--class 配置類的全名,反射-->
        <servlet-class>com.itheima.servlet.PathServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <!--name 必須和上面的name相同-->
        <servlet-name>path</servlet-name>
        <!--url-pattern 配置的是瀏覽器訪問的虛擬路徑-->
        <!--完全匹配-->
        <url-pattern>/path</url-pattern>
    </servlet-mapping>

url-pattern的配置

  • 完全匹配
    /abc:瀏覽器地址欄必須寫/abc,大小寫也不能錯
  • 目錄匹配
    /aaa/bbb/*:瀏覽器地址欄可以寫/aaa/bbb/任意
  • 後綴名匹配
    *.abc:瀏覽器地址欄可以寫 任意.abc

注意:目錄匹配和後綴名匹配不能同時使用

Tomcat的全局web.xml

tomcat目錄中/conf/web.xml 是全局配置文件,所有的web項目都使用。自己寫的web.xml只有你自己的項目使用。
當全局配置web.xml和自己的web.xml衝突,就聽自己的

一、當找不到自己項目中的servlet時,執行默認的servlet,報出404錯誤頁面
在這裏插入圖片描述
在這裏插入圖片描述

二、session對象的超時時間爲30分鐘

<session-config>
        <session-timeout>30</session-timeout>
</session-config>

三、

<mime-mapping>
        <extension>dv</extension>
        <mime-type>video/x-dv</mime-type>
</mime-mapping>

extension:擴展名,給人看的文件名
mine-type:文件類型,給瀏覽器看的

四、歡迎頁面

<welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

Idea創建servlet

在這裏插入圖片描述
繼承的方式創建:繼承HttpServlet

public class MyServlet extends HttpServlet {
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}
  • doPost方法對應了客戶端瀏覽器的提交方式POST
  • doGet方法對應了客戶端瀏覽器的提交方式GET

無論:是POST提交,還是GET,統一處理,都使用doGet

public class MyServlet extends HttpServlet {
    /*
        doPost方法對應了客戶端瀏覽器的提交方式POST
        無論:是POST提交,還是GET,統一處理,都使用doGet
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //調用doGet
        doGet(request,response);
    }
    /*
            doGet方法對應了客戶端瀏覽器的提交方式GET
    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().print("MyServlet Run");
    }
}

繼承HttpServlet的原理

在這裏插入圖片描述

ServletConfig對象

ServletConfig對象,表示的是Servlet配置對象
有一個Servlet程序,出現對應的ServletConfig對象

獲取ServletConfig對象:

  • init方法參數(ServletConfig servletConfig),調用者是Tomcat引擎,所以ServletConfig對象也是由Tomcat引擎創建。
  • 父類中定義了方法ServletConfig getSevletConfig()
public class ConfigServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
            通過父類的方法getServletConfig()獲取ServletConfig對象
            ServletConfig是接口
            org.apache.catalina.core.StandardWrapperFacade@5b21f320是實現類(Tomcat中)
         */
        ServletConfig config = getServletConfig();
        System.out.println(config);//org.apache.catalina.core.StandardWrapperFacade@5b21f320

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

ServletConfig對象能做什麼:

  • 獲取Servlet的名字,String getServletName()
    <servlet-name>config</servlet-name>
  • 獲取Servlet的初始化參數,String getInitParameter("鍵名")
    <servlet>
        <servlet-name>config</servlet-name>
        <servlet-class>com.itheima.servlet.ConfigServlet</servlet-class>
        <init-param>
            <param-name>heima</param-name>
            <param-value>java</param-value>
        </init-param>
    </servlet>
public class ConfigServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
            通過父類的方法getServletConfig()獲取ServletConfig對象
            ServletConfig是接口
            org.apache.catalina.core.StandardWrapperFacade@5b21f320是實現類(Tomcat中)
         */
        ServletConfig config = getServletConfig();
        System.out.println(config);//org.apache.catalina.core.StandardWrapperFacade@5b21f320
        //獲取Servlet名字
        String name = config.getServletName();
        System.out.println(name);
        //獲取Servlet初始化參數
        String value = config.getInitParameter("heima");
        System.out.println(value);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

在這裏插入圖片描述

  • 獲取ServletContext對象,getServletContext()返回Servlet上下文對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章