第二章.JSP/Servlet及相關技術詳解

來源:互聯網
上載者:User

標籤:客戶   parameter   row   nal   super   上下文   style   建立   合成   

JSP的4種基本文法:

  1.JSP注釋:

    <%-- JSP注釋部分 --%>

  2.JSP聲明:

    <%! //聲明一個整型變數

      public int count;

      //聲明一個方法

      public String info(){

        return "hello";

      }

    %>

  3.輸出JSP運算式:

    <%=count++%>

    這句話代替了Java中的out.print(count++);但是注意輸出運算式後面不能有分號。

  4.JSP指令碼:

 1 <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> 2 <html> 3 <head> 4     <title>歡迎</title> 5 </head> 6 <body> 7 <table bgcolor="#9999dd" border="1" width="300px"> 8 <% 9 for(int i = 0; i < 10; i++){10 %>11 <tr>12     <td>迴圈值:</td>13     <td><%=i%></td>14     </tr>15 <%16 }17 %>18 </body>19 </html>
View Code

JSP的3個編譯指令:(這裡只講兩個)

  1.page指令:位於JSP頁面的頂端,一個JSP頁面可以是用多條page指令。

  page文法格式:<%@page  contentType="text/html; charset=GBK" language="java" ... %>

contentType屬性參考網頁:http://developer.51cto.com/art/201106/270666.htm

  2.include指令:可以將一個外部檔案嵌入到當前JSP檔案中,同時解析這個頁面中的JSP語句。

    include既可以包含靜態文本,也可以包含動態JSP頁面。靜態include編譯指令會將被包含的頁面加入本頁面,融合成一個頁面,因此被包含頁面不需要是一個完整

     頁面。

    靜態include格式:<%@include file="relativeURLSpec"%>

JSP的7個動作指令:

  1.forward指令:用於將頁面響應轉寄到另外的頁面。既可以轉寄到靜態HTML頁面,也可以轉寄到動態JSP頁面,或者轉寄到容器中的Servlet.

  2.include動態指令:用於包含某頁面,被包含的頁面不會匯入包含頁面,僅僅將被包含頁面的body內容插入本頁面。

  3.useBean指令:用於在JSP頁面初始化一個Java執行個體

  4.setProperty指令:用於為JavaBean執行個體的屬性設定值

  5.getProperty指令:用於輸出JavaBean執行個體的屬性

  若多個JSP頁面需要重複使用某段代碼,則可以把這段代碼定義成Java類的方法,然後讓多個JSP頁面調用該方法,這樣可以代碼複用。

  6.plugin指令:主要用於下載伺服器端的JavaBean或Applet到用戶端執行。由於程式在用戶端執行,所以用戶端必須安裝虛擬機器

  7.param指令:用於設定參數值,該指令不能單獨使用,可以與jsp:include、jsp:forward、jsp:plugin三個指令結合使用。

JSP指令碼中的9個內建對象:

  這9個內建對象都是Servlet API介面的執行個體,只是JSP規範對它們進行了預設初始化(有JSP頁面對應Servlet的_jspService()方法來建立這些執行個體)。即它們已經是對象,可直接

   使用。

  1.application:javax.servlet.ServletContext的執行個體,這個執行個體代表JSP所屬的Web應用本身,可用於JSP頁面,或者Servlet之間交換資訊。

  2.config:javax.servlet.ServletConfig的執行個體,該執行個體代表該JSP的配置資訊。

  3.exception:java.lang.Throwable的執行個體,用來代表其他頁面中的異常和錯誤。只有當頁面是錯誤處理頁面,即編譯指令page的isErrorPage屬性為true時,該對象才可以使用

  4.out:javax.servlet.jsp.JspWriter的執行個體,該執行個體代表JSP頁面的輸出資料流,用於輸出內容,形成HTML頁面。

  5.page:代表該頁面本身,也就是Servlet中的this,其類型就是產生的Servlet類,能用page的地方就可用this。

  6.pageContext:javax.servlet.jsp.PageContext的執行個體,該對象代表JSP頁面上下文使用該對象可以訪問頁面中的共用資料。

  7.request:javax.servlet.http.HttpServletRequest的執行個體,該對象封裝了一次請求,用戶端的請求參數都被封裝在該對象裡,擷取用戶端請求參數必須使用該對象。

  8.response:javax.servlet.http.HttpSerletResponse的執行個體,代表格服務器對用戶端的響應。通常很少使用該對象直接響應,而是使用out對象,除非需要產生非字元響應。

    response對象常用於重新導向。

  9.session:javax.servlet.http.HttpSession的執行個體,該對象代表一次會話。當用戶端瀏覽器和網站建立串連時,會話開始;當用戶端關閉瀏覽器時,會話結束。

Servlet介紹:

  JSP的本質就是Servlet,開發人員把編寫好的JSP頁面部署在Web容器中之後,Web容器會將JSP編譯成對應的Servlet。

  直接使用Servlet壞處:Servlet的開發效率非常低,特別是當使用Servlet產生表現層頁面時,頁面中的所有HTML標籤,都採用Servlet的輸出資料流來輸出,極其繁瑣。

  自MVC規範出現後,Servlet的責任開始明確下來,僅作為控制器使用,不在需要產生頁面標籤,也不再作為視圖層角色使用。

Servlet的開發:

  Servlet被稱為伺服器端小程式,是運行在伺服器端的程式,用於處理及響應用戶端的請求。

  Servlet是個特殊的java類,繼承自HTTPServlet。

  Servlet提供不同的方法用於響應用戶端請求:

    1.doGet:響應用戶端的GET請求

    2.doPost:響應用戶端POST請求

    3.doPut:響應用戶端PUT請求

    4.doDelete:響應用戶端DELETE請求

  用戶端的請求通常只有GET和POST兩種,Servlet為了響應這兩種請求,必須重寫doGet()和doPost()兩個方法。

  大部分時候Servlet對於所有請求的響應都是完全一樣的。此時可以採用重寫service(HttpServletRequest request, HttpServletResponse response)方法來代替上面的幾個方法,

   即可響應用戶端的所有請求。

  不用為Servlet類編寫構造器,若要對Servlet執行初始化操作,應將初始化操作放在Servlet的init()方法中定義。若重寫init(ServletConfig config)方法,則應該在重寫該方法的

   第一行調用super.init(config)。這樣該方法將調用HTTPServlet的init方法。

 1 package lee; 2  3 import javax.servlet.*; 4 import javax.servlet.http.*; 5 import javax.servlet.annotation.*; 6  7 import java.io.*; 8  9 // Servlet必須繼承HttpServlet類10 @WebServlet(name="firstServlet"11     , urlPatterns={"/firstServlet"})12 public class FirstServlet extends HttpServlet13 {14     // 用戶端的回應程式法,使用該方法可以響應用戶端所有類型的請求15     public void service(HttpServletRequest request,16         HttpServletResponse response)17         throws ServletException,java.io.IOException18     {19         // 設定解碼方式20         request.setCharacterEncoding("GBK");21         response.setContentType("text/html;charSet=GBK");22         // 擷取name的請求參數值23         String name = request.getParameter("name");24         // 擷取gender的請求參數值25         String gender = request.getParameter("gender");26         // 擷取color的請求參數值27         String[] color = request.getParameterValues("color");28         // 擷取country的請求參數值29         String national = request.getParameter("country");30         // 擷取頁面輸出資料流31         PrintStream out = new PrintStream(response.getOutputStream());32         //輸出HTML頁面標籤33         out.println("<html>");34         out.println("<head>");35         out.println("<title>Servlet測試</title>");36         out.println("</head>");37         out.println("<body>");38         // 輸出請求參數的值:name39         out.println("您的名字:" + name + "<hr/>");40         // 輸出請求參數的值:gender41         out.println("您的性別:" + gender + "<hr/>");42         // 輸出請求參數的值:color43         out.println("您喜歡的顏色:");44         for(String c : color)45         {46             out.println(c + " ");47         }48         out.println("<hr/>");49         out.println("您喜歡的顏色:");50         // 輸出請求參數的值:national51         out.println("您來自的國家:" + national + "<hr/>");52         out.println("</body>");53         out.println("</html>");54     }55 }
View Code

  Servlet和JSP的區別是:

    1.Servlet中沒有內建對象,原來JSP中的內建對象都必須由程式顯示建立

    2.對於靜態HTML標籤,Servlet都必須使用頁面輸出資料流逐行輸出

  JSP是Servlet的一種簡化,使用JSP只需要完成程式員要輸出到用戶端的內容,JSP指令碼嵌入一個類中由JSP容器完成。

  Servlet是一個完整的Java類,這個類的service()方法用於聲稱對用戶端的響應。

Servlet的配置:

  編輯好的Servlet源檔案並不能響應使用者請求,還需將其編譯成class檔案。將編譯後的class檔案放在WEB-INF/classes路徑下,若Servlet有包,則在WEB-INF/classes路徑下建立

   對應的檔案夾。

  從Servlet3.0開始,配置Servlet有兩種方式:

    1.在Servlet類中使用@WebServlet註解進行配置:參考網址:http://blog.csdn.net/kpchen_0508/article/details/41312735

    2.在web.xml檔案中進行配置:參考網址:http://01121264-163-com.iteye.com/blog/1530063

JSP/Servlet的聲明周期:

  

第二章.JSP/Servlet及相關技術詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

Tags Index: