目录
JSP页面可由5种元素组合而成:
- ① 普通的HTML标记符
- ② JSP标记,如指令标记、动作标记
- ③ 变量和方法的声明
- ④ Java程序片
- ⑤ Java表达式
字节码文件的任务:
- JSP页面中普通的HTML标记符号,交给客户的浏览器执行显示。
- JSP标记、变量和方法声明、Java程序片由Tomcat服务器负责执行,将需要显示的结果发送给客户的浏览器。
- Java表达式由Tomcat服务器负责计算,将结果转化为字符串,交给客户的浏览器负责显示。
1、声明变量
在“<%! %>
”标记符之间声明变量
- 变量的类型可以是Java语言允许的任何数据类型,将这些变量称为JSP页面的成员变量,成员变量被所有用户共享。
(可以看作main函数外的全局变量)
<%! int a, b=10 , c;
String tom=null,jerry="love JSP";
Date date;
%>
2、声明方法
在<%! %>
标记符号之间定义方法,所定义的方法在整个JSP页面有效,可以在Java程序片中被调用。(可以看作函数)
- 方法内声明的变量只在该方法内有效,当方法被调用时,方法内声明的变量被分配内存,方法被调用完毕即可释放这些变量所占的内存。
<%!
int sum(int a,int b){
return a+b;
}
int sub(int a,int b){
return a-b;
}
int multi(int a,int b){
return a*b;
}
int div(int a,int b){
return a/b;
}
%>
3、Java程序片
在<% %>”
之间插入Java程序片(合法的Java代码)。
-
一个JSP页面中的Java程序片会按其在页面中的顺序被执行,程序片中声明的变量称为JSP页面的局部变量 ,在JSP页面后继的所有程序片和表达式内有效。
-
多个客户请求一个JSP页面时 , Java程序片将被执行多次,分别在不同的线程中执行,互不干扰 。
-
因为JSP页面实际上是被编译成Servlet类执行的,所以声明中定义的变量是Servlet类的成员变量,各个用户共享成员变量,需同步。
-
程序片中定义的变量是局部变量,用户之间没有联系,每次调用页面,局部变量都被重新初始化。
(可以看作形参) -
可将一个Java程序片分割成几个Java程序片,然后在这些Java程序片之间再插入其他标记元素。
<%
Java程序片1
%>
HTML标记
<%
Java程序片2
%>
HTML标记
4、Java表达式
可以在<%= %>
之间插入一个表达式,这个表达式必须能求值。
表达式的值由服务器负责计算,并将计算结果用字符串形式发送到用户端显示。
如:<%=getDate()%>
(可以看作调用函数)
注意:不可插入语句,“<%=”是一个完整的符号,之间不能有空格。
5、JSP中的注释
HTML注释格式:
<!-- 注释内容 -->
显示注释
JSP注释格式:
<%-- 注释内容 --%>
隐式注释
JSP注释写在JSP程序中,但不发送给客户。
Scriptlets中的注释:
由于Scriptlets包含的是java代码,所以java中的注释规则在Scriptlets中也适用,常用的java注释使用
//
表示单行注释,使用/* */
表示多行注释 隐式注释
6、JSP指令标记
page指令标记
用来定义整个JSP页面的一些属性和这些属性的值,属性值用单引号或双引号括起来。如网页的编码方式和脚本语言。
常用的有contentType和import。
page指令与其书写位置无关,习惯把page指令写在JSP页面的最前面。
<%@ page 属性1="属性1的值" 属性2="属性2的值" %>
或
<%@ page 属性1="属性1的值" %>
<%@ page 属性2="属性2的值" %>
属性:
-
contentType
属性值的一般形式是 "MIME类型” 或 “MIME类型;charset=编码”
例如:<%@ page contentType=“application/msword” %>
如果不使用page指令为contentType指定一个值,那么contentType默认值是 "text/html ; charset=ISO-8859-1 " -
language
定义JSP页面使用的脚本语言,该属性的值目前只能取“java” 。
例如:<%@ page language="java" %>
注:JSP页面默认有如上page指令 。 -
import
导入Java运行环境提供的包中的类,这样就可以在JSP页面的程序片部分、变量及函数声明部分、表达式部分使用包中的类。
<%@ page import="java.io.*", "java.util.Date" %>
默认的import属性值已有:
java.lang.* 、javax.servlet.* 、javax.servlet.jsp.* 、javax.servlet.http.* 等。 -
session
session 属性用于设置是否需要使用内置的session对象。
session的属性值可以是true或false。(默认true) -
buffer
内置输出流对象out负责将服务器的某些信息或运行结果发送到用户端显示。
buffer属性用来指定out设置的缓冲区的大小或不使用缓冲区。
例如:<%@ page buffer= "24kb" %>
buffer属性的默认值是8kb 。buffer属性可以取值" none",即设置out不使用缓冲区。 -
autoFlush
指定当out的缓冲区被填满时,缓冲区是否自动刷新。
当autoFlush属性取值false时,如果out的缓冲区填满,就会出现缓存溢出异常。当buffer的值是“none”时,autoFlush的值就不能设置成false。(默认值是true) -
isThreadSafe
用来设置JSP页面是否可多线程访问。
当isThreadSafe属性值设置为true时,JSP页面能同时响应多个用户的请求;当isThreadSafe属性值设置成false时,JSP页面同一时刻只能响应一个用户的请求,其他用户须排队等待。(默认值是true) -
info
info属性的属性值是一个字符串,其目的是为JSP页面准备一个常用且可能要经常修改的字符串。
例如:<%@ page info= "we are students" %>
可以在JSP页面中使用方法 getServletInfo( ) 来获取info属性的属性值。当JSP页面被转译成Java文件时,转译成的类是Servlet的一个子类,所以在JSP页面中可以使用Servlet类的getServletInfo( )方法。
include指令标记
include指令标记的作用是在JSP页面出现该指令的位置处,静态插入一个文件,实现代码的复用。
<%@ include file= "文件的URL " %>
一个 JSP 页面中的 include 指令的数量不受限制。静态插入,就是当前JSP页面和插入的文件合并成一个新的JSP页面,然后JSP引擎再将这个新的JSP页面转译成Java文件。
使用include指令可以把一个复杂的JSP页面分成若干简单的部分,当要对页面更改时,只需更改对应的部分就行了。
通常情况下把页面分成多个区,典型的分区方法如下:

7、JSP动作标记
include动作标记
告诉JSP页面动态包含一个文件,即JSP页面运行时才将文件加入。
<jsp:include page= "文件的URL"/>
或<jsp:include page= "文件的URL">
param子标记
</jsp:include>
- 如果是普通的文本文件,就将文件的内容发送到用户端,由浏览器负责显示。
- 如果是JSP文件,JSP引擎就执行这个文件,然后将执行的结果发送到用户端浏览器显示。
param动作标记
以名值对的形式为其他标记提供附加信息。
<jsp:param name= "名字" value= "指定给param的值">
注意: param标记不能独立使用,需作为jsp:include、jsp:forward、jsp:plugin标记的子标记来使用
当该标记与jsp:include动作标记一起使用时,可以将param标记中的值传递到include动作标记要加载的文件中去,被加载的JSP文件可以使用Tomcat服务器提供的request内置对象获取include动作标记的param子标记中name属性所提供的值。
forward动作标记
<jsp:forward page="要转向的页面" />
或 <jsp:forward page="要转向的页面" >
<jsp:forward page="要转向的页面" />
或<jsp:forward page="要转向的页面" >
param子标记
</jsp:forward>
该指令的作用是:从该指令处停止当前页面的执行,而转向执行page属性指定的JSP页面。
可以使用param动作标记作为子标记传送信息,要转向的JSP页面用request内置对象获取param子标记中name属性所提供的值。
当forward动作标记不需要param子标记时,必须使用第一种形式。
当前页面使用forward动作标记转向后,尽管用户看到了转向后的页面的效果,但浏览器地址栏中显示的仍然是转向前的JSP页面的URL地址,因此,如果刷新浏览器的显示,将再次执行当前浏览器地址栏中显示的JSP页面。
useBean动作标记
该标记用来创建并使用一个Javabean。
<jsp:useBean id="id"
scope="page/request/session/application" typeSpec/>
其中id表示实例;scope表示此对象可以使用的范围
setProperty动作标记
此操作与useBean协作,用来设置Bean的简单属性和索引属性。
jsp:setProperty标签使用Bean给定的setXxx()方法,在Bean中设置一个或多个属性值。利用jsp:setProperty设置属性值有多种方法。
<jsp:setProperty name=“beanName” propertyDetails/>
getProperty动作标记
jsp:getProperty 操作是对jsp:setProperty操作的补充,它用来访问一个Bean的属性。
<jsp:getProperty name="userSession" property="name"/>
8、小结
- JSP页面:普通的HTML标记(客户端浏览器执行)、JSP标记、成员变量和方法声明、Java程序片、Java表达式(JSP引擎处理并将结果发送给用户浏览器)。
- 成员变量为所有用户共享,任何用户对成员变量的操作都会影响其他用户,synchronized关键字保证一次只有一个线程执行。
- 多用户访问JSP页面,其程序片会被执行多次,分别在不同线程中,其局部变量互不干扰。
- page指令标记用来定义整个JSP页面的一些属性,常用的有contentType和import。
- include指令标记在编译阶段就处理所需要的文件,被处理的文件在逻辑与语法上依赖于当前JSP页面,优点是速度快;include动作标记是在JSP页面运行时才处理文件,在逻辑与语法上独立于当前JSP页面,更加灵活。