第二章JSP语法
JSP语法
主要内容
一:JSP页面的基本结构
二:声明变量和定义方法
三:Java程序片
四:Java表达式
五:JSP中的注释
六:JSP指令标记
七:JSP动作标记
一:JSP页面的基本结构
1.1一个JSP页面可由5中元素组合而成:
①普通的HTML标记和JavaScript标记
②JSP标记,如指令标记、动作标记
③变量和方法的声明
④Java程序片
⑤Java表达式
1.2原理
①一个JSP页面被第一次请求执行时,Tomcat服务器首先将JSP页面文件转译成一个Java文件,再将这个Java文件编译生成字节码文件,然后通过执行字节码文件响应用户的请求。
②当多个用户请求一个JSP页面时,Tomcat服务器为每个用户启动一个线程,该线程负责执行常驻内存的字节码文件来响应相应用户的请求。这些线程由Tomcat服务器来管理,将CPU的使用权在各个线程之间快速切换,以保证每个线程都有机会执行字节码文件。
二:声明变量和定义方法
2.1声明变量
①<%! ….%> **(<%! 之间不能有空格)**
在<%!和%>标记符号之间声明变量,定义方法以及定义类。<%!和%>标记符号的内容习惯上放在JSP 页面指令之后,<HTML>之前,也可以写在<HTML>与</HTML>之间。
<%!和%>之间声明的变量在整个JSP页面内都有效,与标记符在JSP页面中所在的书写位置无关,但习惯上把<%!、%> 标记符写在JSP页面的前面。
2.2定义方法
对于在“<%!”和“%>”标记符号之间定义方法,可以在Java程序片中调用该方法。方法内声明的变量只在该方法内有效,当方法被调用时,方法内声明的变量被分配内存,方法被调用完毕即可释放这些变量所占的内存。可以在“<%!”和“%>”标记符号之间定义类,可以在Java程序片中使用该类创建对象。
注意
1.Tomcat服务器将JSP页面转译成Java 文件时,将“<%!”、“%>” 标记符之间声明的变量作为类的成员变量,这些变量占有的内存空间直到Tomcat服务器关闭才释放
2.当多个用户请求一个JSP页面时,Tomcat服务器为每个用户启动一个线程,这些线程由Tomcat服务器来管理,这些线程共享JSP页面的成员变量,因此任何一个用户对JSP页面成员变量操作的结果,都会影响到其他用户。
代码举例
1 |
|
三:Java程序片
3.1插入程序片
可以在<%和%>之间插入Java 程序片。
3.2局部变量
一个JSP页面可以有许多程序片,这些程序片将被Tomcat服务器按顺序执行。在程序片中声明的变量称作JSP页面的局部变量。局部变量的有效范围与其声明的位置有关,即局部变量在JSP页面后继的所有程序片以及表达式部分内都有效。
3.3处理程序片
当多个用户请求一个JSP页面时,Tomcat服务器为每个用户启动一个线程,该线程负责执行字节码文件响应用户的请求。Tomcat服务器使用多线程来处理程序片.
3.4操作JSP页面的成员变量
Java 程序片中操作的成员变量是各个线程(用户)共享的变量,任何一个线程对JSP页面成员变量操作的结果,都会影响到其他线程。
3.5操调用JSP页面的方法
Java 程序片中可以出现方法调用语句,所调用的方法必须是JSP页面曾定义的方法。
3.6操作局部变量
当一个线程享用CPU资源时,Tomcat服务器让该线程执行Java程序片,这时,Java程序片中的局部变量被分配内存空间,当轮到另一个线程享用CPU资源时,Tomcat服务器让该线程再次执行Java程序片,那么,Java程序片中的局部变量会再次分配内存空间。也就是说Java程序片已经被执行了两次,分别运行在不同的线程中,即运行在不同的时间片内。运行在不同线程中的Java程序片的局部变量互不干扰,即一个用户改变Java程序片中的局部变量的值不会影响其他用户的Java程序片中的局部变量。当一个线程将Java程序片执行完毕,运行在该线程中的Java程序片的局部变量释放所占的内存。
四:Java表达式
4.1表达式
可以在<%=和%>之间插入一个可求值的表达式(注意:不可插入语句,<%=是一个完整的符号,“<%”和“=”之间不要有空格)。表达式的值由服务器负责计算,并将计算结果用字符串形式发送到用户端显示。
Java表达式可以写在<HTML>之前,也可以写在<HTML>和</HTML>之间或</HTML>之后。
4.2注意事项
在JSP页面中,表达式的值被表示成一个字符串的形式,即Tomcat服务器将表达式的结果转换成字符串,然后发送给用户的浏览器。因此,在编写JSP页面时,要把Java表达式按普通的文本来使用。
五:JSP中的注释
5.1HTML注释
<!– 注释内容 –>
JSP引擎把HTML注释交给用户,因此用户通过浏览器查看JSP页面的源文件时,能够看到HTML注释。
5.2JSP注释
在标记符号“<%–”和“–%>”之间加入注释内容:
<%– 注释内容 –%>
Tomcat服务器忽略JSP注释,即在编译JSP页面时忽略JSP注释。
六:JSP指令标记
6.1page指令标记
page 指令用来定义整个JSP页面的一些属性和这些属性的值。
<%@ page 属性1=”属性1的值” %>
<%@ page 属性2=”属性2的值” %>
… …
<%@ page 属性n=”属性n的值” %>
也可以用一个page指令指定多个属性的值,如:
<%@ page 属性1=”属性1的值” 属性2= “属性2的值” ……%>
page 指令标记可以指定属性:contentType、import、language、session、buffer、auotFlush 、isThreadSafe、pageEncoding 、inform的值
6.2contentType属性
JSP页面设置响应的MIME(Multipurpose Internet Mail Extention)类型,即设置contentType 属性的值。contentType属性值确定JSP页面响应的MIME类型。属性值的一般形式是: "MIME类型"例如:<%@ page contentType=”text/html “ %>
浏览器启用HTML解析器来解析执行所接收到的信息。
如果希望用户的浏览器启用本地的MS-Word应用程序来解析执行收到的信息,就可以如下设置contentType属性的值:<%@ page contentType=”application/msword” %>
6.3pageEncoding属性
只能为pageEncoding指定一个值,不允许两次使用page指令给pageEncoding属性指定不同的或相同的属性值。\ 例如: <%@ page pageEncoding = "utf-8" %> 那么保存JSP页面应当将“编码”选择为“utf-8”.6.4language属性
language属性定义JSP页面使用的脚本语言,该属性的值目前只能取”java”。
为language属性指定值的格式是:
<%@ page language=”java” %>
language属性的默认值是”java”,即如果在JSP页面中没有使用page指令指定该属性的值的,那么,JSP页面默认有如下的page指令:<%@ page language=”java” %>
6.5import 属性
该属性的作用是为JSP页面引入Java运行环境提供的包中的类。
例如:
<%@ page import=”java.io.“, “java.time.LocalDate” %>
<%@ page import=”java.util.*” %>
<%@ page import=”java.io.*” %>
JSP页面默认import属性已经有如下的值:
“ java.lang.“、 “javax.servlet.“、”javax.servlet.jsp.“、”javax.servlet.http.*”。
6.6session属性
session 属性用于设置是否需要使用内置的session对象。session的属性值可以是true或false。session属性默认的属性值是true。
6.7buffer属性
内置输出流对象out负责将服务器的某些信息或运行结果发送到用户端显示。buffer属性用来指定out设置的缓冲区的大小或不使用缓冲区。例如:
<%@ page buffer= “24kb” %>
buffer属性的默认值是8kb 。
6.8autoFlush属性
autoFlush可以取值true或false。autoFlush属性的默认值是true。
6.9isThreadSafe 属性
isThreadSafe的属性值可取true或false。
isThreadSafe属性值为true时,CPU的使用权在各个线程间快速切换.
isThreadSafe属性值设置成false时,该JSP页面同一时刻只能响应一个用户的请求,其他用户须排队等待。也就是说,CUP要保证一个线程将JSP页面执行完毕才会把CPU使用权切换给其他线程
6.10info 属性
info属性的属性值是一个字符串,其目的是为JSP页面准备一个常用但可能要经常修改的字符串。例如,<%@ page info= “we are students” %>可以在JSP页面中使用方法:getServletInfo();
获取info属性的属性值。
6.11include 指令标记
如果需要在JSP页面内某处整体嵌入一个文件,就可以考虑使用include指令标记,其语法格式如下:
<%@ include file= “文件的URL “ %>
■ 嵌入的文件的编码必须和当前JSP页面一致,比如二者都是utf-8编码。
■ 所谓静态嵌入,就是当前JSP页面和嵌入的文件合并成一个新的JSP页面,然后Tomcat服务器再将这个新的JSP页面转译成Java文件。因此,嵌入文件后,必须保证新合并成的JSP页面符合JSP语法规则,即能够成为一个JSP页面文件。
■include指令可以实现代码的复用。比如,每个JSP页面上都可能都需要一个导航条,以便用户在各个JSP页面之间方便地切换,那么每个JSP页面都可以使用include指令在页面的适当位置整体嵌入一个相同的文件。
■允许被嵌入的文件使用page指令指定contentType属性的值,但指定的值要与嵌入该文件的JSP页面中的page指令指定的contentType属性的值相同。
代码示例
1 |
|
七:JSP动作标记
7.1 include动作标记
include 动作标记语法格式为:
<jsp:include page= “文件的URL” />
或
<jsp:include page= “文件的URL” >
param子标记
include动作标记告诉JSP页面动态包含一个文件,即JSP页面运行时才将文件加入。与静态嵌入文件的include指令标记不同,当Tomcat服务器根据JSP页面产生成Java文件时,不把JSP页面中动作指令include所包含的文件与原JSP页面合并为一个新的JSP页面,而是告诉Java解释器,这个文件在JSP运行(Java文件的字节码文件被加载执行)时才包含进来。如果包含的文件是普通的文本文件,就将文件的内容发送到用户端,由用户端的浏览器负责显示;如果包含的文件是JSP文件,Tomcat服务器就执行这个文件,然后将执行的结果发送到用户端,并由用户端的浏览器负责显示这些结果。
7.2 param动作标记
param标记以“名字—值”对的形式为其他标记提供附加信息。
<jsp:param name= “参数” value= “ 参数的值” />
7.3 forward 动作标记
<jsp:forward page=”要转向的页面” />
或
<jsp:forward page=”要转向的页面” >
param子标记
指令的作用是:从该指令处停止当前页面的执行,而转向执行page属性指定的JSP页面。需要注意的是,当前页面使用forward动作标记转向后,尽管用户看到了转向后的页面的效果,但浏览器地址栏中显示的仍然是转向前的JSP页面的URL地址,因此,如果刷新浏览器的显示,将再次执行当前浏览器地址栏中显示的JSP页面。