目录
前言
本章主要内容为对JSP语法的介绍,包括JSP页面的基本结构、声明变量和定义方法、Java程序片、Java表达式、JSP指令标记和JSP动作标记等小节。
1.1 JSP页面的基本结构
在传统的的HTML页面文件中加入Java程序片和JSP标记就构成了一个JSP页面。一个JSP页面可由以下五种元素组成:
★普通的HTML标记和JavaScript标记。
★JSP标记,如指令标记、动作标记 。
★ 变量和方法的声明。
★ Java程序片。
★ Java表达式。
在下面的例子中的JSP页面就包含了5种元素,其中使用HTML的img标记显示的一幅图像(需要将一幅图像的jpg保存在Web服务目录的image目录中),使用JavaScript显示客户浏览器的时间,使用Java程序片显示Tomcat服务器端的时间,使用Java表达式显示一些变量的值。
<%@ page contentType="text/html" %> <!-- jsp指令标记 -->
<%@ page pageEncoding = "utf-8" %> <!-- jsp指令标记 -->
<%@ page import="java.time.LocalTime" %> <!-- jsp指令标记 -->
<%! public int continueSum(int start,int end){ // 定义方法
int sum =0;
for(int i=start;i<=end;i++) //求start 和 end 之间的连续和
sum=sum+i;
return sum;
}
%>
<HTML><body bgcolor = pink>
<script> <!--JavaScript(JS)标记 -->
var userTime = new Date();
var hour = userTime.getHours();
var minute =userTime.getMinutes();
var second = userTime.getSeconds();
var millisecond = userTime.getMilliseconds();
document.write("<h2>浏览器时间:"+
hour+":"+minute+":"+second+":"+millisecond+"<br></h2>");
</script>
<img src="image/time.jpg" width=180 height=120 /> <!--html标记 -->
<p style="font-family:黑体;font-size:36;color:red"> <!--html标记 -->
<% //Java程序片:
LocalTime timeServer = LocalTime.now();
int hour = timeServer.getHour();
int minute =timeServer.getMinute();
int second = timeServer.getSecond();
int nano = timeServer.getNano() ;//纳秒。
int millisecond = nano/1000000;
out.print("服务器时间:<br>"+
hour+":"+minute+":"+second+":"+millisecond);
int start=1;
int end=100;
int sum=continueSum(start,end);
%>
</p>
<p style="font-family:宋体;font-size:33;color:blue">
从
<%= start %> <!-- Java表达式 -->
至
<%= end %> <!-- Java表达式 -->
的<br>连续和是:
<%= sum %> <!-- Java表达式 -->
</p>
<script> <!--JavaScript(JS)标记 -->
document.write("<h2>服务器时间:"+
<%=hour%>+":"+<%=minute%>+":"+<%=second%>+":"+<%=millisecond%>+"</h2>");
</script>
</body></HTML>
2.1 声明变量和定义方法
在"<%! %>"里面声明变量和定义方法。"<%! %>"标记符号的内容习惯上放在JSP页面指令之后,<HTML>之前,也可以写在<HTML>和</HTML>之间。
2.1.1声明变量
"<%! %>"之间声明的变量在整个JSP页面内都有效,与"<%! %>"标记符在JSP页面中所在的书写位置无关。Tomcat服务器将 JSP 页面转译成 Java 文件时,将这些变量作为类的成员变量,这些变量的内存空间直到服务器关闭才被释放。
当多个客户请求一个 JSP 页面时,Tomcat服务器为每个客户启动一个线程,这些线程由Tomcat服务器来管理。这些线程共享 JSP 页面的成员变量,因此任何一个用户对 JSP 页面成员变量操作的结果,都会影响到其他用户。
利用成员变量被所有用户共享这一性质,实现一个简单的计数器,代码如下:
2.1.2 定义方法和类
可以在“<%!"和"%>"标记符号之间定义方法,可以在Java程序片中调用该方法。方法内声明变量只在该方法内有效。当该方法被调用时,方法内声明的变量被分配内存,方法被调用完毕即可释放这些变量占用的内存。
可以“<%!"和"%>"标记符号之间定义类,可以在Java程序片中使用该类创建对象。
在以下例子中,定义了两个方法 multi(int x , int y) 和 div(int x , int y),然后在程序片中调用这两个方法。也定义了一个Circle类,然后在程序片中使用该类创建对象,计算了圆的面积。
<%@ page contentType = "text/html" %>
<%@ page pageEncoding = "utf-8" %>
<HTML><body bgcolor = #ffccff>
<p style="font-family:宋体;font-size:36;color:blue">
<%! double multi(double x,double y){ //定义方法
return x*y;
}
double div(double x,double y) { //定义方法
return x/y;
}
class Circle { //定义类
double r;
double getArea(){
return 3.1415926*r*r;
}
}
%>
<% double x=8.79;
double y=20.8;
out.print("调用multi方法计算"+x+"与"+y+"之积:<br>");
out.print(multi(x,y));
out.print("<br>调用div方法计算"+y+"除以"+x+"的商:<br>");
String s =String.format("小数点保留3位:%10.3f",div(y,x));
out.println(s);
Circle circle = new Circle(); //用Circle类创建对象。
circle.r = 3.6;
out.print("<br>半径是"+circle.r+"的圆面积"+circle.getArea());
%>
</p></body></HTML>
3.1 Java程序片
可以在“<%!"和"%>"标记符号之间插入Java程序片。一个JSP页面可以有许多Java程序片,这些程序片将被Tomcat服务器按顺序执行。在程序片中声明的变量称作JSP页面的局部变量。局部变量的有效范围与其声明变量的位置有关,即局部变量在JSP也页面后继的所有程序片以及表达式部分内部有效。Tomcat服务器将JSP页面编译成Java文件时,将各个程序片的这些变量作为某个方法的变量,即局部变量。
Java程序片可以写在<HTML>之前,也可以写在<HTML>和</HTML>之间或,/HTML>之后。当多个用户请求一个JSP页面时,Tomcat服务器为每一个用户启动一个线程,该线程负责执行字节码文件响应用户的请求。Tomcat服务器使用多线程来处理程序片,特点如下:
★ 操作JSP页面的成员变量
★ 调用JSP页面的方法
★ 操作局部变量
4.1 Java表达式
可以在“<%="和"%>"标记符号之间插入一个可求值的表达式(注意:不可插入语句,“<%="是一个完整的符号,"<%"和”=“之间不要有空格。)表达式的值由服务器负责运算,并将计算结果用字符串形式发送到用户端显示。
Java表达式可以写在<HTML>之前,也可以卸载<HTML>和</HTML>之间或</HTML>之后。
需要注意的是,在jsp页面中,表达式的值被表示为一个字符串的形式,即tomcat服务器将表达式的结果转换为字符串,然后发送给用户浏览器。因此,在编写jsp页面时,需要把java表达式按普通文本来使用。
以下例子是计算几个表达式的值。
<%@ page contentType = "text/html" %>
<%@ page pageEncoding = "utf-8" %>
<HTML><body bgcolor=pink>
<% int x=12,y=9;
%>
<p style="font-family:宋体;font-size:36">
计算表达式x+y+x%y,即<%= x %>+<%= y %>+<%= x %>%<%= y %>的值:
<%= x+y+x%y %>
<br>计算表达式x>y即<%= x %> > <%= y %>的值:
<%= x>y %>
<br>计算表达式sin(<%= Math.PI %>/2)的值:
<%= Math.sin(Math.PI/2) %>
<br>
<% if(x-y>=0) {
%>
如果<%= x %>大于<%= y %>,计算<%= x %> - <%= y %>即
<%= x-y %>的平方根:
<%=Math.sqrt(x-y)%>
<% }
%>
</p></body></HTML>
5.1 JSP中的注释
JSP注释可分为两种:
1、一种是HTML注释,可以在客户端显示的注释。
表实形式:<!-- 注释内容 -->
2、一种是JSP注释,发送到服务器端,在客户端不能显示的注释。
表示形式:<%--注释内容--%>
(注:Tomcat服务器忽略JSP注释,即在编译JSP页面时忽略JSP注释。)
6.1JSP指令标记
JSP指令用来向JSP引擎提供编译信息。可以设置全局变量,如声明类、要实现的方法和输出内容的类型。一般的,JSP指令在整个页面范围内有效,且并不向客户端产生任何输出。所有的JSP指令都只在当前的整个页面中有效。与其书写的位置无关,一般写在最前面。
本章指令标记标记中主要讲述了两个标记 ,分别是page指令标记和include指令标记.
6.1.1 page指令标记
page指令也称为页面指令,用来定义整个JSP页面的一些属性和这些属性的值,属性值用单引号或者双引号括起来。
可使用多个page指令分别为每个属性指定值,也可合并程一个page指令。
多个:<%@page 属性1="属性1的值"%>
<%@page 属性2="属性2的值"%>
......
<%@page 属性n="属性n的值"%>
一个:<%@page 属性1="属性1的值"属性2="属性2的值"......%>
page指令标记可以为contentType、import 、language、session、buffer、autoFlush、isThreadSafe、pageEncoding、inform等属性指定值,这些属性的设置与作用书上皆有标注,感兴趣的朋友们可以在网上查阅,在此就不详细展开说明。
6.1.2 include指令标记
如果需要在JSP页面某处整体镶嵌一个文件,就可以考虑使用include指令标记,其语法格式如下:
<%@ include file = "文件的URL"%>
作用:include指令标记的作用是在JSP页面出现该指令的位置处,静态嵌入一个文件,该文件的编码必须和当前JSP页面一致(比如都是UTF-8编码)。被嵌入的文件必须是可以访问或使用的。
7.1 JSP动作标记
动作标记是一种特殊的标记,它影响JSP运行时的功能。本章主要对include动作标记、param动作标记、forward动作标记、useBean动作标记四个动作标记展开详细说明。
7.1.1 include动作标记
include动作标记语法格式为:
<jsp:include page="文件的URL"/>
或
<jsp:include page="文件的URL"/>
param子标记
<jsp:include>
需要注意的是,当include动作标记不需要param子标记时,必须运用第一种形式。
7.1.2 param动作标记
param标记以“名字-值”对的形式为其他标记提供附加信息,param标记不能独立使用,必须作为jsp:include、jsp:forward标记的子标记使用。
param动作标记格式为:
<jsp:param name="参数"value="参数的值"/>
7.1.3 forward动作标记
forward动作标记格式为:
<jsp:forward page="要转向的页面"/>
或
<jsp:forward page="要转向的页面"/>
param标记
<jsp:forward>
该指令的作用是:从该指令处停止当前页面的执行,而转向执行page属性指定的JSP页面。需要注意的是,当forward动作标记不需要param子标记时,必须使用第一种形式。
7.1.4 useBean动作标记
useBean动作标记用来创建并且使用一个JavaBean,是非常重要的一个动作标记,详细讲解将在后面内容中,此处就不多讲。
8.1 总结
以上就是今天要讲的内容,本章仅仅简单的介绍了JSP页面的基本结构、声明变量和定义方法、Java程序片、Java表达式、JSP指令标记和JSP动作标记等内容。