?? jsp(day02).txt
字號:
JSP第二天 2007年6月29日
JSP的注釋
<%--........--%>
JSP指令和JSP動作(標準的JSP標簽)
JSP指令的語法
<%@... ....%>
<%@include file="...."%> 包含指令,包含指令會將要包含的文件代碼原樣輸出到本頁面(在翻譯時把包含文件的內容引入并合并),不進行翻譯,file屬性制定要包含的文件的名字(注意要包含的文件的路徑),這個指令可以實現頁面的復用。
注意:<%@include file=" "%>要包含的JSP文件中不能定義重名的變量,如果不使用包含指令,那么JSP中的最小轉換單元就是JSP文件,使用了包含指令就會將多個jsp的結果合并到一起。
<%@page ..%>頁面指令
<%@page import="..."%> 引入包 例:<%@page import="java.util.*,ent.*"%>(可出現多次)
<%@page pageEncoding="GBK"%>設定頁面顯示的字符集
<%@page contentType="text/html;charset=GBK"%>設置輸出流的編碼方式和文件格式。
注意:輸出的字符集編碼方式要和頁面顯示的字符集相同,一般定義輸出流的編碼方式,注意以上兩個頁面指令在JSP中最好只出現一次。注意在請求中傳送的參數的值是中文的話需要調用請求request的
setCharacterEncoding("..")方法設置相應的編碼方式,只適用于post請求,也可以通過Servlet的Filter來進行中文編碼方式的處理。
<%@page language="java"%>指定JSP的腳本語言,現在只能寫java
<%@page extends=".."> 指定翻譯后代碼類型的父類,最好不要使用這個指令
<%@page session="true|false"%>指定是否自動創建Session,最好不自己指定,使用默認值
<%@page buffer=".." autoflush="true|false"%>設置輸出的緩存和是否自動刷新緩存,一般情況下都使用默認值,緩存的默認值為8KB。
<%@page isThreadSafe="true|false"%>是否線程安全,默認為true,也就是線程安全,只使用默認值。
<%@page info=".."%>設置頁面信息,一般不用
<%@page errorPage=""%>指定異常處理頁面
<%@page isErrorPage="true|false"%>設定本頁面就是異常后跳轉的頁面
<%@page isELIgnored="true|false"%>設定本頁面是否忽略JSP2.0種EL表達式
<%@taglib ..%> 標簽庫指令,用于引入自定義標簽庫
JSP動作
<jsp:... ...>
<jsp:include page="..." flush=true|false> include動作是在翻譯和編譯后運行時進行響應的合并,也就是對應了Servlet中RequestDispatcher類的include(ServletRequest request, ServletResponse response)方法。
include動作可以傳遞參數
<jsp:include page="test.jsp">
<jsp:param name="user" value=" ">
</jsp:include>
在使用參數時,可以用request內置對象來獲取參數的值。
<jsp:forward page="xxx/xxx.jsp">forward動作對應的是Servlet中RequestDispatcher類的forward(ServletRequest request, ServletResponse response)方法,也就是把請求進行轉發。
也可以寫成
<jsp:forward>
<jsp:attribute name="page">xxx/xxx.jsp</jsp:attribute>
</jsp:forward>
這種寫法等價于上面的寫法。
在使用Servlet的response的重定向sendRedirect(String location)方法在使用時要包含應用的路徑,注意,重定向會放棄這個請求,并向服務器發送一個新的請求,但是響應對象還是一個。重定向是用來避免重復提交的。
注意:對頁面的刷新操作就會再一次運行程序,也就仿佛進行了再一次的提交一樣,這也就是重復提交的問題,所以需要使用重定向來解決這個問題。
<jsp:plugin type="bean|applet" code="...">
...
</jsp:plugin>
jsp:plugin動作可以使頁面上運行applet,或者是使用java代碼。
<jsp:useBean id="對象名" class="類全名"|type="類全名"(使用多態時使用) beanName="類全名" scope="page|request|session|application">
jsp:useBean動作,可以通過這個動作來使用java代碼,id就是變量名,clss和type的區別在于,使用type是不會創建對象,而只是會先查找如果有該對象就會使用,如果沒有就會拋出異常,class在沒有該對象存在時,則會創建新對象。scope是用來保存實例的空間范圍,page、request、session、application,由小到大,默認為page。
<jsp:setProperty name="對象名" property="屬性名" value="屬性值"/>
直接指定Bean屬性的值,必須類型一致。
<jsp:setProper name="對象名" property="屬性名" param="from表單中的響應的參數名"/>
用表單中指定的參數來為Bean屬性賦值,系統會自動作類型轉換。
<jsp:setProperty name="對象名" property="屬性名"/>
用表單中和Bean屬性同名的標單項來給Bean屬性賦值,這樣寫只會為指定的屬性賦值
<jsp:setProper name="對象名" property="*"/>
這種方式會自動用表單中的同名參數來為Bean的所有屬性賦值
<jsp:setProperty name="對象名" property="屬性名" value="<%= ...%>"/>
使用表達式來為Bean的屬性進行賦值
<jsp:getProperty name="對象名" property="屬性名">
取得指定的屬性,這個動作不常用,一般用表達式代替。
我們可以通過設置屬性名的方法名也就是setXxxx()來控制屬性的賦值,用form表單的參數為Bean的屬性賦值時,系統會自動的調用與之同名屬性的setXxxx()方法,尤其是日期類型,可以通過使用這一方法來處理。
例:
import java.sql.*;
public class Person{
private Srting name;
private Date birthday;
public void setName(String name){
this.name=name;
}
public void setBirthdayAsString(String birthday){
this.setBirthday(valueOf(birthday));
}
public void setBirthday(Date birthdays){
this.birthday=birthday;
}
}
add.jsp
<jsp:useBean id="person" type="Person" scope="request">
<jsp:setProper name="person" property="*"/>
</jsp:useBean>
toadd.jsp
<form action="xxx" methmod="post">
<input type="text" name="name">
<input type="text" name="birhtdayAsString">
<input type="submit" value="add.jsp">
</form>
JavaBean和EJB的區別
JavaBean是可視的或者是不可視的,不用部署,EJB是不可視的,需要部署到服務器中。
JavaBean部署在應用程序中, EJB是部署在容器中,可以是有狀態或者是無狀態的,聲明式事務。
JavaBean的屬性和方法是普通的,EJB是需要遵守規范,是需要通過標準的描述符來定義的。
JavaBean是基于事件驅動的,EJB中只有消息驅動Bean是基于事件的
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -