在本节中,我们将讨论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>
运行上面示例代码,产生以下结果-
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插件创建OBJECT 或EMBED 标签。 |
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中三种基本的循环块类型:for
,while
和do…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>
执行上面示例代码后,得到以下结果:
剩下的
do...while
循环示例,由读者自己去完成。
1.9. JSP文字/字面量
JSP表达式语言定义以下文字-
- 布尔值 -
true
与false
。 - 整数 - 与Java中的一样。
- 浮点数 - 与Java中的一样。
- 字符串 - 单引号和双引号;
- Null -
null