在上一篇介紹了Servlet之後,我們就要來看看如何實際開始使用它。
(和我部落格同時發佈:http://www.dotblogs.com.tw/alantsai/archive/2013/09/27/120927.aspx)
使用Servlet物件
我們上次提到Servlet其實是一個API,因此讓有實作這個API的Class能夠和Container結合,由Container來manage成為一個網站。那麼,我們就會需要對Servlet的物件有些瞭解才能夠開始開發網站。
我們知道Http有不同的訪問方式,通常來說最常見的兩個是Get和Post。Get通常用來取得資料,而Post用來傳資料。Servlet對於這些訪問方式有定義對應的method,讓我們接到不同的訪問方式有不同的處理方法。因此,他們使用do{xxx}的方式表示對應的訪問方式。例如,要處理Get的地方,就在method doGet裡面去處理,同理,如果要處理Post,就在method doPost來處理。
題外話:在java裡面和javascript一樣,method通常都是小寫開頭。
那我們知道了每一個訪問方式的入口以後,我們也需要能夠取得http裡面對應的內容。因此,上面那幾個method(do{xxx}),都會代入兩個參數供我們使用,一個是HttpServletRequest和HttpServletResponse。
從上面的名字可以看出兩個所有的作用,一個代表進來的Request,一個代表返回的Response。Request就可以取得進來的資料例如Query String,而Response就是我們想要返回的。
設定Servlet連接
那到目前為止,我們有足夠的訊息能夠處理進來的Request並且返回對應的內容,但是我們還沒有看到如何進入我們這個頁面。一個網站裡面一定有很多頁面,那麼如何把一個Servlet從另一個Servlet區分呢?就需要靠設定檔。
基本上會有一個Web.xml檔案(或者可以用annotation的方式設定),告訴我們的Container(例如Tomcat)當某一個路徑進來的時候,請呼叫哪一個Servlet來處理。
設定來說基本分兩段:
1.servlet
2.servlet-mapping
servlet
這裡面的設定比較像servlet的對應。
這個裡面一定會有包含兩個element:
1.servlet-name:表示代表這個servlet的名字,方便其他部份reference。在整個web.xml是不可以重複的。
2.servlet-class:代表著這個servlet的Class名稱。這邊需要Fully Qualified Name(.net說法,不知道java是不是也這樣叫), 也就是包含package(.net 裡面的Namespace)名稱
那servlet下面還可以代入預設參數。這個意思是,我們可以再處理request的時候,透過getInitParameter()的方式讀取一些預設在這邊的參數。
格式是init-para表示一個參數,而其下面則是param-name和param-value代表著key, Value。
servlet設定範例
<SERVLET>
<SERVLET-NAME>TestServlet</SERVLET-NAME>
<SERVLET-CLASS>com.sample.servlet.TestServlet</SERVLET-CLASS>
<INIT-PARAM>
<PARAM-NAME>default</PARAM-NAME>
<PARAM-VALUE>this is a default value</PARAM-VALUE>
</INIT-PARAM>
</SERVLET>
上面代表有一個servlet名稱為TestServlet,它的clas是com.sample.servlet.TestServlet,同時它的預設有一個稱為default,數值為this is a default value。
servlet-mapping
這個部份是要設定什麽路徑使用什麽Servlet。
他有兩個基本element:
1.servlet-name:那一個servlet要對應到(上面設定servlet-name的對應)
2.url-pattern:相對路徑下面所要對應。裡面可以使用*等於wildcard。
servlet-mapping設定範例
<SERVLET-MAPPING>
<SERVLET-NAME>TestServlet</SERVLET-NAME> <URL-PATTERN>/TestServlet</URL-PATTERN>
</SERVLET-MAPPING>
表示只要url進來對應為/TestServlet,就使用在servlet定義的那個servlet-class作為處理的object。
結語
上一篇講的是比較抽象的Servlet,這一篇介紹了一些Servlet的物件讓我們能夠處理進來的request,和如何設定Servlet。下一篇就真的寫code了。
(本來這一篇想要開始寫範例程式,不過發現時間有些不夠,因此只能放到下一篇。)