JSP - 语法
本教程将给出涉及 JS P开发的语法的基本思想(即元素)。
Scriptlet
scriptlet 可以包含任意数量的 JAVA 语言语句,变量或方法声明,或者在页面的脚本语言中有效的表达式。
下面是 scriptlet 的语法:
<% code fragment %>
你可以编写相当于上述语法的 XML,如下所示:
<jsp:scriptlet>
code fragment
</jsp:scriptlet>
任何文本、HTML 标签或你编写的 JSP 元素必须在 scriptlet 之外。下面是 JSP 的第一个简单的例子:
<html> <head><title>Hello World</title></head> <body> Hello World!<br/> <% out.println("Your IP address is " + request.getRemoteAddr()); %> </body> </html>
注: 假设 Apache Tomca t安装在 C:\ apache-tomcat-7.0.2 中,并且你的环境是按照教程中的环境设置配置的。
让我们把上面的代码写入 JSP 文件中的 hello.jsp 中,并把这个文件放在 C:\ apache-tomcat-7.0.2 \ webapps \ROOT 中,并试图通过 http://localhost:8080/hello.jsp
浏览它。这将产生以下结果:
JSP 声明
JSP 声明声明了一个或多个变量或方法,你可以在 JSP 文件中的 Java 代码中使用。当你在 JSP 文件中使用变量或方法之前,你必须声明。
下面是 JSP 声明的语法:
<%! declaration; [ declaration; ]+ ... %>
你可以编写相当于上述语法的 XML,如下所示:
<jsp:declaration>
code fragment
</jsp:declaration>
以下是 JSP 声明的一个简单的例子:
<%! int i = 0; %>
<%! int a, b, c; %>
<%! Circle a = new Circle(2.0); %>
JSP 表达式
JSP 表达式元素包含一个脚本语言表达式,该表达式被赋值,转换成一个字符串,并插入到表达式出现在 JSP 文件中的位置。
因为表达式的值转换为一个字符串,你可以在 JSP 文件中的文本的一行使用一个表达式,无论该文本是否是 HTML 标签标记。
根据 Java 语言规范,表达式元素可以包含任何有效的表达式,但你不能使用分号来结束一个表达式。
下面是 JSP 表达式的语法:
<%= expression %>
你可以编写相当于上述语法的 XML,如下所示:
<jsp:expression>
expression
</jsp:expression>
以下是 JSP 表达式的简单的例子:
<html> <head><title>A Comment Test</title></head> <body> <p> Today's date: <%= (new java.util.Date()).toLocaleString()%> </p> </body> </html>
这会生成如下所示结果:
Today's date: 11-Sep-2010 21:24:25
JSP 注释
JSP 注释标志着 JSP 容器应该忽略的文本或语句。当你想要隐藏或“注释掉”JSP 页面的一部分时,JSP 注释非常有用。
下面是 JSP 注释的语法:
<%-- This is JSP comment --%>
以下是 JSP 注释的简单的例子:
<html> <head><title>A Comment Test</title></head> <body> <h2>A Test of Comments</h2> <%-- This comment will not be visible in the page source --%> </body> </html>
这将生成如下所示的结果:
A Test of Comments
在一些情况下,有少量的特殊结构可以用来插入注释或字符,否则会被特殊对待。这里有一个总结:
语法 | 目的 |
---|---|
<%-- comment --%> | JSP 注释。JSP 引擎会忽略。 |
<!-- comment --> | HTML 注释。浏览器会忽略。 |
<\% | 代表静态 |
%\> | 代表静态 |
\' | 单引号属性,使用单引号。 |
\" | 双引号属性,使用双引号。 |
JSP 指令
JSP 指令影响 servlet 类的总体结构。它通常具有以下形式:
<%@ directive attribute="value" %>
有三种指令标签:
指令 | 描述 |
---|---|
<%@ page ... %> | 定义 page-dependent 属性,比如脚本语言,错误页面和缓冲要求。 |
<%@ include ... %> | 包括转换阶段的一个文件。 |
<%@ taglib ... %> | 声明一个在页面中使用的标签库,包含自定义操作。 |
我们会在独立的章节 JSP – Directives 中解释 JSP 指令。
JSP 操作
JSP 操作使用 XML 语法结构来控制 servlet 引擎的行为。你可以动态地插入一个文件,重用 javabean 组件,将用户转到另一个页面,或为 Java 插件生成 HTML。
操作元素只有一个语法,因为它符合 XML 标准:
<jsp:action_name attribute="value" />
操作元素基本上是预定义的函数,有以下 JSP 操作:
语法 | 目的 |
---|---|
jsp:include | 当请求页面时,包含一个文件 |
jsp:useBean | 发现或实例化一个 JavaBean |
jsp:setProperty | JavaBean 的属性集 |
jsp:getProperty | 将 JavaBean 的属性嵌入到输出中 |
jsp:forward | 将请求转发给一个新页面 |
jsp:plugin | 生成浏览器-特定代码,为 Java 插件创建 OBJECT 或 EMBED 标签 |
jsp:element | 动态的定义 XML 元素 |
jsp:attribute | 定义了动态定义的 XML 元素的属性 |
jsp:body | 定义了动态定义 XM L元素的 body |
jsp:text | 用于在 JSP 页面和文档中编写模板 |
我们将在单独的章节 JSP – Actions 中解释 JSP 操作。
JSP 隐式对象
JSP 支持 9 个自动定义的变量,这也称为隐式对象。这些变量是:
对象 | 描述 |
---|---|
request | 这是与请求关联的 HttpServletRequest 对象。 |
response | 这是与客户端响应关联的 HttpServletResponse 对象。 |
out | 这是用于向客户端发送输出的 PrintWriter 对象。 |
session | 这是与请求关联的 HttpSession 对象。 |
application | 这是与应用程序上下文关联的 ServletContext 对象。 |
config | 这是与页面关联的 ServletConfig 对象。 |
pageContext | 这个封装特使用特定服务器的特性,如更高的性能 jspwriter。 |
page | 这是 this 的一个简单的同义词,是用来调用由转换的 servlet 类定义的方法。 |
Exception | Exception对象允许指定的 JSP 访问异常数据。 |
我们将在独立的章节 JSP - Implicit Objects 中解释 JSP 隐式对象。
控制流语句
JSP 提供了强有力的 Java 工具来嵌入到你的 web 应用程序中。你可以在 JSP 编程中使用所有的 API 和 Jave 构建块,包括决策语句、循环等。
决策的语句
if…else 块像普通的 Scriptlet 一样开始,但 Scriptlet 结束于包含在 Scriptlet 标签间的 HTML 文本每一行。
<%! int day = 3; %> <html> <head><title>IF...ELSE Example</title></head> <body> <% if (day == 1 | day == 7) { %> <p> Today is weekend</p> <% } else { %> <p> Today is not weekend</p> <% } %> </body> </html>
这将产生如下所示的结果:
Today is not weekend
现在看看下面的 switch…case 块,使用 out.println()语句和内部 Scriptletas 编写,与上述例子有一点区别:
<%! int day = 3; %> <html> <head><title>SWITCH...CASE Example</title></head> <body> <% switch(day) { case 0: out.println("It\'s Sunday."); break; case 1: out.println("It\'s Monday."); break; case 2: out.println("It\'s Tuesday."); break; case 3: out.println("It\'s Wednesday."); break; case 4: out.println("It\'s Thursday."); break; case 5: out.println("It\'s Friday."); break; default: out.println("It's Saturday."); } %> </body> </html>
这将产生如下所示的结果:
It's Wednesday.
循环语句
你还可以在 Java 中使用循环块的三种基本类型来实现 JSP 编程:for,while,和 do…while
让我们看看下面的 for 循环的例子:
<%! int fontSize; %> <html> <head><title>FOR LOOP Example</title></head> <body> <%for ( fontSize = 1; fontSize <= 3; fontSize++){ %> <font color="green" size="<%= fontSize %>"> JSP Tutorial </font><br /> <%}%> </body> </html>
这将产生如下所示的结果:
JSP Tutorial
JSP Tutorial
JSP Tutorial
上述例子也可以用 while 循环来编写:
<%! int fontSize; %> <html> <head><title>WHILE LOOP Example</title></head> <body> <%while ( fontSize <= 3){ %> <font color="green" size="<%= fontSize %>"> JSP Tutorial </font><br /> <%fontSize++;%> <%}%> </body> </html>
这也会产生如下所示的结果:
JSP Tutorial JSP Tutorial JSP Tutorial
JSP 运算符
JSP 支持所有 Java 支持的逻辑和算术运算符。下表列出了所有运算符的优先级,从上到下,优先级依次降低。
在一个表达式,优先级越高的运算符会越先计算。
类型 | 运算符 | 结合性 |
---|---|---|
后缀运算符 | () [] . (dot operator) | 从左到右 |
一目运算符 | ++ - - ! ~ | 从右到左 |
倍数运算符 | * / % | 从左到右 |
加法运算符 | + - | 从左到右 |
位移运算符 | >> >>> << | 从左到右 |
代数运算符 | > >= < <= | 从左到右 |
赋值运算符 | == != | 从左到右 |
按位与运算符 | & | 从左到右 |
按位异或运算符 | ^ | 从左到右 |
按位或运算符 | | | 从左到右 |
逻辑与运算符 | && | 从左到右 |
逻辑或运算符 | || | 从左到右 |
条件运算符 | ?: | 从右到左 |
赋值运算符 | = += -= *= /= %= >>= <<= &= ^= |= | 从右到左 |
逗号运算符 | , | 从左到右 |
JSP 文字
JSP 表达式语言定义了以下文字:
-
Boolean: true and false
-
Integer: 与 Java 相同
-
Floating point: 与 Java 相同
-
String: 带有单引号和双引号;’’转义为\’’,’转义为\’,\转义为\。
- Null: null