隨筆-42  評(píng)論-42  文章-0  trackbacks-0
                 一 Servlet 與 JSP

             Servlet是Java技術(shù)對(duì)CGI編程的回答。Servlet程序在服務(wù)器端運(yùn)行,動(dòng)態(tài)地生成Web頁(yè)面。與傳統(tǒng)的CGI和許多其他類似CGI的技術(shù)相比,Java Servlet具有更高的效率,更容易使用,功能更強(qiáng)大,具有更好的可移植性,更節(jié)省投資。
            
             高效

               在傳統(tǒng)的CGI(Common Gateway Interface:公共網(wǎng)關(guān)接口)中,每個(gè)請(qǐng)求都要啟動(dòng)一個(gè)新的進(jìn)程,如果CGI程序本身的執(zhí)行時(shí)間較短,啟動(dòng)進(jìn)程所需要的開銷很可能反而超過(guò)實(shí)際執(zhí)行時(shí)間。而在Servlet中,每個(gè)請(qǐng)求由一個(gè)輕量級(jí)的Java線程處理(而不是重量級(jí)的操作系統(tǒng)進(jìn)程)。
          在傳統(tǒng)CGI中,如果有N個(gè)并發(fā)的對(duì)同一CGI程序的請(qǐng)求,則該CGI程序的代碼在內(nèi)存中重復(fù)裝載了N次;而對(duì)于Servlet,處理請(qǐng)求的是N個(gè)線程,只需要一份Servlet類代碼。在性能優(yōu)化方面,Servlet也比CGI有著更多的選擇,比如緩沖以前的計(jì)算結(jié)果,保持?jǐn)?shù)據(jù)庫(kù)連接的活動(dòng),等等。

              方便

               Servlet提供了大量的實(shí)用工具例程,例如自動(dòng)地解析和解碼HTML表單數(shù)據(jù)、讀取和設(shè)置HTTP頭、處理Cookie、跟蹤會(huì)話狀態(tài)等。

               功能強(qiáng)大

          在Servlet中,許多使用傳統(tǒng)CGI程序很難完成的任務(wù)都可以輕松地完成。例如,Servlet能夠直接和Web服務(wù)器交互,而普通的CGI程序不能。Servlet還能夠在各個(gè)程序之間共享數(shù)據(jù),使得數(shù)據(jù)庫(kù)連接池之類的功能很容易實(shí)現(xiàn)。

              可移植性好

               Servlet用Java編寫,Servlet API具有完善的標(biāo)準(zhǔn)。因此,為I-Planet Enterprise Server寫的Servlet無(wú)需任何實(shí)質(zhì)上的改動(dòng)即可移植到Apache、Microsoft IIS或者WebStar。幾乎所有的主流服務(wù)器都直接或通過(guò)插件支持Servlet。

              節(jié)省投資

              不僅有許多廉價(jià)甚至免費(fèi)的Web服務(wù)器可供個(gè)人或小規(guī)模網(wǎng)站使用,而且對(duì)于現(xiàn)有的服務(wù)器,如果它不支持Servlet的話,要加上這部分功能也往往是免費(fèi)的(或只需要極少的投資)。

           
          JavaServer Pages(JSP)是一種實(shí)現(xiàn)普通靜態(tài)HTML和動(dòng)態(tài)HTML混合編碼的技術(shù)。
          posted on 2008-06-24 17:28 BlueSunshine 閱讀(243) 評(píng)論(4)  編輯  收藏 所屬分類: 學(xué)習(xí)心得

          評(píng)論:
          # re: 學(xué)習(xí) JSP 2008-06-24 17:33 | BlueSunshine
          二 支持Servlet的Web服務(wù)器--tomcat

          三 一個(gè)簡(jiǎn)單Servlet的基本結(jié)構(gòu)

          package servlet;

          import
           java.io.IOException;
          import
           java.io.PrintWriter;

          import
           javax.servlet.http.HttpServlet;
          import
           javax.servlet.http.HttpServletRequest;
          import
           javax.servlet.http.HttpServletResponse;

          public class SomeServlet extends HttpServlet 
          {
              
          public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException 
          {
                  PrintWriter out 
          =
           resp.getWriter();
              }

          }


             如果某個(gè)類要成為Servlet,則它應(yīng)該從HttpServlet 繼承,根據(jù)數(shù)據(jù)是通過(guò)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來(lái)說(shuō),它的大部分工作是通過(guò)println語(yǔ)句生成向客戶端發(fā)送的頁(yè)面。

             注意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í)。
            回復(fù)  更多評(píng)論
            
          # re: 學(xué)習(xí) JSP--基礎(chǔ)篇 2008-06-25 12:51 | BlueSunshine

          四 處理表單數(shù)據(jù)

            Java Servlet的好處之一,只需要簡(jiǎn)單地調(diào)用一下HttpServletRequest的getParameter方法、在調(diào)用參數(shù)中提供表單變量的名字(大小寫敏感)即可,而且GET請(qǐng)求和POST請(qǐng)求的處理方法完全相同。

             getParameter方法的返回值是一個(gè)字符串,它是參數(shù)中指定的變量名字第一次出現(xiàn)所對(duì)應(yīng)的值經(jīng)反編碼得到得字符串(可以直接使用)。如果指定的表單變量存在,但沒有值,getParameter返回空字符串;如果指定的表單變量不存在,則返回null。如果表單變量可能對(duì)應(yīng)多個(gè)值,可以用getParameterValues來(lái)取代getParameter。getParameterValues能夠返回一個(gè)字符串?dāng)?shù)組。

             最后,雖然在實(shí)際應(yīng)用中Servlet很可能只會(huì)用到那些已知名字的表單變量,但在調(diào)試環(huán)境中,獲得完整的表單變量名字列表往往是很有用的,利用getParamerterNames方法可以方便地實(shí)現(xiàn)這一點(diǎn)。getParamerterNames返回的是一個(gè)Enumeration,其中的每一項(xiàng)都可以轉(zhuǎn)換為調(diào)用getParameter的字符串。

            回復(fù)  更多評(píng)論
            
          # re: 學(xué)習(xí) JSP--Servlet 2008-06-25 14:45 | BlueSunshine
          五 Servlet的service方法

            service()可以涵蓋doGet()和doPost()。

          public class SomeServlet extends HttpServlet {
              @Override
              
          protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                  PrintWriter out 
          = resp.getWriter();
              }

          }

           
          這樣寫,就可以不用再寫doGet()和doPost(),因?yàn)閟ervice()可以處理get請(qǐng)求和post請(qǐng)求。   回復(fù)  更多評(píng)論
            
          # re: 學(xué)習(xí) JSP--Servlet 2008-06-25 14:51 | BlueSunshine

          六 Http的一個(gè)會(huì)話對(duì)象Session

          public class SomeServlet extends HttpServlet {
              @Override
              
          protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                  HttpSession session 
          = req.getSession();
                  session.setAttribute(
          "name""chh");
              }

          }
            回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 虞城县| 海晏县| 建昌县| 武山县| 全南县| 海安县| 英吉沙县| 化隆| 灵山县| 西乌珠穆沁旗| 合江县| 左权县| 进贤县| 博湖县| 龙海市| 丹江口市| 邯郸县| 武强县| 若羌县| 曲阳县| 鄂托克前旗| 武宣县| 临沧市| 姚安县| 大足县| 湖南省| 定远县| 柏乡县| 和政县| 蓬溪县| 杨浦区| 西和县| 济南市| 馆陶县| 舞钢市| 噶尔县| 西青区| 郧西县| 特克斯县| 涡阳县| 旌德县|