熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Java Servlet 和 JSP入門教程(3)

2013-11-15 12:20:37  來源: JSP教程 

   Servlet

   Servlet基本結構

  下面的代碼顯示了一個簡單Servlet的基本結構該Servlet處理的是GET請求所謂的GET請求如果你不熟悉HTTP可以把它看成是當用戶在浏覽器地址欄輸入URL點擊Web頁面中的鏈接提交沒有指定METHOD的表單時浏覽器所發出的請求Servlet也可以很方便地處理POST請求POST請求是提交那些指定了METHOD=POST的表單時所發出的請求具體請參見稍後幾節的討論

import javaio*;
import javaxservlet*;
import javaxservlethttp*;

public class SomeServlet extends HttpServlet {
public void doGet(HttpServletRequest request
HttpServletResponse response)
throws ServletException IOException {

// 使用request讀取和請求有關的信息(比如Cookies)
// 和表單數據

// 使用response指定HTTP應答狀態代碼和應答頭
// (比如指定內容類型設置Cookie)

PrintWriter out = responsegetWriter();
// 使用 out把應答內容發送到浏覽器
}
}

  如果某個類要成為Servlet則它應該從HttpServlet 繼承根據數據是通過GET還是POST發送覆蓋doGetdoPost方法之一或全部doGet和doPost方法都有兩個參數分別為HttpServletRequest 類型和HttpServletResponse 類型

  HttpServletRequest提供訪問有關請求的信息的方法例如表單數據HTTP請求頭等等HttpServletResponse除了提供用於指定HTTP應答狀態(等)應答頭(ContentTypeSetCookie等)的方法之外最重要的是它提供了一個用於向客戶端發送數據的PrintWriter 對於簡單的Servlet來說它的大部分工作是通過println語句生成向客戶端發送的頁面

  注意doGet和doPost拋出兩個異常因此你必須在聲明中包含它們另外你還必須導入javaio包(要用到PrintWriter等類)javaxservlet包(要用到HttpServlet等類)以及javaxservlethttp包(要用到HttpServletRequest類和HttpServletResponse類)

  最後doGet和doPost這兩個方法是由service方法調用的有時你可能需要直接覆蓋service方法比如Servlet要處理GET和POST兩種請求時

   輸出純文本的簡單Servlet

  下面是一個輸出純文本的簡單Servlet

   HelloWorldjava

package hall;

import javaio*;
import javaxservlet*;
import javaxservlethttp*;

public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request
HttpServletResponse response)
throws ServletException IOException {
PrintWriter out = responsegetWriter();
outprintln(Hello World);
}
}

   Servlet的編譯和安裝

  不同的Web服務器上安裝Servlet的具體細節可能不同請參考Web服務器文檔了解更權威的說明?俣ㄊ褂?Java Web Server(JWS)則Servlet應該安裝到JWS安裝目錄的servlets子目錄下在本文中為了避免同一服務器上不同用戶的Servlet命名沖突我們把所有Servlet都放入一?龆懶⒌陌?hall中如果你和其他人共用一個服務器而且該服務器沒有虛擬服務器機制來避免這種命名沖突那麼最好也使用包把Servlet放入了包hall之後HelloWorldjava實際上是放在servlets目錄的hall子目錄下

  大多數其他服務器的配置方法也相似除了JWS之外本文的Servlet和JSP示例已經在BEA WebLogic和IBM WebSphere 下經過測試WebSphere具有優秀的虛擬服務器機制因此如果只是為了避免命名沖突的話並非一定要用包

  對於沒有使用過包的初學者下面我們介紹編譯包裡面的類的兩種方法

  一種方法是設置CLASSPATH使其指向實際存放Servlet的目錄的上一級目錄(Servlet主目錄)然後在該目錄中按正常的方式編譯例如如果Servlet的主目錄是C:\JavaWebServer\servlets包的名字(即主目錄下的子目錄名字)是hall在Windows下編譯過程如下

DOS> set CLASSPATH=C:\JavaWebServer\servlets;%CLASSPATH%
DOS> cd C:\JavaWebServer\servlets\hall
DOS> javac YourServletjava

  第二種編譯包裡面的Servlet的方法是進入Servlet主目錄執行javac directory\YourServletjava(Windows)或者javac directory/YourServletjava(Unix)例如再次假定Servlet主目錄是C:\JavaWebServer\servlets包的名字是hall在Windows中編譯過程如下

DOS> cd C:\JavaWebServer\servlets
DOS> javac hall\YourServletjava

  注意在Windows下大多數JDK 版本的javac要求目錄名字後面加反斜槓(\)JDK已經改正這個問題然而由於許多Web服務器仍舊使用JDK 因此大量的Servlet開發者仍舊在使用JDK

  最後Javac還有一個高級選項用於支持源代碼和class文件的分開放置即你可以用javac的d選項把class文件安裝到Web服務器所要求的目錄

   運行Servlet

  在Java Web Server下Servlet應該放到JWS安裝目錄的servlets子目錄下而調用Servlet的URL是http://host/servlet/ServletName注意子目錄的名字是servlets(帶s而URL使用的是servlet由於HelloWorld Servlet放入包hall因此調用它的URL應該是http://host/servlet/hallHelloWorld在其他的服務器上安裝和調用Servlet的方法可能略有不同

  大多數Web服務器還允許定義Servlet的別名因此Servlet也可能用http://host/anypath/anyfilehtml形式的URL調用詳細運行配置完全依賴於服務器類型請參考服務器文檔了解細節


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20765.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.