JSP - 语法
在本章中,我们将讨论JSP中的语法。 我们将理解JSP开发所涉及的简单语法(即元素)的基本用法。
JSP的元素
JSP的元素已在下面描述 -
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>
NOTE - 假设Apache Tomcat安装在C:\apache-tomcat-7.0.2中,并且您的环境是根据环境设置教程设置的。
让我们将上述代码保存在JSP文件hello.jsp ,并将此文件放在C:\apache-tomcat7.0.2\webapps\ROOT目录中。 使用URL http://localhost:8080/hello.jsp浏览相同的http://localhost:8080/hello.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表达式元素包含一个脚本语言表达式,该表达式被计算,转换为String,并插入表达式出现在JSP文件中的位置。
因为表达式的值转换为String,所以您可以在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>
上面的代码将生成以下结果 -
<p>Today's date: 11-Sep-2010 21:24:25</p>
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>
上面的代码将生成以下结果 -
<h2>A Test of Comments</h2>
在各种情况下,您可以使用少量特殊构造来插入注释或字符,否则这些注释或字符将被特殊处理。 这是一个总结 -
S.No. | 语法和目的 |
---|---|
1 | 《%-- comment --%》 JSP评论。 被JSP引擎忽略。 |
2 | 《!-- comment --》 HTML评论。 被浏览器忽略。 |
3 | 《\% 表示静态 |
4 | %\》 表示静态%> literal。 |
5 | \' 使用单引号的属性中的单引号。 |
6 | \" 使用双引号的属性中的双引号。 |
JSP指令
JSP指令会影响servlet类的整体结构。 它通常有以下形式 -
<%@ directive attribute="value" %>
指令标签有三种类型 -
S.No. | 指令和说明 |
---|---|
1 | 《%@ page ... %》 定义与页面相关的属性,例如脚本语言,错误页面和缓冲要求。 |
2 | 《%@ include ... %》 在翻译阶段包含一个文件。 |
3 | 《%@ taglib ... %》 声明包含页面中使用的自定义操作的标记库 |
我们将在JSP-Directives的单独章节中解释JSP指令
JSP动作
JSP操作使用XML语法中的构造来控制servlet引擎的行为。 您可以动态插入文件,重用JavaBeans组件,将用户转发到另一个页面,或者为Java插件生成HTML。
Action元素只有一种语法,因为它符合XML标准 -
<jsp:action_name attribute="value" />
Action元素基本上是预定义的函数。 下表列出了可用的JSP操作 -
S.No. | 语法和目的 |
---|---|
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页面和文档中编写模板文本。 |
我们将在JSP - Actions的单独章节中解释JSP 操作
JSP隐式对象
JSP支持九个自动定义的变量,也称为隐式对象。 这些变量是 -
S.No. | 对象和描述 |
---|---|
1 | request 这是与请求关联的HttpServletRequest对象。 |
2 | response 这是与客户端响应关联的HttpServletResponse对象。 |
3 | out 这是用于将输出发送到客户端的PrintWriter对象。 |
4 | session 这是与请求关联的HttpSession对象。 |
5 | application 这是与应用程序上下文关联的ServletContext对象。 |
6 | config 这是与页面关联的ServletConfig对象。 |
7 | pageContext 这封装了特定于服务器的功能,如性能更高的JspWriters 。 |
8 | page 这只是它的同义词,用于调用已转换的servlet类定义的方法。 |
9 | Exception Exception对象允许指定的JSP访问异常数据。 |
我们将在JSP - Implicit Objects的单独章节中解释JSP Implicit Objects 。
Control-Flow Statements
您可以在JSP编程中使用Java的所有API和构建块,包括决策语句,循环等。
Decision-Making Statements
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>
上面的代码将生成以下结果 -
<p>It's Wednesday.</p>
循环语句
您还可以在Java中使用三种基本类型的循环块: for, while, and do…while JSP编程中的块。
让我们看一下以下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>
上面的代码将生成以下结果 -
<font color="green" size="1">
JSP Tutorial
</font>
<font color="green" size="2">
JSP Tutorial
</font>
<font color="green" size="3">
JSP Tutorial
</font>
以上示例可以使用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>
上面的代码将生成以下结果 -
<font color="green" size="1">
JSP Tutorial
</font>
<font color="green" size="2">
JSP Tutorial
</font>
<font color="green" size="3">
JSP Tutorial
</font>
JSP运算符
JSP支持Java支持的所有逻辑和算术运算符。 下表列出了所有具有最高优先级的运算符出现在表的顶部,那些最低的运算符出现在底部。
在表达式中,将首先评估更高优先级的运算符。
类别 | 操作者 | 关联性 |
---|---|---|
Postfix | ()[]。 (点运算符) | 左到右 |
Unary | ++ - - ! 〜 | 右到左 |
Multiplicative | * /% | 左到右 |
Additive | + - | 左到右 |
Shift | >> >>> << | 左到右 |
Relational | >> = << = | 左到右 |
Equality | ==!= | 左到右 |
Bitwise AND | & | 左到右 |
Bitwise XOR | ^ | 左到右 |
Bitwise OR | | | 左到右 |
Logical AND | && | 左到右 |
Logical OR | || | 左到右 |
Conditional | ?: | 右到左 |
Assignment | = + = - = * =/=%= >> = << =&= ^ = | = | 右到左 |
Comma | , | 左到右 |
JSP文字
JSP表达式语言定义了以下文字 -
Boolean - true和false
Integer - 与Java一样
Floating point - 就像在Java中一样
String - 带单引号和双引号; “被转义为\”,“被转义为\”,\被转义为\\。
Null - 无效