甚麼是Servlet?
- 它是一個規範、一個接口
- 它是JavaWeb的三大組件之一(三大組件:Servlet、Filter、Listener)
- 它是運行在server端的小程式,我自己是覺得像Web的服務生,接收客戶端的請求做出回應,也就是API
要如何實作Servlet
- 要寫一個class去應用servlet(但不只一個class)
- Service方法用於處理網站的request和reponse
web.xml
檔案用於設定Servlet的訪問地址,我們的servlet就是寫在這個web.xml的檔案裡
關於Servlet標籤
<servlet>:配置給tomcat(伺服器) 看的servlet程序
1 | <servlet> |
<servlet-name>是幫servlet取別名(通常是class名),例如MyServlet。
<display-name>也是命名,與<servlet-name>的差別是,這裡是給管理工具用的,在不同語系的xml檔中會不同,但大部分時候不會用到這個標籤,可忽略(參考stackoverflow-What is a servlet’s “display-name” for?)
1
2
3
4
5<servlet>
<servlet-name>MyServlet</servlet-name>
<displayable-name xml:lang="en">My Servlet</displayable-name>
<displayable-name xml:lang="fr">Ma Servlet</displayable-name>
</servlet><servlet-class>設定這個Servlet要導去哪個class。
<servlet-mapping>設定給人看的servlet的訪問位置
1 | <servlet-mapping> |
<servlet-name>這邊的servlet-name是用於辨識要給哪個servlet使用,上方範例的意思就是,這條路徑我要給ServletLearning這個servlet使用,名稱務必符合和servlet標籤裡找的到的name。
<url-pattern>用於標記路徑,用於拜訪servlet,網址設定前方一定要有個
/
,這是固定格式,拜訪的地址為http://ip:port/專案名稱/設定網址
,例如http://localhost:8080/HelloJSP/Learning
,輸入即可拜訪servlet,此處有個慣例,那就是盡量讓網址和要拜訪的servlet有關,可以讓人馬上知道這個網址是哪個servlet要用的。
用日常生活情境來比喻的話,我把這個網站當成星X點
<servlet>標籤是他們內部運作要看的
<servlet-name>標籤是部門名牌,負責售票、點歌、點餐服務、提供餐點……
<servlet-class>指定他們工作的內容,可能是內部人員的工作清單。
<servlet-mapping>是給消費者看的菜單
<servlet-name>利用這個標籤找到相對應部門提供的服務(總不會找賣票的工作人員點歌吧)
<url-pattern>現在拿的是菜單或是歌單,消費者可以看到選項(進到網址),進而使用服務
我想要點餐,所以我打開菜單(進到url-pattern網址),撥打服務電話請工作人員來(使用servlet的其中一個),他們就會進行點餐的服務(運行servlet-class設定的class)
如果出現錯誤訊息The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
可以參考我的另一篇文章