一、脚本元素
JSP脚本元素主要包含如下3种类型。
• JSP Scriptlets
• JSP声明语句
• JSP表达式
1.JSP Scriptlets
JSP Scriptlets 是一段代码段。当需要使用Java实现一些复杂操作或控制时,可以使用它。JSP Scriptlets的语法格式如下所示。
<% java 代码(变量、方法、表达式等)%>
在JSP Scriptlets中声明的变量是JSP页面的局部变量,调用JSP Scriptlets时,会为局部变量分配内存空间,调用结束后,释放局部变量占有的内存空间。
2.JSP声明语句
JSP 的声明语句用于声明变量和方法,它以“<%!”开始,以“%>”结束,其语法格式如下所示。
<%! 定义的变量或方法等 %>
在上述语法格式中,被声明的Java代码将被编译到Servlet的_jspService()方法之外,即在JSP声明语句中定义的都是成员方法、成员变量、静态方法、静态变量、静态代码块等。在JSP声明语句中声明的方法在整个JSP页面内有效,但是在方法内定义的变量只在该方法内有效。当声明的方法被调用时,会为方法内定义的变量分配内存,而调用结束后立刻会释放所占的内存。
在一个JSP页面中可以有多个JSP声明语句,单个声明中的Java语句可以是不完整的,但是多个声明组合后的结果必须是完整的Java语句。
需要注意的是
<%!和%>里面定义的属性是成员属性,相当于类的属性,方法相当于全局的方法,也相当于类里面的方法,但是它是不可以进行输出的,因为它只是进行方法的定义和属性的定义。
<%和%>可以进行属性的定义,也可以输出内容,但是它不可以进行方法的定义。因为这对标签里面的内容是在此JSP被编译为Servlet的时候,放在_jspService()方法里面的,这个方法就是服务器向客户端输出内容的地方,它本身就是一个方法。所以,如果在它里面定义方法的话,那么就相当于是在类的方法里面嵌套定义了方法,这在Java里面是不允许的。但是,可以在里面定义自己的私有变量,因为方法里面也可以定义变量,也可以调用方法,唯独不可以再定义方法了。
总之
<%!和%> 是用来定义成员变量属性和方法的
<% 和 %> 主要是用来输出内容
如果涉及到了成员变量的操作,那么就应该使用<%!和 %>
而如果涉及到了输出内容,就使用<% 和 %>。
3.JSP表达式
JSP表达式(expression)用于将程序数据输出到客户端,它将要输出的变量或者表达式直接封装在以“<%=”开头和以“%>”结尾的标记中,其基本的语法格式如下所示。
<%= expression %>
在上述语法格式中,JSP表达式中的变量或表达式的计算结果将被转换成一个字符串,然后插入到JSP页面输出结果的相应位置处。
需要注意的是
“<%=”和“%>”标记之间插入的是表达式,不能插入语句。“<%=”是一个完整的符号,“<%”和“=”之间不能有空格,且JSP表达式中的变量或表达式后面不能有分号(;)。
二、JSP注释
同其他各种编程语言一样,JSP也有自己的注释方式,其基本语法格式如下。
<%-- 注释信息 --%>
需要注意的是,Tomcat在将JSP页面编译成Servlet程序时,会忽略JSP页面中被注释的内容,不会将注释信息发送到客户端。
三、page指令
在 JSP 页面中,经常需要对页面的某些特性进行描述,例如,页面的编码方式、JSP 页面采用的语言等,这时,可以通过page指令来实现。
page指令的具体语法格式如下所示。
<%@ page 属性名1= "属性值1" 属性名2= "属性值2" ...%>
在上面的语法格式中,page用于声明指令名称,属性用来指定JSP页面的某些特性。page指令提供了一系列与JSP页面相关的属性,如下图。
除了import属性外,其他的属性都只能出现一次,否则会编译失败。
需要注意的是,page指令的属性名称都是区分大小写的。
四、include指令
在实际开发时,有时需要在JSP页面静态包含一个文件,例如HTML文件、文本文件等,这时,可以通过include指令来实现。include指令的具体语法格式如下所示。
<%@ include file="被包含的文件地址"%>
include指令只有一个file属性,该属性用来指定插入到JSP页面目标位置的文件资源。需要注意的是,插入文件的路径一般不以“/”开头,而是使用相对路径。
关于include指令的具体应用,有很多问题需要注意,接下来,将这些问题进行列举,具体如下
(1)被引入的文件必须遵循 JSP 语法,其中的内容可以包含静态 HTML、JSP 脚本元素和JSP指令等普通JSP页面所具有的一切内容。
(2)除了指令元素之外,被引入的文件中的其他元素都被转换成相应的Java源代码,然后插入当前JSP页面所翻译成的Servlet源文件中,插入位置与include指令在当前JSP页面中的位置保持一致。
(3)file属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前Web应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。需要注意的是,这里的 file属性指定的相对路径是相对于文件(file),而不是相对于页面(page)。
五、对基本语法、JSP指令进行案例分析
创建date.jsp和include.jsp文件并将date.jsp包含于include.jsp文件
date.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Date</title>
</head>
<body>
<%response.setHeader("Refresh","1");//每隔一秒刷新%>
<%=new java.util.Date().toLocaleString()%> <%--输出时间 --%>
</body>
</html>
include.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>
<%!int a = 1, b = 2;//定义两个变量a\b%>
<%!
public String print() { //自定义方法
String str = "This is a method";//方法内变量
return str;
}
%>
<body>
欢迎你,现在的时间是:
<%@ include file="date.jsp"%><%--将date.jsp页面包含进来 --%>
<br> a+b的和是:
<%=a + b%>
<br> 自定义方法的输出:
<%=print()%>
</body>
</html>
运行代码
访问include.jsp