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