腳本JSP腳本就是用page指令language屬性指定的腳本語言編寫的代碼塊,需要用JSP完成的功能主要在此實現(xiàn)。目前用的基本是Java語言。
代碼塊里必須完全符合Java語法,但可以配合用HTML文本。其實不論是什么,都會被轉(zhuǎn)換為Servlet,在Servlet中它們是一樣的。
如:先輸出5個空行,再輸出"hello"
正確的:<% for(int i=0;i<5;i++)%>
<br>
<%;%>
hello
<br>錯誤的:(一行br;一行hello)===============
<% for(int i=0;i<5;i++)%>
<br>
hello
錯誤的等價于:<% for(int i=0;i<5;i++){%>
<br>
hello
<%}%>
動作(<%jsp%>)
jsp提供的動作指令有:include、forward、useBean、getProperty、setProperty
include 動作
jsp向當前頁面加入另一文件的方法。
<jsp:include page="relativefileURL" flush="true"/>
forward動作
把當前頁面重導(dǎo)到另一頁面上,客戶端看到的地址是A頁面的地址,
而實際內(nèi)容確是B頁面的內(nèi)容。
<jsp:forward page="relativefileURL <%=expression%>}"/>
如:
<body>
here is aa.
<jsp:forward page="aa.jsp" />
here is bb.
</body>
注意:在使用forward之前,不能有任何內(nèi)容已經(jīng)輸出到客戶端,否則會發(fā)生例外。
useBean動作
此動作用來生成一個bean組件,并設(shè)定它的id號及使用范圍
<jsp:useBean id="beanName" scope="pagerequestsessionapplication" class="package.class" type="package.class" beanName="{package.class<%=expression%>}" type="package.class">action for bean </jsp:useBean>
id="beanName":定義生成bean組件的名字,不能重名且scope的值也最好一樣,否則JSP引擎將認定最先被創(chuàng)建的那個。
scope="pagerequestsessionapplication":定義bean的活動范圍,bean只有在它定義的范圍里才能使用,
在它的活動范圍外將無法訪問到它。
JSP為它設(shè)定的范圍有:
page: bean的缺省使用范圍
request:作用于任何相同請求的JSP文件中,直到頁面執(zhí)行完畢向客戶端發(fā)回響應(yīng)或在此這之前已通過某種方式(如重定向、鏈接等方式)轉(zhuǎn)到另一個文件為止。還可通過使用Request對象訪問bean,如:request.getAttribute(beanName)
session:作用于整個session的生存周期內(nèi),在session的生存周期內(nèi),對此bean屬性的任何改動,都會影響到在此session內(nèi)的另一page、另一request里對此bean的調(diào)用。但必須在創(chuàng)建此bean的文件里事先用page指令指定了session=true。
application:作用于整個application的生存周期內(nèi),在application周期內(nèi),對此bean屬性的任何改動,都會影響到此application內(nèi)另一page、另一request以及另一session里對此bean的調(diào)用。
class="package.class":用class屬性指下的類示例一個bean,其中package名必須是類里用關(guān)鍵字package指定的。
type="package.class"
class="package.class" type="package.class"
beanName="{package.class<%=expression%>}" type="package.class"
如:tt.jsp
<jsp:useBean id="student" scope="page" class="mime.student" />
<%=student.getName()%><br>
<% student.setName("wll"); %>
//=====tt.jsp文件到此============
student.java//此處開始為student.java的內(nèi)容
package mine;
public class student{
long classno;
String name;
int age;
Boolean sex;
public student(){
classno=12345;
name="aaaa";
age=21;
sex=true;
}
public long getClassno(){
return classno;
}
public void setClassno(long no){
this.classno=no;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
public boolean getSex(){
return sex;
}
public void setSex(Boolean sex){
this.sex=sex;
}
}