【Servlet學習筆記】01 入門及映射路徑

2018.5.02

web應用目錄結構

|--webroot web項目/應用的根目錄(這個名字沒有中文)
    |- 靜態資源 (HTML css javascript img veido audio)
    |- WEB-INF: [固定寫法]
        |-classes:存放二進制字節碼文件的目錄 放入.class文件【固定寫法,可選】
        |-lib:存放當前 WEB項目運行需要的JAR包【固定寫法,可選】
        |-web.xml 非常重要【現在非常重要】
        
注意事項: 
    1.WEB-INF目錄下的內容不能通過瀏覽器目錄方式訪問。
    2.如果需要訪問WEB-INF裏面的資源內容,需要配置web.xml

1.Servlt入門

暫時不要研究源代碼 手動創建一個servlet

1.1什麼是Servlet?

前提 靜態資源和動態資源的區別(源代碼有無變化)

靜態資源:
    用戶在多次訪問的情況下,但是每一次頁面的源代碼沒有發生任何的改變。
    
動態資源:
    用戶在每一次訪問申請到的頁面源代碼都是不一樣的
    
Servltjava語言實現動態資源的開發技術

要求:
    1.Servlet程序只能在Tomcat服務器上運行。【記住】
    2.Servlet其實是一個非常普通的類,只不過集成了HttpServlet,覆蓋了doGetdoPost方法。

1.2 手動書寫一個Servlet程序

1.定義一個類,要求繼承HttpServlet

HttpServlet並不存在當前使用的JDK1.8中,Servlet程序要交給Tomcat運行的,所以
    Tomcat是支持HttpServlet,那麼在 Tomcat下必須有HttpServlet當前整個代碼
    
    在Tomcat安裝路徑/lib/servlet-api.jar    
    
    把servlet-api.jar 複製到當前的項目目錄下,添加到工作路徑中add path

2.書寫Servlet程序

HttpServletRequest      servlet請求
        
    HttpServletResponse     servlet響應
    
    使用響應給瀏覽器發送數據
    
        設置響應在瀏覽器上展示的方式和編碼集  使用HTML展示,字符集爲utf-8
        resp.setContentType("text/html;charset=utf-8");
        
        PrintWrite resp.getWriter(); 專門用來給瀏覽器寫入數據的對象。 基於IO流的

3.執行Servlet程序

這裏servlet程序不能再交給Eclipse執行了,而是要在Tomcat服務器上執行Servlet程序
    
    在Tomcat服務器軟件根目錄下webApps中創建一個web項目文件夾,要按照Web項目要求創建。
    
    找到當前Servelet程序的class文件,要把這個文件放入到class文件中
    
    【注意】
        要求放入的class文件要帶有完整的包名
        
    在WEB-INF文件
           |--day39
                |- WEB-INF: [固定寫法]
                    |-classes:     存放二進制字節碼文件的目錄 放入.class文件【固定寫法,可選】
                    |-web.xml 按照Servlet程序的規範書寫XML文件

4.web.xml文件中的內容

<?xml version = "1.0" encoding = "utf-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
      version="3.0"
      metadata-complete="true">
    	<servlet>
    		<!-- servlet的內部名稱 這個名字可以自定義-->
    		<servlet-name>HelloServlet</servlet-name>
    		<!-- servlet的class文件,這裏要求是完整的類名 包名.類名-->
    		<servlet-class>包名+類名</servlet-class>
    
    	</servlet>
    	<servlet-mapping>
    		<!-- servlet的名字 要求和上面的名字一模一樣-->
    		<servlet-name>HelloServlet</servlet-name>
    		<!-- servlet的訪問名稱:http://localhost:8080/mywebs/訪問名-->
    		<url-pattern>/hello</url-pattern>//專門用來匹配瀏覽器中輸入的內容
    	</servlet-mapping>
     </web-app>

servlet映射路徑

Tomcat服務器啓動之後
http://localhost:8080/day40/TestHttp

web.xml的配置文件

<servlet>
 <!-- 自定義的名字-->
<servlet-name>TestHttp</servlet-name>
<!-- Servlet程序的完整的包名.類名-->
<servlet-class>com.bitware.http.TestHttp</servlet-class>
</servlet>
<servlet-mapping>
<!--要求和上面name一致-->
<servlet-name>TestHttp</servlet-name>
<!--映射路徑-->
<url-pattern>/TestHttp</url-pattern>
 </servlet-mapping>

瀏覽器訪問服務器的URL分析

1.瀏覽器根據輸入的URL來訪問Tomcat服務器 http://localhost:8080
2./day40 訪問在Tomcat服務器下webapps裏面的day40項目文件夾
3./TestHttp 用來匹配在[WEB-INF]下的web.xml文件裏面的url-pattern

/TestHttp稱之爲 映射路徑

映射的流程:

1.在[WEB-INF]下的web.xml文件中匹配url-pattern
    2.匹配到就可以獲取<servlet-mapping>,可以找到<servlet-name>標籤內容,獲取servlet-name
    3.通過匹配<servlet-name>找到<servlet>,也就可以獲取到<servlet-class>標籤內容
    在這個標籤中寶包含了servlet程序運行需要執行的.class文件
    4.通過這個包名.類名就可以加載這個.class(字節碼文件),運行servlet程序,這裏
    用到的就是[反射]的思想。
    
url-patter 匹配形式:
    精確匹配:
    url-pattern規定的是寫什麼樣的匹配,就在URL中些什麼
    例如:
        /TestHttp 在瀏覽器中只能輸入:
           http://localhost:8080/day40/TestHttp
        /TestHttp/hi 在瀏覽器中只能輸入:
           http://localhost:8080/day40/TestHttp/hi
         
    一個字符都不能差,負責404.
    
    模糊匹配:
        /*      http://localhost:8080/day40/任意內容 都可以訪問當前servlet程序
        *.do    http://localhost:8080/day40/任意內容.do結尾都可以訪問當前servlet程序
        *.html(僞靜態)  http://localhost:8080/day40/任意內容.html
        *.action
        *.jsp

    注意事項:
        1.模糊匹配不能同時使用\和* 不允許
        2.如果同時存在模糊匹配和精確匹配,精確匹配的優先級更高
        3.使用後綴名的迷糊匹配優先級最低。
        4.要求所有的Servlet的url-pattern都不能爲/,不允許和Tomcat默認servlet衝突

Tomcat默認的servlet程序【缺省】 ----defaultServlet 最終的保障機制

在URL中輸入
    Http://localhost:8080/day40/
    
    流程:
        1.在day40的項目目錄下的【WEB-INF】裏面的web.xml中匹配url-pattern爲 / 的標籤 【精確匹配】
        2.如果沒有匹配到這個 / 映射路徑,這個時候tomcat會把這個映射路徑交給 在Tomcat中默認的servlet程序中
        ,DefaultServlet
        3.DefaultServlet會首先在day40的項目目錄下找有沒有對應的index.**文件
            這裏可以支持 index.html index.jsp
        4.如果有,將對應的index.html發送給瀏覽器
        如果沒有,報狀態碼404,跳轉到默認的404頁面


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章