在本节中,我们将讨论JSP中的语法。了解JSP开发中涉及的简单语法(即元素)的基本用法。

JSP的元素如下所述-

1.1. 脚本

脚本是一种包含任意数量的JAVA语言语句,变量或方法声明或在页面脚本语言中有效的表达式。

以下是脚本的语法-

<% code fragment %>

可以编写与上述语法等效的XML,如下所示:

<jsp:scriptlet>
   code fragment
</jsp:scriptlet>

编写的任何文本,HTML标记或JSP元素都必须在脚本之外。 以下是JSP的简单第一个示例(文件:firstjsp.jsp)-

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World(xntutor.com)</title>
</head>
<body>
 Hello World!<br/>
      <%
         out.println("你的IP地址是:" + request.getRemoteAddr());
      %>
</body>
</html>

运行上面示例代码,产生以下结果-
脚本

1.2. 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); %>

1.3. JSP表达式

JSP表达式元素包含一种脚本语言表达式,脚本语言表达式经过评估计算,转换为字符串(String),然后插入该表达式在JSP文件中出现的位置。
由于表达式的值已转换为字符串,因此可以在JSP文件的一行文本中使用表达式。

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

以下是JSP表达式的语法-

<%= expression %>

可以编写与上述语法等效的XML,如下所示:

<jsp:expression>
   expression
</jsp:expression>

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

<!-- file: nowdate.html -->
<html> 
   <head><title>JSP表达式使用</title></head> 
   <body>
      <p>今天日期是: <%= (new java.util.Date()).toLocaleString()%></p>
   </body> 
</html>

1.4. JSP注释

JSP注释标记了JSP容器应忽略的文本或语句。 当您想隐藏或“注释掉” JSP页面的一部分时,就可以使用JSP注释。

以下是JSP注释的语法-

<%-- 这是被注释掉的文本或语句 --%>

下面是一个JSP注释的示例(文件:comment.jsp):

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP注释的示例(xntutor.com)</title>
</head>
<body>
<h2>标题内容H2</h2> 
      <%-- 此注释将在页面源中不可见 --%> 
</body>
</html>

运行上面示例代码,产生以下结果-
JSP注释的示例

1.5. JSP指令

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

<%@ directive attribute="value" %>

指令标记有三种类型-

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

1.6. JSP动作

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

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

<jsp:action_name attribute="value" />

动作元素基本上是预定义的功能。 下表列出了可用的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页面和文档中编写模板文本。

1.7. JSP隐式对象

JSP支持九个自动定义的变量,这些变量也称为隐式对象,它们可以再JSP页面中直接使用。 这些变量是-

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

1.8. 决策声明

if...else块像普通的脚本一样,但是脚本在每一行都关闭,并且在脚本标记之间包含HTML文本。

<%! int day = 2; %> 
<html> 
   <head><title>IF...ELSE示例</title></head> 

   <body>
      <% if (day == 1 || day == 7) { %>
         <p>今天是周末</p>
      <% } else { %>
         <p>今天不是周末</p>
      <% } %>
   </body> 
</html>

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

今天不是周末

下面来看看switch...case块,它与使用out.println()和内部脚本的写法有些不同 -

<%! int day = 5; %> 
<html> 
   <head><title>SWITCH...CASE示例</title></head> 
   <body>
      <% 
         switch(day) {
            case 0:
               out.println("今天是星期日");
               break;
            case 1:
               out.println("今天是星期一");
               break;
            case 2:
               out.println("今天是星期二");
               break;
            case 3:
               out.println("今天是星期三");
               break;
            case 4:
               out.println("今天是星期四");
               break;
            case 5:
               out.println("今天是星期五");
               break;
            default:
               out.println("今天是星期六");
         }
      %>
   </body> 
</html>

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

今天是星期五

循环语句

JSP编程中还可以使用在Java中三种基本的循环块类型:forwhiledo…while块。

下面来看看如何在JSP中使用这几个循环 -

<%! int times=1; %> 
<html> 
   <head><title>FOR LOOP示例</title></head> 

   <body>
      <%for(times=1; times <= 3; times++){ %>         
            <%= times %>. JSP教程<br />
      <%}%>
   </body> 
</html>

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

1. JSP教程
2. JSP教程
3. JSP教程

上面的示例可以使用while循环编写,如下所示(文件:while-loop.jsp)-

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%!int times = 1;%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>while示例(xntutor.com)</title>
</head>
<body>
    <%
        while (times <= 3) {
    %>
    <%=times%>. JSP教程
    <br />
    <%
        times++;
    %>
    <%
        }
    %>
</body>
</html>

执行上面示例代码后,得到以下结果:
While循环示例

剩下的do...while循环示例,由读者自己去完成。

1.9. JSP文字/字面量

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

  • 布尔值 - truefalse
  • 整数 - 与Java中的一样。
  • 浮点数 - 与Java中的一样。
  • 字符串 - 单引号和双引号;
  • Null - null