JSP语法
以下内容引用自http://wiki.jikexueyuan.com/project/jsp/syntax.html:
一、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 Tomcat安装在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>
四、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>
在一些情况下,有少量的特殊结构可以用来插入注释或字符,否则会被特殊对待。这里有一个总结:
语法 | 目的 |
---|---|
<%-- comment --%> | JSP注释。JSP引擎会忽略。 |
<!-- comment --> | HTML注释。浏览器会忽略。 |
<\% | 代表静态,相当于转义字符 |
%\> | 代表静态,相当于转义字符 |
\' | 单引号属性,使用单引号。 |
\" | 双引号属性,使用双引号。 |
五、JSP指令
JSP指令影响Servlet类的总体结构。它通常具有以下形式:
<%@ directive attribute="value" %>
有三种指令标签:
指令 | 描述 |
---|---|
<%@ page ... %> | 定义page-dependent属性,比如脚本语言,错误页面和缓冲要求。 |
<%@ include ... %> | 包括转换阶段的一个文件。 |
<%@ taglib ... %> | 声明一个在页面中使用的标签库,包含自定义操作。 |
六、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隐式对象
JSP支持9个自动定义的变量,这也称为隐式对象。这些变量是:
对象 | 描述 |
---|---|
request | 这是与请求关联的HttpServletRequest对象。 |
response | 这是与客户端响应关联的HttpServletResponse对象。 |
out | 这是用于向客户端发送输出的PrintWriter对象。 |
session | 这是与请求关联的HttpSession对象。 |
application | 这是与应用程序上下文关联的ServletContext对象。 |
config | 这是与页面关联的ServletConfig对象。 |
pageContext | 这个封装特使用特定服务器的特性,如更高的性能jspwriter。 |
page | 这是this的一个简单的同义词,是用来调用由转换的servlet类定义的方法。 |
Exception | Exception对象允许指定的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
测试工程:https://github.com/easonjim/5_java_example/tree/master/jspbasics/test1/