隨筆 - 100  文章 - 50  trackbacks - 0
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(3)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          收藏夾

          我收藏的一些文章!

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          一、Servlet的基本結(jié)構(gòu)。

          //Servlet de 基本結(jié)構(gòu)

          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" 可以讀取輸入的值 (e.g. cookies)
          // 和表單提交的數(shù)據(jù)
          // 用 "response" 返回輸出的內(nèi)容

          PrintWriter out = response.getWriter();

          // 用 "out" 向?yàn)g覽器寫(xiě)內(nèi)容。

          }
          }


          Servlet都是有HttpServlet繼承下來(lái)的。基本結(jié)構(gòu)如上面的代碼所示:
          下面就舉幾個(gè)Servlet的小例子。

          //生成一般文本的例子 下載本例

          package test;
          //用這條語(yǔ)句編譯 javac -encoding iso8859_1 filename.java

          import java.io.*;
          import javax.servlet.*;
          import javax.servlet.http.*;

          public class HelloServlet extends HttpServlet {
          public void doGet( HttpServletRequest requset,
          HttpServletResponse response)
          throws IOException, ServletException {
          PrintWriter out = response.getWriter();
          out.println("Hello,world!");
          out.println("你好,萬(wàn)維網(wǎng)");
          }
          }


          //生成HTML內(nèi)容的例子。下載本程序

          package test;
          //javac -encoding iso8859_1 HelloWWW.java
          import java.io.*;
          import javax.servlet.*;
          import javax.servlet.http.*;

          public class HelloWWW extends HttpServlet {
          public void doGet( HttpServletRequest requset,
          HttpServletResponse response)
          throws IOException, ServletException {
          response.setContentType("text/html");
          PrintWriter out = response.getWriter();
          out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">"+
          "<HTML>"+
          "<HEAD>"+
          "<TITLE>"+"Hello WWW by LoveJSP.site"+"</TITLE>"+
          "<BODY>"+
          "<H1>Hello WWW</H1>"+
          "<H1>你好,萬(wàn)維網(wǎng)</H1>"+
          "<h2><A HREF=\"HTTP://LOVEJSP.COM\">welcom to LoveJSP.site</A></h2>"+
          "</BODY>"+
          "<HTML>");
          }
          }
          處理表單提交的數(shù)據(jù) Pely Gan

          在Web程序設(shè)計(jì)中,處理表單提交的數(shù)據(jù)是獲取Web數(shù)據(jù)的主要方法,今天,我們來(lái)看一看Servlet中是怎樣處理來(lái)自表單的數(shù)據(jù)的。

          表單數(shù)據(jù)的提交方法有兩種Post方法和Get方法,當(dāng)使用Post方法時(shí),數(shù)據(jù)由標(biāo)準(zhǔn)的輸入設(shè)備讀入,當(dāng)使用Get方法時(shí),數(shù)據(jù)由CGI變量QUERY_STRING傳遞給表單數(shù)據(jù)處理程序。

          Servlet會(huì)自動(dòng)將以上兩種方法得到的數(shù)據(jù)進(jìn)行處理,從而使用戶(hù)只要簡(jiǎn)單的調(diào)用HttpServletRequest的getParameter方法,給出變量名稱(chēng)即可取得該變量的值。需要注意的是,變量的名稱(chēng)是大小寫(xiě)敏感的。對(duì)于Post方法或Get方法提交的數(shù)據(jù),Servlet的處理方法是一樣的。當(dāng)請(qǐng)求的變量不存在時(shí),將會(huì)返回一個(gè)空字符串。如果變量有多個(gè)值,你應(yīng)該調(diào)用getParameterValues,這個(gè)方法將會(huì)返回一個(gè)字符串?dāng)?shù)組。使用getParameterNames可以取得所有變量的名稱(chēng),該方法返回一個(gè)Emumeration方法。

          下面讓我們來(lái)看一個(gè)簡(jiǎn)單的例子,下面這個(gè)Servlet讀取表單中指定名稱(chēng)的五個(gè)字段的值。下載這個(gè)例子

          //Html file----> postdata.htm 下載本文件
          <html>
          <head>
          <title>getFormData Servlet Example form LoveJSP.com</title>
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
          </head>

          <body bgcolor="#FFFFFF">
          <h1 align="center"> <i><b>Demo Page</b></i></h1>
          <form action="/try/servlet/lovejsp.getFormData">
          <p> </p>
          <table width="41%" border="2" align="center">
          <tr bgcolor="#6633CC" align="center">
          <td colspan="2" align="center"><font color='white'>getFormData Servlet Demo
          Page</font></td>
          </tr>
          <tr bgcolor="#FFFFCC">
          <td align="center" width="43%">
          <div align="right">username:</div>
          </td>
          <td width="57%">
          <div align="left">
          <input type="text" name="username">
          </div>
          </td>
          </tr>
          <tr bgcolor="#CCFF99">
          <td align="center" width="43%">
          <div align="right">password:</div>
          </td>
          <td width="57%">
          <div align="left">
          <input type="password" name="password">
          </div>
          </td>
          </tr>
          <tr bgcolor="#FFFFCC">
          <td align="center" width="43%">
          <div align="right">Email:</div>
          </td>
          <td width="57%">
          <div align="left">
          <input type="text" name="email">
          </div>
          </td>
          </tr>
          <tr bgcolor="#CCFF99">
          <td align="center" width="43%">
          <div align="right">Homepage:</div>
          </td>
          <td width="57%">
          <div align="left">
          <input type="text" name="Homepage">
          </div>
          </td>
          </tr>
          </table>
          <p align="center">
          <input type="reset" name="Reset" value="clear">
          <input type="submit" name="Submit2" value="Let's Go">
          </p>
          </form>
          </body>
          </html>

          //Servlet File getFormData.java 下載本文件

          package lovejsp;

          import java.io.*;
          import javax.servlet.*;
          import javax.servlet.http.*;

          /** Servlet getParameter Ex from Lovejsp.site(http://www.lovejsp.com)
          */

          public class getFormData extends HttpServlet {
          public void doGet(HttpServletRequest request,
          HttpServletResponse response)
          throws ServletException, IOException {
          response.setContentType("text/html");
          PrintWriter out = response.getWriter();
          String title = "讀取表單數(shù)據(jù)";
          out.println(LovejspTools.headTitle(title) + //a tools method to show the html code with title
          "<BODY BGCOLOR=\"#FDF5E6\">\n" +
          "<H1 ALIGN=CENTER>" + title + "</H1>\n" +
          "<UL>\n" +
          " <LI><B>username</B>: "
          + request.getParameter("username") + "\n" +
          " <LI><B>password</B>: "
          + request.getParameter("password") + "\n" +
          " <LI><B>Email</B>: "
          + request.getParameter("Email") + "\n" +
          " <LI><B>Homepage</B>: "
          + request.getParameter("Homepage") + "\n" +
          "</UL>\n" +
          "</BODY></HTML>");
          }
          }


          這個(gè)程序的運(yùn)行結(jié)果如下圖所示:





          大家可能注意到了,上面的結(jié)果中Email的值是null,這是因?yàn)樵诒韱沃袥](méi)有這個(gè)字段,表單的email的名稱(chēng)是email。

          下面這個(gè)程序是getParameterNames的示例,也是調(diào)試程序的很好的工具,它的功能是顯示所有的表單數(shù)據(jù)。

          //Servlet File ShowAllFormData.java 下載本文件

          package lovejsp;

          import java.io.*;
          import javax.servlet.*;
          import javax.servlet.http.*;
          import java.util.*;

          public class ShowAllFormData extends HttpServlet {
          public void doGet(HttpServletRequest request,
          HttpServletResponse response)
          throws ServletException, IOException {
          response.setContentType("text/html");
          PrintWriter out = response.getWriter();
          String title = "顯示所有的Form變量的值";
          out.println("<HTML><HEAD><TITLE>"+title+"</TITLE></HEAD>"+
          "<BODY BGCOLOR=\"#FDF5E6\">\n" +
          "<H1 ALIGN=CENTER>" + title + "</H1>\n" +
          "<TABLE BORDER=1 ALIGN=CENTER>\n" +
          "<TR BGCOLOR=\"#FFAD00\">\n" +
          "<TH>變量名稱(chēng)<TH>變量值");
          Enumeration paramNames = request.getParameterNames();
          while(paramNames.hasMoreElements()) {
          String paramName = (String)paramNames.nextElement();
          out.println("<TR><TD>" + paramName + "\n<TD>");
          String[] paramValues = request.getParameterValues(paramName);
          if (paramValues.length == 1) {
          String paramValue = paramValues[0];
          if (paramValue.length() == 0)
          out.print("<I>No Value</I>");
          else
          out.print(paramValue);
          } else {
          out.println("<UL>");
          for(int i=0; i<paramValues.length; i++) {
          out.println("<LI>" + paramValues[i]);
          }
          out.println("</UL>");
          }
          }
          out.println("</TABLE>\n</BODY></HTML>");
          }

          public void doPost(HttpServletRequest request,
          HttpServletResponse response)
          throws ServletException, IOException {
          doGet(request, response);
          }
          }

          運(yùn)行結(jié)果:


          好了,that's all for today,thank you all. see you next time
          在Servlet中使用請(qǐng)求頭(Request Header) LoveJSP.site

          Request Header簡(jiǎn)介
          當(dāng)一個(gè)客戶(hù)端(通常是瀏覽器)向Web服務(wù)器發(fā)送一個(gè)請(qǐng)求是,它要發(fā)送一個(gè)請(qǐng)求的命令行,一般是GET或POST命令,當(dāng)發(fā)送POST命令時(shí),它還必須向服務(wù)器發(fā)送一個(gè)叫"Content-Length”的請(qǐng)求頭(Request Header) 用以指明請(qǐng)求數(shù)據(jù)的長(zhǎng)度,除了Content-Length之外,它還可以向服務(wù)器發(fā)送其它一些Headers,如:

          Accept 瀏覽器可接受的MIME類(lèi)型
          Accept-Charset 瀏覽器支持的字符編碼
          Accept-Encoding 瀏覽器知道如何解碼的數(shù)據(jù)編碼類(lèi)型(如 gzip)。Servlets 可以預(yù)先檢查瀏覽器是否支持gzip并可以對(duì)支持gzip的瀏覽器返回gzipped的HTML頁(yè)面,并設(shè)置Content-Encoding回應(yīng)頭(response header)來(lái)指出發(fā)送的內(nèi)容是已經(jīng)gzipped的。在大多數(shù)情況下,這樣做可以加快網(wǎng)頁(yè)下載的速度。
          Accept-Language 瀏覽器指定的語(yǔ)言,當(dāng)Server支持多語(yǔ)種時(shí)起作用。
          Authorization 認(rèn)證信息,一般是對(duì)服務(wù)器發(fā)出的WWW-Authenticate頭的回應(yīng)。
          Connection 是否使用持續(xù)連接。如果servlet發(fā)現(xiàn)這個(gè)字段的值是Keep-Alive,或者由發(fā)出請(qǐng)求的命令行發(fā)現(xiàn)瀏覽器支持 HTTP 1.1 (持續(xù)連接是它的默認(rèn)選項(xiàng)),使用持續(xù)連接可以使保護(hù)很多小文件的頁(yè)面的下載時(shí)間減少。
          Content-Length (使用POST方法提交時(shí),傳遞數(shù)據(jù)的字節(jié)數(shù))
          Cookie (很重要的一個(gè)Header,用來(lái)進(jìn)行和Cookie有關(guān)的操作,詳細(xì)的信息將在后面的教程中介紹)
          Host (主機(jī)和端口)
          If-Modified-Since (只返回比指定日期新的文檔,如果沒(méi)有,將會(huì)反回304 "Not Modified")
          Referer (URL)
          User-Agent (客戶(hù)端的類(lèi)型,一般用來(lái)區(qū)分不同的瀏覽器)
          如果你想更多的了解Request Header的內(nèi)容,你可以訪問(wèn)W3C的網(wǎng)站。

          在Servlet中讀取Request Header的內(nèi)容

          在Servlet中讀取Request Header的值是很簡(jiǎn)單的,只要調(diào)用HttpServletRequest的getHeader方法就可以了,當(dāng)你指定要返回的Header的名稱(chēng),該方法就會(huì)返回String類(lèi)型的Header的內(nèi)容,如果指定的Header不存在,就返回null。調(diào)用getHeaderNames可以返回包含所有Header名字的Enumeration.

          讀取所有Request Header值的Servlet程序

          下面是Tomcat中所帶的Servlet例子中關(guān)于Request Header的例子,下載該程序。

          import java.io.*;
          import java.util.*;
          import javax.servlet.*;
          import javax.servlet.http.*;

          public class RequestHeaderExample extends HttpServlet {

          public void doGet(HttpServletRequest request, HttpServletResponse response)
          throws IOException, ServletException
          {
          response.setContentType("text/html");
          PrintWriter out = response.getWriter();
          Enumeration e = request.getHeaderNames();
          while (e.hasMoreElements()) {
          String name = (String)e.nextElement();
          String value = request.getHeader(name);
          out.println(name + " = " + value);
          }
          }
          }
          訪問(wèn)標(biāo)準(zhǔn)CGI變量
          LoveJSP.site
          1. CGI變量簡(jiǎn)介
          如果你在以前使用過(guò)傳統(tǒng)的CGI,你應(yīng)該對(duì)"CGI變量”的概念很熟悉。 由這些變量可以取得一些和請(qǐng)求(Request)有關(guān)的信息。其中一些來(lái)自于 HTTP 請(qǐng)求命令行(request line) 和headers (例如:在URI中問(wèn)號(hào)后面的部分或者Content-Length header),一些來(lái)自于 Socket本身(例如:被請(qǐng)求主機(jī)的IP和名稱(chēng)),還有一些來(lái)自于服務(wù)器的配置信息(例如:被映射為URL目錄的實(shí)際 路徑)。

          2. Servlet和標(biāo)準(zhǔn)CGI變量之間的對(duì)應(yīng)關(guān)系
          下面的表格中給出了Servlet和標(biāo)準(zhǔn)CGI變量之間的對(duì)應(yīng)關(guān)系,對(duì)以前使用CGI變量進(jìn)行編程的朋友會(huì)有很大的幫助。 在下表中我們假設(shè)request是HttpServletRequest類(lèi)型的對(duì)象。
          CGI變量 含義 在 doGet 或 doPost 訪問(wèn)的辦法
          AUTH_TYPE 如果在請(qǐng)求中有 Authorization header ,則這個(gè)變量將會(huì)被賦值 (basic 或 digest) request.getAuthType()
          CONTENT_LENGTH 只有當(dāng)請(qǐng)求的方法是 POST 時(shí)這個(gè)變量才會(huì)有意義,它表示傳送的數(shù)據(jù)的字節(jié)數(shù)。 String.valueOf(request.getContentLength()) (返回String) 或者 request.getContentLength(),返回一個(gè)整數(shù)(int)。
          CONTENT_TYPE 如果被賦值,就表示數(shù)據(jù)的MIME類(lèi)型。 request.getContentType()
          DOCUMENT_ROOT 和網(wǎng)站根目錄對(duì)應(yīng)的實(shí)際路徑 getServletContext().getRealPath("/") 注意:在以前的Servlet標(biāo)準(zhǔn)中,這條語(yǔ)句是這樣寫(xiě)的request.getRealPath("/") 。
          HTTP_XXX_YYY 訪問(wèn)任意的HTTP headers request.getHeader("Xxx-Yyy")
          PATH_INFO URL 指向的路徑的信息。由于Servlet可以和服務(wù)器直接通訊,所以這個(gè)變量對(duì)Servlet沒(méi)什么作用。 request.getPathInfo()
          PATH_TRANSLATED 在Server上被映射為web目錄的目錄的真實(shí)路徑的信息。和上一個(gè)變量一樣,對(duì)Servlet用處不大。 request.getPathTranslated()
          QUERY_STRING 如果用 GET 方法發(fā)出請(qǐng)求(requests),這個(gè)變量中將會(huì)存放請(qǐng)求的數(shù)據(jù),其 形式為經(jīng)過(guò)URL編碼的一個(gè)大字符串。在servlet中,你很少會(huì)用到這個(gè)原始的字符串。而是 用 request.getParameter 方法來(lái)訪問(wèn)某個(gè)特定的請(qǐng)求數(shù)據(jù)。 request.getQueryString()
          REMOTE_ADDR 客戶(hù)端的IP地址,是String類(lèi)型的。其形式類(lèi)似于 "192.9.48.9"。 request.getRemoteAddr()
          REMOTE_HOST 發(fā)出請(qǐng)求的客戶(hù)端的域名(例如. "java.sun.com") 如果不能檢測(cè)到域名,就用客戶(hù)端的IP地址代替。 request.getRemoteHost()
          REMOTE_USER 如果 Authorization header 被賦值,則這個(gè)變量中放有用戶(hù)名。 request.getRemoteUser()
          REQUEST_METHOD 請(qǐng)求的類(lèi)型。通常為 GET 或 POST,但也可能是 HEAD, PUT, DELETE, OPTIONS, 或者 TRACE。 request.getMethod()
          SCRIPT_NAME srvlet的路徑 request.getServletPath()
          SERVER_NAME 服務(wù)器的名稱(chēng) request.getServerName()
          SERVER_PORT 服務(wù)器的端口 String.valueOf(request.getServerPort())(返回String類(lèi)型) request.getServerPort()(返回int類(lèi)型)
          SERVER_PROTOCOL 在請(qǐng)求命令行中用的協(xié)議的版本號(hào)。(例如. HTTP/1.0 或 HTTP/1.1)。 request.getProtocol()
          SERVER_SOFTWARE 所用 Web Server 軟件的名稱(chēng) getServletContext().getServerInfo()


          3. 例子:讀取CGI變量。
          下面是一個(gè)顯示除去 HTTP_XXX_YYY 外所有CGI變量的的servlet。他顯示了在上面的表格中列出的所有CGI變量的值。
          3.1 ShowCGIVariables.java
          Download Here

          //! ####### Start ShowCGIVariables.java
          import java.io.*;
          import javax.servlet.*;
          import javax.servlet.http.*;
          import java.util.*;


          public class ShowCGIVariables extends HttpServlet {
          public void doGet(HttpServletRequest request,
          HttpServletResponse response)
          throws ServletException, IOException {
          response.setContentType("text/html");
          PrintWriter out = response.getWriter();
          String[][] variables =
          { { "AUTH_TYPE", request.getAuthType() },
          { "CONTENT_LENGTH", String.valueOf(request.getContentLength()) },
          { "CONTENT_TYPE", request.getContentType() },
          { "DOCUMENT_ROOT", getServletContext().getRealPath("/") },
          { "PATH_INFO", request.getPathInfo() },
          { "PATH_TRANSLATED", request.getPathTranslated() },
          { "QUERY_STRING", request.getQueryString() },
          { "REMOTE_ADDR", request.getRemoteAddr() },
          { "REMOTE_HOST", request.getRemoteHost() },
          { "REMOTE_USER", request.getRemoteUser() },
          { "REQUEST_METHOD", request.getMethod() },
          { "SCRIPT_NAME", request.getServletPath() },
          { "SERVER_NAME", request.getServerName() },
          { "SERVER_PORT", String.valueOf(request.getServerPort()) },
          { "SERVER_PROTOCOL", request.getProtocol() },
          { "SERVER_SOFTWARE", getServletContext().getServerInfo() }
          };
          String title = "Servlet Example: 顯示CGI變量";
          out.println("<HTML><HEAD><TITLE>"+title +"</TITLE></HEAD>"+
          "<BODY BGCOLOR=\"#FDF5E6\">\n" +
          "<H1 ALIGN=CENTER>" + title + "</H1>\n" +
          "<TABLE BORDER=1 ALIGN=CENTER>\n" +
          "<TR BGCOLOR=\"#FFAD00\">\n" +
          "<TH>CGI Variable Name<TH>Value");
          for(int i=0; i<variables.length; i++) {
          String varName = variables[i][0];
          String varValue = variables[i][1];
          if (varValue == null)
          varValue = "<I>沒(méi)有被賦值</I>";
          out.println("<TR><TD>" + varName + "<TD>" + varValue);
          }
          out.println("</TABLE></BODY></HTML>");
          }

          public void doPost(HttpServletRequest request,
          HttpServletResponse response)
          throws ServletException, IOException {
          doGet(request, response);
          }
          }

          //! ####### End ShowCGIVariables.java
          posted on 2006-08-09 10:59 fly 閱讀(2193) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): jsp學(xué)習(xí)
          主站蜘蛛池模板: 蒙阴县| 天等县| 泾川县| 保康县| 红桥区| 托克逊县| 镇江市| 东光县| 民勤县| 县级市| 邳州市| 西宁市| 云霄县| 新巴尔虎左旗| 晋江市| 奎屯市| 文登市| 思南县| 孙吴县| 封开县| 班玛县| 武乡县| 隆回县| 合作市| 方城县| 临漳县| 靖江市| 桐乡市| 邵武市| 平武县| 孟村| 航空| 黄骅市| 贺兰县| 南涧| 临澧县| 康平县| 油尖旺区| 犍为县| 阜阳市| 鄂托克前旗|