什么是servlets?
就象applet擴(kuò)充了網(wǎng)絡(luò)瀏覽器的能力一樣,servlets這個(gè)Java部件,擴(kuò)充了網(wǎng)絡(luò)服務(wù)器的能力。對(duì)于任何種類的服務(wù)器端的處理,Servlets可以作為server-side includes使用或者作為CGI程序(在JavaSoft的Java Web server中可以作為插件)執(zhí)行。 Servlets可以移植,不象CGI和專有的API模塊,你可以利用Java的“編寫(xiě)一次,到處運(yùn)行”的機(jī)制,在你的企業(yè)中配置網(wǎng)絡(luò)應(yīng)用程序。Servlets的運(yùn)行也很穩(wěn)固,在 servlet 中你創(chuàng)建了一個(gè)數(shù)據(jù)庫(kù)連接,下一次你訪問(wèn)servlet時(shí)連接仍然存在,這同CGI 程序不一樣。Servlets也具有擴(kuò)展性,所以你可以使用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,來(lái)減少開(kāi)發(fā)時(shí)間。Servlets可以運(yùn)行在任何支持servlet的網(wǎng)絡(luò)服務(wù)器上。目前,servlet SDK除了支持JavaSoft的Java Web server,還支持Netscape, Apache 和IIS,以及大量第三方的網(wǎng)絡(luò)服務(wù)器。
JSDK導(dǎo)游
為了創(chuàng)建servlets,你需要Java servlet SDK (JSDK),它可以從JavaSoft網(wǎng)站下載。JSDK包含諸如javax.servlet,javax.servlet.http等包,其中包含有你自己創(chuàng)建servlets時(shí)所需要的類和接口。對(duì)于sun.servlet 包來(lái)說(shuō),其中包含了網(wǎng)絡(luò)服務(wù)器用來(lái)運(yùn)行servlets所需要的類。 (對(duì)Servlet的支持通常是通過(guò)服務(wù)器插件的形式)。一旦你有了JSDK,你只要?jiǎng)?chuàng)建GenericServlet類的子類,并且重載若干方法。GenericServlet 定義了你應(yīng)該重載的三種主要方法: init(), service()和destroy()。
init() :初始化你的servlet,諸如打開(kāi)數(shù)據(jù)庫(kù)連接。
destroy():在applet運(yùn)行結(jié)束后,清除servlet 自身。
service():每次調(diào)用servlet時(shí),就調(diào)用service()方法。有兩個(gè)對(duì)象 ServletRequest和ServletResponse需要傳送給servlet,用于處理客戶請(qǐng)求。
為了幫助處理基于Web 的事務(wù),JSDK 在 javax.servlet.http包中有個(gè)HttpServlet類。HttpServlet是從GenericServlet中派生出來(lái)的,它提供了service()的一個(gè)實(shí)現(xiàn),該實(shí)現(xiàn)用于自動(dòng)處理GET, HEAD和POST的請(qǐng)求。
HttpServlet類中的方法有doGet()和doPost()。一個(gè)典型的CGI servlet只需要實(shí)現(xiàn)doGet()和doPost()方法。 doGet()和doPost()的參數(shù)為HttpServletRequest和HttpServletResponse。
HttpServletRequest是個(gè)接口,該接口提供了從客戶的請(qǐng)求獲取信息的一些方法。例如, getParameter()方法返回在客戶請(qǐng)求中的要害字/值對(duì)(或者從請(qǐng)求串中取得,或者從POSTed數(shù)據(jù)中取得)。
HttpServletResponse提供了輸出流,使得servlet把Html格式的輸出返回給客戶。
基本Servlet代碼
代替你的CGI
下面為一段可以取代CGI程序的基本的servlet代碼。Servlet完成如下的簡(jiǎn)單事情:列出由HTML表單搜集的要害字/值對(duì)(key/value)。
BasicCGIServlet處理POST,也用同樣處理GET。所以doPost()和doGet()都調(diào)用doService()。doService()可以在子類中重載,以實(shí)現(xiàn)更多特定的功能。
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class BasicCGIServlet extends HttpServlet {
public BasicCGIServlet () {
super();
}
public void doPost (HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doService(req, resp);
}
public void doGet (HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doService(req, resp);
}
PRotected synchronized void doService (HttpServletRequest req,
HttpServletResponse resp) throws ServletException, IOException {
// get an output stream to write to
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注