三、第一個(gè)Servlet
2020-06-01 23:24:59
供稿:網(wǎng)友
3.1 Servlet基本結(jié)構(gòu)
下面的代碼顯示了一個(gè)簡(jiǎn)單Servlet的基本結(jié)構(gòu)。該Servlet處理的是GET請(qǐng)求,所謂的GET請(qǐng)求,如果你不熟悉HTTP,可以把它看成是當(dāng)用戶在瀏覽器地址欄輸入U(xiǎn)RL、點(diǎn)擊Web頁面中的鏈接、提交沒有指定METHOD的表單時(shí)瀏覽器所發(fā)出的請(qǐng)求。Servlet也可以很方便地處理POST請(qǐng)求。POST請(qǐng)求是提交那些指定了METHOD=“POST”的表單時(shí)所發(fā)出的請(qǐng)求,具體請(qǐng)參見稍后幾節(jié)的討論。
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”讀取和請(qǐng)求有關(guān)的信息(比如Cookies)
// 和表單數(shù)據(jù)
// 使用“response”指定HTTP應(yīng)答狀態(tài)代碼和應(yīng)答頭
// (比如指定內(nèi)容類型,設(shè)置Cookie)
PrintWriter out = response.getWriter();
// 使用 "out"把應(yīng)答內(nèi)容發(fā)送到瀏覽器
}
}
如果某個(gè)類要成為Servlet,則它應(yīng)該從HttpServlet 繼承,根據(jù)數(shù)據(jù)是通過GET還是POST發(fā)送,覆蓋doGet、doPost方法之一或全部。doGet和doPost方法都有兩個(gè)參數(shù),分別為HttpServletRequest 類型和HttpServletResponse 類型。HttpServletRequest提供訪問有關(guān)請(qǐng)求的信息的方法,例如表單數(shù)據(jù)、HTTP請(qǐng)求頭等等。HttpServletResponse除了提供用于指定HTTP應(yīng)答狀態(tài)(200,404等)、應(yīng)答頭(Content-Type,Set-Cookie等)的方法之外,最重要的是它提供了一個(gè)用于向客戶端發(fā)送數(shù)據(jù)的PrintWriter 。對(duì)于簡(jiǎn)單的Servlet來說,它的大部分工作是通過println語句生成向客戶端發(fā)送的頁面。
注意doGet和doPost拋出兩個(gè)異常,因此你必須在聲明中包含它們。另外,你還必須導(dǎo)入java.io包(要用到PrintWriter等類)、javax.servlet包(要用到HttpServlet等類)以及javax.servlet.http包(要用到HttpServletRequest類和HttpServletResponse類)。
最后,doGet和doPost這兩個(gè)方法是由service方法調(diào)用的,有時(shí)你可能需要直接覆蓋service方法,比如Servlet要處理GET和POST兩種請(qǐng)求時(shí)。
3.2 輸出純文本的簡(jiǎn)單Servlet
下面是一個(gè)輸出純文本的簡(jiǎn)單Servlet。
3.2.1 HelloWorld.java
package hall;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)