Servlet教程之基礎(chǔ)結(jié)構(gòu)及簡(jiǎn)單運(yùn)行
1. Servlet教程之Servlet的基礎(chǔ)結(jié)構(gòu)
下面我們來(lái)談?wù)勌幚碛脩鬐ET請(qǐng)求的最簡(jiǎn)單的servlet框架。GET請(qǐng)求就是用戶在瀏覽器的地址欄里輸入一個(gè)地址、在網(wǎng)頁(yè)上點(diǎn)擊連接或產(chǎn)生一個(gè)沒(méi)有定義方法的HTML表單后產(chǎn)生的請(qǐng)求。Servlets還能輕松處理表單的提交(POST),關(guān)于處理表單提交我們將在后面幾部分談到。
- import java.io.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- public class SomeServlet extends HttpServlet {
- public void doGet(
- HttpServletRequest request,
- HttpServletResponse response)
- throws ServletException, IOException {
- // 用 "request" 讀取http信息頭(如cookie)
- // 和HTML表單數(shù)據(jù) (如用戶輸入和提交的數(shù)據(jù))
- // 用"response"指定http響應(yīng) 和http信息頭
- // (如指明信息的類(lèi)型、設(shè)定cookie).
- PrintWriter out = response.getWriter();
- // 用 "out"輸出內(nèi)容到瀏覽器
- } }
不管是用doGet還是doPost方法,servlet都要用到HttpServlet擴(kuò)展類(lèi)。這些方法可分為兩類(lèi):HttpServletRequest和HttpServletResponse。HttpServletRequest含有獲得表單數(shù)據(jù)、HTTP信息頭等信息的方法。 HttpServletResponse則包含指明HTTP響應(yīng) (200, 404,等。)、信息頭(Content-Type, Set-Cookie, 等。)的方法,更重要的是你能使用PrintWriter方法向客戶端輸出信息。注意doGet和doPost方法會(huì)拋出兩個(gè)異常,所以必須在定義里包含他們。要用到PrintWriter、HttpServlet和HttpServletRequest, HttpServletResponse方法還必須分別引入java.io、javax.servlet和javax.servlet.http。 一般來(lái)說(shuō),doGet和doPost是被service方法調(diào)用的,但有時(shí)候你可能想越過(guò)service方法而直接使用自己定義的service方法,比如定義一個(gè)既能處理GET也能處理POST請(qǐng)求的servlet。
2. Servlet教程之一個(gè)簡(jiǎn)單的Servlet--產(chǎn)生存文本
◆下面是一個(gè)產(chǎn)生存文本的簡(jiǎn)單servlet的實(shí)例。
- HelloWorld.java
- import java.io.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- public class HelloWorld extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- PrintWriter out = response.getWriter();
- out.println("Hello World");
- }
- }
◆編譯和安裝Servlet
注意,安裝servlet的方法會(huì)因web服務(wù)器不同而不同。詳細(xì)請(qǐng)參考您使用的web服務(wù)器所帶的安裝文檔。Java Web 服務(wù)器即Java Web Server(JWS)2.0上帶有聯(lián)機(jī)實(shí)例。在JWS里,servlet程序必須JWS放在安裝目錄的servlets目錄下才能運(yùn)行。如果web服務(wù)器由多人使用并且沒(méi)有好的虛擬服務(wù)器的下層結(jié)構(gòu)來(lái)自動(dòng)避免沖突,你也可以像我一樣在servlets目錄下創(chuàng)建一個(gè)獨(dú)立包(我取名叫hall)即在servlets目錄下創(chuàng)建一個(gè)hall子目錄,并把你寫(xiě)的servlet放在該目錄下。這里我把HelloWorld.java放在hall目錄下。其他大多數(shù)服務(wù)器的安裝都大同小異,本教程的servlet和JSP例子都在BEA Weblogic和IBM的WebSphere 3.0測(cè)試通過(guò)。其中WebSphere對(duì)于虛擬服務(wù)器有一套優(yōu)秀的機(jī)制,所以沒(méi)有必要為了名字的沖突而單獨(dú)使用包。
如果你以前從未用過(guò)包,那么有兩種在包內(nèi)編譯類(lèi)文件的方法可以使用。
一種方法就是在CLASSPATH里設(shè)置好指向包含有你的servlet文件的目錄,這樣就可以在該目錄下正常編譯。舉個(gè)例子,如果你在Windows下的servlet的目錄是C:JavaWebServerservlets,包名(即子目錄)是hall, 那么在dos窗口設(shè)置如下:
- DOS> set CCLASSPATH=C:JavaWebServerservlets;%CLASSPATH%
- DOS> cd C:JavaWebServerservletshall
- DOS> javac YourServlet.java
***步、設(shè)置路徑。***一步到位,免得以后每次都要重新打開(kāi)一個(gè)dos窗口。Windows 95/98系統(tǒng)下在autoexec.bat文件里加入"set CLASSPATH=..."表達(dá)式,將CLASSPATH指向servlet.jar和jsp.jar。在NT下,開(kāi)始菜單-設(shè)置-控制面板,選擇“系統(tǒng)”,選擇“環(huán)境”,然后輸入變量名和變量值。注意如果你的包名是 name1.name2.name3的格式,還應(yīng)該設(shè)置CLASSPATH指向包的頂層(即name1)。
第二種方法是轉(zhuǎn)到包的上層目錄,然后執(zhí)行"javac directoryYourServlet.java" (注意Windows下是反斜桿)或者unix下"javac directory/YourServlet.java" (注意Unix下是正斜桿)。再舉個(gè)例子,比如你在windows下的servlet目錄是C:JavaWebServerservlets,包名也就是子目錄名是hall,那么執(zhí)行下列操作:
- DOS> cd C:JavaWebServerservlets
- DOS> javac hallYourServlet.java
注意Windows下,大部分JDK 1.1版本的javac都要求反斜桿,后來(lái)在JDK 1.2里得到了修正,但是由于很多web服務(wù)器是根據(jù)JDK1.1來(lái)配的,所以為了方便起見(jiàn)許多servlet作者還是堅(jiān)持反斜桿。
javac的-d選項(xiàng)可以用來(lái)指定將.class文件和源碼文件放在不同的地方。
◆Servlet教程運(yùn)行Servlet
Servlet一般是放在JWS安裝目錄下的servlets目錄下,并通過(guò) http://host/servlet/ServletName調(diào)用。注意這里的Servlets目錄中的Servlets帶有"s",而URL地址欄里的則沒(méi)有。
上面的例子放在hall包里,所以這樣調(diào)用:http://host/servlet/hall.HelloWorld。其他服務(wù)器在Servlet放置目錄和調(diào)用上可能會(huì)稍有不同。大部分服務(wù)器都允許你定義servlet目錄的映射,因此一個(gè)servlet也可以通過(guò)http://host/any-path/any-file.html調(diào)用。具體得看不同服務(wù)器,詳細(xì)可以查看服務(wù)器自帶的文檔。
Servlet教程基礎(chǔ)涉及的問(wèn)題很零碎,但是本Servlet教程將一步步幫助你慢慢認(rèn)識(shí)和提高。
【編輯推薦】