3.1JSP页面的基本构成
3.3.1 一个JSP页面
在HTML静态页面文件中加入和Java相关的动态元素就构成了一个JSP页面。一个JSP页面通常由以下4种基本元素组成。
①普通的HTML标记。
②JSP注释。
③Java脚本元素,包括声明、Java程序片和Java表达式。
④JSP标记,例如指令标记、动作标记和自定义标记。
【例3-1】根据example3_1.jsp代码中的注释识别JSP页面中的基本元素。
页面文件example3_1.jsp的代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <jsp:include page="a.jsp"/><!-- JSP动作标记--> <%! int i = 0; //数据声明 int add(int x,int y){ //方法声明 return x + y; } %> <html> <!-- HTML标记 --> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% //Java程序片 i++; int result = add(1,2); %> i的值为<%=i%> <%--Java表达式 --%> <br> 1+2的和为<%=result%> <%--Java表达式 --%> </body> </html>
页面文件a.jsp的代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> 被example3_1.动态引用。 <br> </body> </html>
运行结果如下:
3.2.1JSP页面注释
JSP页面中常见的注释有以下两种:
①HTML注释
格式:<!--HTML注释 -->
在标记符“<!--”和“ -->”之间加入注释内容就构成了HTML注释。
JSP引擎对于HTML注释也要进行处理,即不将它看做是注释,如果其中有JSP代码,也会被JSP引擎处理。JSP引擎将处理之后的HTML注释交给客户端,用户通过浏览器查看JSP源文件时也能够看到HTML注释。
②JSP注释
格式:<%--JSP注释-->
在标记符“<%--”和“--%>”之间加入注释内容就构成了JSP注释。
JSP引擎将JSP注释当作真正的注释,在编译JSP页面时忽略了这部分代码,因此用户通过浏览器查看JSP源文件时无法看到JSP注释。
3.1.3时间环节——识别JSP页面元素
识别出如下JSP页面的基本元素:(已标注在注释中)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- 指令 --> <!DOCTYPE html> <!-- HTML标记 --> <!-- 学习JSP页面的基本构成 --> <%! String content = "JSP页面基本构成:"; //Java变量声明 %> <html> <!-- HTML标记 --> <head> <meta charset="UTF-8"> <title>shijian3_1</title> </head> <body> <% //Java程序片 content = content +"HTML标记、JSP注释、JSP标记以及Java脚本元素"; %> <%=content %> //Java表达式 </body> </html>
3.2JSP脚本元素
JSP中的Java脚本元素包括声明、Java程序片以及Java表达式。
3.2.1 Java程序片
在标记符“<%”和“%>”之间插入的Java代码得成为JSP页面的Java程序片。
Java程序片的格式: <% Java代码 %>
一个JSP页面可以有人鱼段Java程序片,这些程序片将被JSP引擎(Tomcat服务器)按顺序执行。在一个程序片中声明的变量称为JSP页面的局部变量,它们在JSP页面后继的所有程序片以及表达式内都有效。
当多个客户请求一个JSP页面时,JSP引擎会为每个客户启动一个线程,不同的线程会分别执行该JSP页面中的Java程序片,程序片中的局部变量会在不同的线程中被分配不同的内存空间,因此一个客户对JSP页面局部变量操作的结果不会影响到其他客户。
Java程序片的执行原理如下图所示:
![]()
Java程序片的执行原理 【例3-2】编写一个JSP页面example3_2.jsp,页面中存在一段Java程序片,该程序片内声明了一个整型局部变量n,初始值为0。
页面example3_2.jsp的代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <!-- HTML标记 --> <!-- 学习JSP页面的基本构成 --> <%! String content = "JSP页面基本构成:"; %> <html> <!-- HTML标记 --> <head> <meta charset="UTF-8"> <title>example3_2</title> </head> <body> <% int n = 0; n++; out.print("n="+n); %> </body> </html>
如果5个客户请求example3_2.jsp页面,JSP引擎会启动5个线程,页面中Java程序片在每个线程中均会被执行一次,共执行5次;在内存中,局部变量n对应5处不同的存储空间,初始值都为0,且都仅执行了一次自加运算,所以5个不同的客户看到的页面效果是相同的。
3.2.2 成员变量与方法的声明
成员变量和方法的声明格式如下:
<%! 变量或方法定义 %>
在标记符“<%!”和“%>”之间声明的变量被称为JSP页面的成员变量,它们可以是Java语言允许的任何数据类型,例如:
<%!
int n = 0;
Date date;
%>
成员变量在整个JSP页面内都有效(与书写位置无关),因为JSP引擎将JSP页面转译成Java文件时把这些变量作为类的成员变量,这些变量的内存空间指导服务器关闭才释放。因此,多个用户共享JSP页面的成员变量。任何用户对JSP页面成员变量操作的结果都会影响到其他用户。
在标记符"<%!"和"%>"之间声明的方法被称为JSP页面的成员方法,该方法在整个JSP页面内有效,但是该方法内定义的变量仅在该方法内有效。
【例3-3】编写一个JSP页面example3_3.jsp,页面中声明一个成员变量n(初始值为0)和方法add()(求两个整数的和)。另外,页面中还有一段Java程序片,在程序中声明一个局部变量m,并且对成员变量n和局部变量m分别进行自加。
页面example3_3.jsp的代码如下: