標籤:客戶 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及相關技術詳解