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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Servlet(自己实现的Servlet)细节

發(fā)布時間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Servlet(自己实现的Servlet)细节 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  Java中無狀態(tài)的對象就是指某種沒用任何屬性的僅僅由方法組成的對象。

    *無狀態(tài):無狀態(tài)方法的好處之一,就是在各種環(huán)境下,都可以安全調(diào)用。衡量一個方法

    是否有狀態(tài)的,就看它是否改動了其他東西。

    *有狀態(tài):有狀態(tài)的Java對象的狀態(tài)用屬性來表示,有屬性,也就是有對象的變量,就表

    示是有狀態(tài)的,有狀態(tài)就是線程不安全的。

  關(guān)于線程安全:

    1)常量始終是線程安全的,因為只存在讀操作。

    2)每次調(diào)用方法前都新建一個實例是線程安全的,因為不會訪問共享的資源。

    3)局部變量是線程安全的。因為每執(zhí)行一個方法,都會在獨立的空間創(chuàng)建局部變量,它

     不是共享資源,局部變量包括方法的參數(shù)變量和方法內(nèi)變量。


?

*不要在Servlet中創(chuàng)建成員!創(chuàng)建局部變量即可!(初級的人)

1 XXServlet extends HttpServlet{
//不要在這些地方創(chuàng)建成員(方法和屬性)
2 doGet(){ 3 String str="xxx";//局部變量 4 ... 5 } 6 }

?

*可以創(chuàng)建無狀態(tài)成員!(入門了的人)

1 public User{ 2 //里面無屬性,只有方法 3 public void fun(){ 4 System.out.println("hahahaha"); 5 } 6 }

?

1 public XXServlet extends HttpServlet{ 2 //類的成員 3 private User user;//該引用類中只存在方法,即無狀態(tài)的成員 4 5 doGet(){...} 6 }

?

*可以創(chuàng)建有狀態(tài)的成員,但狀態(tài)必須為只讀的!(熟練之后的人)

1 public User{//只有讀的方法,沒用寫的方法 2 private String name; 3 private int age; 4 5 public String getName(){ 6 return this.name; 7 } 8 public int getAge(){ 9 return this.age; 10 } 11 }

1.Servlet與線程安全

  因為一個類型的Servlet只有一個實例對象,那么就有可能會出現(xiàn)一個Servlet同時處理多個請求,那么Servlet “不是線程安全的” 。這說明Servlet的工作效率很高,但是存在線程安全問題!

  所以我們不應(yīng)該在Servlet中隨便創(chuàng)建成員變量,因為可能會存在一個線程對這個成員變量進行寫操作,另一個線程對這個成員變量進行讀操作。

2.讓服務(wù)器在啟動時就創(chuàng)建Servlet

  默認情況下,服務(wù)器會在某個Servlet第一次收到請求時創(chuàng)建它。也可以在web.xml中對Servlet進行配置,使服務(wù)器啟動時就創(chuàng)建Servlet。

1 <servlet> 2 <servlet-name>FServlet</servlet-name> 3 <servlet-class>one.servlet.FServlet</servlet-class> 4 <load-on-startup>0</load-on-startup> 5 </servlet> 6 7 <servlet-mapping> 8 <servlet-name>FServlet</servlet-name> 9 <url-pattern>/FServlet</url-pattern> 10 </servlet-mapping>

在<servlet>中配置<load-on-startup>,其中給出一個一個非負整數(shù)!是servlet的創(chuàng)建順序(從小到大)。

3.<url-pattern>? -->url的模式(我自己的理解)

  <url-pattern>是<servlet-mapping>的子元素,用來指定Servlet的訪問路徑,即URL。它必須是以 “/”開頭!!!

1)可以在<servlet-mapping>中給出多個<url-pattern>,例如:

1 <servlet-mapping> 2 <servlet-name>AServlet</servlet-name> 3 <url-mapping>/AServlet</url-mapping> 4 <url-mapping>/BServlet</url-mapping> 5 </servlet-mapping>

那么這說明一個Servlet綁定了兩個URL,無論訪問/AServlet還是/BServlet,訪問的都是AServlet。

?

2)還可以在<url-pattern>中使用通配符,所謂通配符就是星號 “*” ,星號可以匹配任何URL前綴或后綴,使用通配符可以命名一個Servlet綁定一組URL,例如:

##<url-pattern>/servlet/*<url-pattern> : /servlet/a,/servlet/b,都能匹配/servlet/*綁定的Servlet;(路徑匹配)

##<url-pattern>*.do<url-pattern> : /abc/def/ghi.do? , /a.do ,都匹配*.do;(擴展名匹配)

##<url-pattern>/*</url-pattern> : 匹配所有URL;

  請注意,通配符要么為前綴,要么為后綴,不能出現(xiàn)在URL中間的位置,也不能只有通配符。

?通配符是一種模糊匹配URL的方式,如果存在更具體的<url-pattern>,那么訪問路徑會去匹配具體的<url-pattern>。


?

4.web.xml文件的繼承(了解)

  每個完整的JavaWeb應(yīng)用中都需要有web.xml,但我們不知道所有的web.xml文件都有一個公同的父文件,它在Tomcat的config/web.xml路徑。

1 <servlet> 2 <servlet-name>default</servlet-name>//它的優(yōu)先級最低,如果一個請求沒有人處理,那么它來處理!它顯示404。 3 <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> 4 <init-param> 5 <param-name>debug</param-name> 6 <param-value>0</param-value> 7 </init-param> 8 <init-param> 9 <param-name>listings</param-name> 10 <param-value>false</param-value> 11 </init-param> 12 <load-on-startup>1</load-on-startup> 13 </servlet> 14 //------------------------------------------------------------ 15 16 <servlet-mapping> 17 <servlet-name>default</servlet-name> 18 <url-pattern>/</url-pattern> 19 </servlet-mapping> 20 //什么情況下會訪問DefaultServlet?? 21 //當訪問路徑不存在時,會執(zhí)行該Servlet!其實我們在訪問index.html時也是在執(zhí)行這個Servlet。

?

?

1 <servlet> 2 <servlet-name>jsp</servlet-name> 3 <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> 4 <init-param> 5 <param-name>fork</param-name> 6 <param-value>false</param-value> 7 </init-param> 8 <init-param> 9 <param-name>xpoweredBy</param-name> 10 <param-value>false</param-value> 11 </init-param> 12 <load-on-startup>3</load-on-startup> 13 </servlet> 14 //========================================= 15 16 <servlet-mapping> 17 <servlet-name>jsp</servlet-name> 18 <url-pattern>*.jsp</url-pattern> 19 <url-pattern>*.jspx</url-pattern> 20 </servlet-mapping> 21 //可以通過擴展名.jsp或.jspx來訪問JspServlet

例如:請求http://localhost:8080/XJS_Servlet1/index.jsp? ,然后是請求的一個JspServlet,這個JspServlet把動態(tài)資源轉(zhuǎn)換成靜態(tài)資源,然后通過response響應(yīng)------得到的是一個html頁面。

?

5.Servlet與反射

就是在<servlet-class>全類名</servlet-class>  利用反射得到該類(Servlet)的信息,創(chuàng)建該類的實例以及其他信息 --->是Tomcat來完成的

轉(zhuǎn)載于:https://www.cnblogs.com/xjs1874704478/p/10761299.html

總結(jié)

以上是生活随笔為你收集整理的Servlet(自己实现的Servlet)细节的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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