Servlet的路徑配置


1-Servlet的路徑配置

課程介紹:

 

通過對 Servlet 的調用流程學習,我們知道 web.xml 文件的配置是為了保護servlet。其實服務器應該調用哪個 servlet 進行請求的處理, 在瀏覽器的請求地址中寫的很清楚。

一、注解配置:

1、精確匹配(路徑要一樣),一般作用於站點獨特的幾個路徑,首頁、登錄、注冊等等

@WebServlet("/hello")

 

2、路徑匹配,一般用於產品頁,新聞頁面,百科頁面一般用於大量相類似的頁面

@WebServlet("/product/*")

 

3、擴展名匹配

 

@WebServlet("*.json")

 

 

匹配多個路徑:

 

@WebServlet(urlPatterns= {"/morepath","*.do","/more/*"})

 

 

 

 

 

二、Servlet的web.xml 配置:

Web.xml 配置的作用:保護Servlet。

配置方式一:精確匹配

 

Web.xml 配置的作用:保護Servlet。

配置方式一:精確匹配

<!-- 配置方式一 -->
<servlet>

<servlet-name>my3</servlet-name>
<servlet- class>com.bjsxt.servlet.MyServlet3</servlet-class>

</servlet>


<servlet-mapping>

<servlet-name>my3</servlet-name>
<url-pattern>/my3</url-pattern>

</servlet-mapping>

配置方式二:路徑匹配

<!-- 配置方式一 -->
<servlet>

<servlet-name>my3</servlet-name>
<servlet- class>com.bjsxt.servlet.MyServlet3</servlet-class>

</servlet>


<servlet-mapping>

<servlet-name>my3</servlet-name>
<url-pattern>/my3</url-pattern>

</servlet-mapping>

配置方式三:擴展名匹配

<servlet>

<servlet-name>my3</servlet-name>
<servlet- class>com.bjsxt.servlet.MyServlet3</servlet-class>

</servlet>


<servlet-mapping>

<servlet-name>my3</servlet-name>
<url-pattern>*.do</url-pattern>

</servlet-mapping>

 

加載時機:

服務器啟動的時候會將 webapps 中部署好的項目統一進行加載,並完成對每個項目的 web.xml 文件的加載。

 

注意:

一個 Servlet 可有擁有多個 url-pattern 配置,但是一個url-pattern 配置只能對應一個Servlet

 

路徑和擴展名匹配無法同時設置,比如下面的三個<url-pattern>都是非法的,如果設置,啟動tomcat服務器會報錯。

 

<url-pattern>/kata/*.jsp</url-pattern>

 

<url-pattern>/*.jsp</url-pattern>

 

<url-pattern>he*.jsp</url-pattern>

 

另外注意:<url-pattern>/aa/*/bb</url-pattern>

這個是精確匹配,url必須是 /aa/*/bb,這里的*不是通配的含義

 

優先順序

 

當一個url與多個servlet的匹配規則可以匹配時,則按照 “ 精確路徑 > 最長路徑>擴展名”這樣的優先級匹配到對應的servlet。舉例如下:

例1:
servletA 的url-pattern為 /test,
servletB的url-pattern為 /* ,這個時候,如果我訪問的url為http://localhost/test ,這個時候容器就會先進行精確路徑匹配,發現/test正好被servletA精確匹配,那么就去調用servletA,不會去管servletB。

例2:
servletA的url-pattern為/test/*,
servletB的url-pattern為/test/a/*,此時訪問http://localhost/test/a時,容器會選擇路徑最長的servlet來匹配,也就是這里的servletB。 

例3: 比如
servletA的url-pattern:*.action ,
servletB的url-pattern為 /* ,這個時候,如果我訪問的url為http://localhost/test.action,這個時候容器就會優先進行路徑匹配,而不是去匹配擴展名,這樣就去調用servletB。

 

頁面亂碼:解決方法

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UFT-8");


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM