一 jsp出現(xiàn)的原因 Jsp出現(xiàn)的原因是因為Servlet的缺點: (1) 開發(fā)者和維護(hù)應(yīng)用程序的成員必須對java編程有全面的了解,因為在處理代碼的時候和處理html元素混合在一起 (2) 如果要改變應(yīng)用的外觀,或者增加對新客戶類型的支持,則需要對象sevlet對嗎進(jìn)行更新和重編譯 (3) 在設(shè)計應(yīng)用界面時,很難充分利用web開發(fā)頁面,如果這種工具用于web頁面布局,所生成的代碼很容易出錯,即Servlet產(chǎn)生應(yīng)答的時候,要返回一整個html代碼,在輸出的結(jié)果代碼中會有很多的out輸出語句,也不能很好的輸出 二 Jsp的介紹: 1.Jsp的概念: Jsp是servlet更高級的擴(kuò)展,是用來顯示動態(tài)內(nèi)容的,在后綴名為.jsp的程序里面寫。 2.Jsp優(yōu)點: (1)簡便性和有效性 (2)程序的獨立性 (3)程序的兼容性 (4)程序的可重用性(一般把多次使用的jsp代碼提取出來放到一個包中去調(diào)用) 3.Jsp網(wǎng)頁的構(gòu)成 概念:Jsp頁面就是帶有jsp元素的常規(guī)web頁面,包括靜態(tài)內(nèi)容(html)和動態(tài)內(nèi)容。動態(tài)內(nèi)容包括指令元素、腳本元素、動作元素注釋等 (1)指令元素 介紹:(1)指令元素主要用于為轉(zhuǎn)換階段提供JSP頁面的相關(guān)信息,指令不會產(chǎn)生任何輸出到當(dāng)前的輸出流中,它指定了有關(guān)頁面本身的信息,這些信息在請求期間一直保持不變。 (2)指令元素的作用范圍為當(dāng)前的頁面,即只為當(dāng)前的jsp服務(wù),即只對當(dāng)前的線程有效 語法:<%@ directive{attr=”value”}%> 分類:指令元素分為三種:page、include和taglib (1)配置指令元素:page 介紹:該指令用于整個頁面,page可以出現(xiàn)在jsp頁面的任何位置,不管是什么位置都對整個頁面有效,所以一般放到j(luò)sp文件的最開頭,和html中 的meta作用差不多。 語法:<%@page import=”java.util.*”%> 注:可以使用多個page指令,每一個屬性只能聲明一次,除了import之外 常用的屬性: (1)Import=“導(dǎo)包列表” 例子:%@page import=”java.util.*,java.io.*”% 注:Import屬性是唯一個一再同一個頁面中出現(xiàn)多次的屬性,并且在jsp中有直接可以使用的類,是自動隱藏的,為: Java.lang.* javax.servlet.jsp.*, javax.servlet.http.*; (2)language語言的設(shè)置 language=”scriptingLangeuage” (3)contentType=”” 應(yīng)答的類型 例子:<%@ page contentType=”text/html;charset=utf-8”%> 注:pageEncoding=””的編碼方式優(yōu)先于charset的編碼方式, 如果沒有指定contenetType類型,也沒有設(shè)定pageEncoding="utf-8",用默認(rèn)的字符集是ISO-8859-1。 (4)Session的設(shè)置 Session=”false”/”true” (5)Buffer的設(shè)置-----設(shè)置的是緩沖區(qū)大小 buffer=”16kb” 緩沖區(qū)默認(rèn)的大小是8kb (6)autoFlush------設(shè)置當(dāng)緩沖區(qū)占滿了是否自動刷新 autoFlush =”true” | “false” 如果把緩沖區(qū)設(shè)為none & autoFlush=”fallse” 會拋常, 因為在緩沖區(qū)滿了之后,沒有刷新的話,就不能往里在存,所以當(dāng)把緩沖區(qū)設(shè)為none 必須設(shè)置為autoFlush=”true” (7)錯誤處理頁 errorPage=“relativeURL”--- 設(shè)置當(dāng)前JSP頁面中代碼出現(xiàn)異常后,專門處理異常的頁面。 <%@ page errorPage=”errorHandler.jsp”%> <%@ page isErrorPage=”true”%> (8)異常處理 isErrorPage=“true|false” 注:只有錯誤處理有一個內(nèi)置對象 Exception (9)Include指令元素 概念:include指令用于在JSP頁面中包含一個文件,該文件可以是JSP頁面、HTML網(wǎng)頁、文本文件或一段Java代碼,用它可以簡化頁面代碼,提高代碼的重用性。 實例: Include指令用于在jsp頁面中包含一個文件 <%@ include file="date.txt"%> <%@ include file="MyHtml.html"%> <%@ include file="/date.txt"%> 虛擬目錄的根路徑 注:只能包含一個靜態(tài)的網(wǎng)頁,不能包含動態(tài)的 靜態(tài)的包含是把指定的文件包含在jsp中,是在轉(zhuǎn)換之前
(10)Taglib指令---自定義標(biāo)簽 taglib指令允許頁面使用用戶定制的標(biāo)簽,語法如下: <%@taglib (uri="具有唯一標(biāo)識和前綴相關(guān)的標(biāo)簽描述符地址" prefix="前綴")%> (2)腳本元素 概念:把java代碼嵌入到j(luò)sp頁面中,這些java代碼將出現(xiàn)在由當(dāng)前的jsp頁面生成的servlet中,使JSP將靜態(tài)內(nèi)容與動態(tài)內(nèi)容分離出來。 (1)表達(dá)式:<%=8*3%> 注:在不同的位置輸出的位置也不一樣,而且輸出的結(jié)果位24 由web服務(wù)器計算值 轉(zhuǎn)換的原理:在jsp中的html標(biāo)簽中的內(nèi)容由 out.println()輸出 在寫表達(dá)式的時候,表達(dá)式必須有值,必須是有返回值的 (2)腳本: 格式:<%java的代碼段%> 介紹:腳本是在<% %>里嵌入的Java代碼,這里的Java代碼和一般的Java代碼沒有什么區(qū)別,所以每一條語句同樣要以分號“;”結(jié)束,這和表達(dá)式是不相同的。 例子: (1)嵌入java代碼段 瀏覽器在解析的時候<會當(dāng)成標(biāo)簽的開始--> <% int i = 10; int j = 20; if (i < j) { out.print("i<j"); } else { out.print("i>j"); } %> (2)可以對java代碼拆分,只要是完整的代碼就行 <% int i = 10; int j = 20; if (i < j) { %> i<j <% } else { %> i>j <% } %> (3)如果要輸出i的值,必須要在java代碼中輸出 <% int i = 10; int j = 20; if (i < j) { out.print(i); %> <j <% } else { out.print(i); %> >j <% } %> 注:以上三種方法都一樣 (3)聲明變量和方法: 語法:<!%方法或變量%> <%! int var; 聲明的是變量加 ; 聲明方法的時候不用加 public void fun(){ var = 10; } static{ System.out.println("靜態(tài)的代碼塊"); } %>
三 補充 1.Jsp界面訪問時的流程: 第一次: 瀏覽器第一次訪問---àweb服務(wù)器上的某一個jsp頁面 Jsp頁面-àservlet.java(會編譯成servlet頁面)--à編譯.class----à載入內(nèi)容,初始化init() 瀏覽器 <------------------- 再次訪問: 瀏覽器---à訪問jsp頁面-----à開啟線程---à直接返回瀏覽器 如果jsp有更新,還會是從第一步開始
2.顯示當(dāng)前系統(tǒng)時間 <% java.util.Date date = new java.util.Date(); out.println(date.toString()); %> 3.九九乘法表的實現(xiàn) <% int firstCount = Integer.parseInt(request.getParameter("fisrtCount")); int secondCount = Integer.parseInt(request.getParameter("secondCount")); for(int i=1;i<firstCount+1;i++){ for(int j =1;j<=i;j++){ out.print(j+"*"+i+"="+i*j+" "); } out.print("<br/>"); } %> 注:獲取的時候必須是在一個<%%>標(biāo)簽里
|
|