橘子味的心
标题:JSP基础语法

在本章中,我们将了解和学习JSP语法。并了解JSP开发涉及的简单语法(即元素)的基本用法。

为了方便演示,使用Eclipse创建一个动态Web项目:jspsyntax,用于运行以下涉及到的示例代码。

JSP的元素

JSP的元素如下所述:

1.小脚本

小脚本(scriptlet)可以将任何数量的小脚本包含在页面中,小脚本是有效的JAVA语言语句,变量或方法声明或表达式。

以下是小脚本的语法 -

  1. <% code fragment %>
  2. HTML

可以将上述语法编写为XML的形式,效果相同,如下所示:

  1. <jsp:scriptlet>
  2. code fragment
  3. </jsp:scriptlet>
  4. XML

编写的任何文本,HTML标签或JSP元素必须在scriptlet之外。 以下是JSP的简单和第一个例子 -

文件:helloworld.jsp -

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Hello World</title>
  8. </head>
  9. <body>
  10. Hello World!
  11. <br />
  12. <%
  13. out.println("Your IP address is " + request.getRemoteAddr());
  14. %>
  15. </body>
  16. </html>
  17. HTML

执行上面示例代码,得到以下结果 -

2.JSP声明

声明一个或多个变量或方法,可以在Java代码中编写,之后在JSP文件中使用。 在JSP文件中使用该变量或方法之前,必须先声明变量或方法。

以下是JSP声明的语法 -

  1. <%! declaration; [ declaration; ]+ ... %>
  2. Jsp

可以将上述语法编写为XML的形式,效果相同,如下所示:

  1. <jsp:declaration>
  2. code fragment
  3. </jsp:declaration>
  4. XML

以下是JSP声明的示例 -

  1. <%! int i = 0; %>
  2. <%! int a, b, c; %>
  3. <%! Circle a = new Circle(2.0); %>
  4. HTML

3.JSP表达式

JSP表达式元素包含一个脚本语言表达式,它被评估求值,转换为一个字符串,并插入到表达式显示在JSP文件中的指定输出位置。

因为表达式的值被转换为字符串,所以可以在JSP文件中使用文本行内的表达式,无论是否使用HTML标记HTML。

表达式元素可以包含根据Java语言规范有效的任何表达式,但不能使用分号来结束表达式。

以下是JSP表达式的语法 -

  1. <%= expression %>
  2. HTML

可以将上述语法编写为XML的形式,效果相同,如下所示:

  1. <jsp:expression>
  2. expression
  3. </jsp:expression>
  4. XML

以下示例显示了JSP表达式 -

文件:express.jsp -

  1. <html>
  2. <head><title>A Comment Test</title></head>
  3.  
  4. <body>
  5. <p>Today's date: <%= (new java.util.Date()).toLocaleString()%></p>
  6. </body>
  7. </html>
  8. HTML

上述代码将产生以下结果 -

  1. Today's date: 11-Sep-2017 21:24:25
  2. Shell

4.JSP注释

JSP注释标记JSP容器应忽略的文本或语句。当您想要隐藏或注释掉JSP页面的一部分时,JSP注释很有用。

以下是JSP注释的语法 -

  1. <%-- This is JSP comment --%>
  2. HTML

以下示例显示了JSP注释 -

  1. <html>
  2. <head><title>A Comment Test</title></head>
  3.  
  4. <body>
  5. <h2>A Test of Comments</h2>
  6. <%-- This comment will not be visible in the page source --%>
  7. </body>
  8. </html>
  9. HTML

上述代码将产生以下结果 -

  1. A Test of Comments
  2. Shell

可以使用少量特殊结构,在各种情况下可以插入特别处理的注释或字符。下面是一个总结 -

编号 语法 说明
1 <%-- comment --%> JSP注释,它会被JSP引擎忽略。
2 <!-- comment --> HTML注释,它会被浏览器忽略。
3 <\% 表示静态的<%字面值。
4 %\> 表示静态的%>字面值。
5 \' 表示静态的单引号'字面值。
6 \" 静态的单引号"字面值。

5.JSP指令

JSP指令影响servlet类的整体结构。它通常具有以下形式 -

  1. <%@ directive attribute="value" %>
  2. HTML

有三种类型的指令标签 -

编号 指令 描述
1 <%@ page ... %> 定义页面相关属性,如脚本语言,错误页面和缓冲要求等。
2 <%@ include ... %> 在编译阶段包括文件。
3 <%@ taglib ... %> 声明页面中使用包含自定义操作的标签库

我们将在另一章专门介绍JSP指令 - JSP指令

6.JSP动作

JSP动作使用XML语法中的结构来控制servlet引擎的行为。可以动态插入文件,重新使用JavaBeans组件,将用户转发到另一个页面,或为Java插件生成HTML。

只有一个用于动作元素语法,因为它符合XML标准 -

  1. <jsp:action_name attribute="value" />
  2. XML

动作元素基本上是预定义的功能,下表列出了可用的JSP动作 -

编号 动作 描述
1 jsp:include 在请求页面时包含一个文件。
2 jsp:useBean 查找或实例化一个JavaBean。
3 jsp:setProperty 设置JavaBean属性的值。
4 jsp:getProperty 将JavaBean属性的值输出。
5 jsp:forward 将请求者转发到新页面。
6 jsp:plugin 生成针对Java插件创建OBJECTEMBED标记的特定于浏览器的代码。
7 jsp:element 动态定义XML元素。
8 jsp:attribute 定义动态定义的XML元素属性。
9 jsp:body 定义动态定义的XML元素的正文。
10 jsp:text 用于在JSP页面和文档中编写模板文本。

我们将在单独的章节解释JSP动作 - JSP动作

7.JSP隐式对象

JSP支持九个自动定义的变量,也称为隐式对象。这些变量是 -

编号 对象 描述
1 request 这是与请求相关联的HttpServletRequest对象。
2 response 这是与客户端的响应关联的HttpServletResponse对象。
3 out 这是用于将输出发送到客户端的PrintWriter对象。
4 session 这是与请求相关联的HttpSession对象。
5 application 这是与应用程序上下文相关联的ServletContext对象。
6 config 这是与该页面相关联的ServletConfig对象。
7 pageContext 它封装了使用服务器特定的功能,如更高性能的JspWriter对象。
8 page 这只是一个同义词,用于调用由编译的servlet类定义的方法。
9 Exception 异常对象允许指定的JSP访问异常数据。

我们将在单独的章节讲解JSP隐式对象 - JSP隐式对象

8.控制流程语句

在JSP编程中使用Java的所有API和构建块,包括决策语句,循环等。如:if,if..else等语句。

9.决策语句

if...else块开始像一个普通的小脚本,但是小脚本在每一行都会被闭合,并且包含小脚本标签在HTML文本中。参考以下示例代码 -

文件:ifelse.jsp -

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>IF...Else示例</title>
  8. </head>
  9. <body>
  10. <%!int day = 3;%>
  11. <%
  12. if (day == 1 | day == 7) {
  13. %>
  14. <p>今天是周末,不用上班,Oyes ~</p>
  15. <%
  16. } else {
  17. %>
  18. <p>今天是工作日,乖乖去上班 ~</p>
  19. <%
  20. }
  21. %>
  22. </body>
  23. </html>
  24. HTML

上述代码将产生以下结果 -

现在看看下面的switch...case块,对于不同选项匹配使用out.println()输出不同结果 -

  1. <%! int day = 3; %>
  2. <html>
  3. <head><title>SWITCH...CASE Example</title></head>
  4.  
  5. <body>
  6. <%
  7. switch(day) {
  8. case 0:
  9. out.println("It\'s Sunday.");
  10. break;
  11. case 1:
  12. out.println("It\'s Monday.");
  13. break;
  14. case 2:
  15. out.println("It\'s Tuesday.");
  16. break;
  17. case 3:
  18. out.println("It\'s Wednesday.");
  19. break;
  20. case 4:
  21. out.println("It\'s Thursday.");
  22. break;
  23. case 5:
  24. out.println("It\'s Friday.");
  25. break;
  26. default:
  27. out.println("It's Saturday.");
  28. }
  29. %>
  30. </body>
  31. </html>
  32. HTML

上述代码将产生以下结果 -

  1. It's Saturday.
  2. Shell

10.循环语句

在Java中使用三种基本类型的循环块:for, while 以及 do…while均可在JSP编程中使用。

下面来看看for循环语句的示例 -

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>For循环语句示例</title>
  8. </head>
  9. <body>
  10. <%!int fontSize;%>
  11. <%
  12. for (fontSize = 1; fontSize <= 5; fontSize++) {
  13. %>
  14. <font color="green" size="<%=fontSize%>"> JSP教程 </font>
  15. <br />
  16. <%
  17. }
  18. %>
  19. </body>
  20. </html>
  21. HTML

上述代码将产生以下结果 -

以上示例可以使用while循环编写,代码如下:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>While循环语句示例</title>
  8. </head>
  9. <body>
  10. <%!int fontSize;%>
  11. <%
  12. while (fontSize <= 5) {
  13. %>
  14. <font color="green" size="<%=fontSize%>"> JSP教程 </font>
  15. <br />
  16. <%
  17. fontSize++;
  18. %>
  19. <%
  20. }
  21. %>
  22. </body>
  23. </html>
  24. HTML

上述代码将产生以下结果 -

11.JSP运算符

JSP支持Java支持的所有逻辑和算术运算符。下表列出了所有具有最高优先级的运算符放在表格的顶部,优先级较低的运算符放在底部。

在一个表达式中,将首先评估计算较高优先级的运算符。

分类 运算符 关联性
后缀 () [] . 左到右
一元运算符 ++ -- ! ~ 右到左
乘法 * / % 左到右
加法 + -
位移 >> >>> << 左到右
关系 > >= < <= 左到右
等于 == != 左到右
按位与 & 左到右
按位异或 ^ 左到右
按位或 左到右
逻辑与 &&
逻辑或 左到右
条件 ?: 右到左
分配 = += -= *= /= %= >>= <<= &= ^= 右到左
逗号 , 左到右

12.JSP文字

JSP表达式语言定义了以下文字 -

  • 布尔 - truefalse
  • 整数 - 与Java中的一样。
  • 浮点 - 与Java中的一样。
  • 字符串 - 带单引号和双引号; "被转义为\"'被转义为\'\被转义为\\
  • - null