JSP 基础语法
本章我们将学习 JSP 的基础语法
前面几章节我们了解了 JSP 是什么能做什么和 JSP 的生命周期,我们已经迫不及待的想要进入 JSP 实质性的学习环节了
我们将主要讲解一下几个方面概念
- JSP 嵌入 Java 脚本程序
- 中文编码问题
- JSP 声明
- JSP 表达式
- JSP 注释
- JSP 指令
- JSP 行为
- JSP 隐藏对象
- JSP 判断语句和循环语句
- JSP 运算符
- JSP 字面量
JSP 嵌入 Java 脚本程序
Java 脚本程序是指任意的 Java 语句、变量、方法或表达式
JSP 嵌入 Java 脚本的语法如下
<% 代码片段 %>
或者我们可以使用 JSP 标签嵌入 Java 脚本
<jsp:scriptlet> 代码片段 </jsp:scriptlet>
任何文本、HTML标签、JSP元素必须写在脚本程序的外面
范例
下面范例演示了 JSP 嵌入 Java 脚本的用法,这也是我们第一个范例
webapp/show_ip.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <meta charset="utf-8"> <title>显示 IP - JSP 基础教程 | 简单教程(www.twle.cn)</title> <h1>Hello World!</h1> <p> <% out.println("Your IP address is " + request.getRemoteAddr()); %> </p> <p>显示 IP - JSP 基础教程 | 简单教程(www.twle.cn)</p>
我们假设你已经配置好了 JSP 的运行环境,如果还没配置,请参考 JSP 运行环境配置
我们假设你已经正确创建了第一个 JSP 项目(项目名可以随意,本教程使用 jsp
)
把上面的代码保存到项目目录下的 webapp/show_ip.jsp
文件中
在浏览器上输入 http://localhost:8080/jsp/show_ip.jsp 显示如下
中文编码问题
上面中的范例,如果我们删掉了以下语句的化,中文就会显示为乱码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%
因此,以后一旦碰到 JSP 中文乱码问题,记得在 JSP 页面的顶部加上以上代码
JSP 声明语句
上面我们已经学习了如何在 HTML 中嵌入 Java 脚本形成 JSP 页面
但 脚本程序只能是简单的 Java 语句,如果涉及到 Java 比较高级的东西,比如定义一个类 那么脚本程序就无能为了
这时候就要使用 JSP 声明语句了
一个声明语句可以声明一个或多个变量、方法,供后面的 Java 代码使用
在 JSP 文件中,所有的变量和方法必须先声明然后才能使用
JSP声明语句语法
<%! declaration; [ declaration; ]+ ... %>
或者我们可以使用 jsp 标签声明语句
<jsp:declaration> 代码片段 </jsp:declaration>
范例
webapp/greeting.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%! class Hello { public String hello() { return "Hello,简单教程"; } }; Hello greet = new Hello(); %> <!DOCTYPE html> <meta charset="utf-8"> <title>JSP 声明语句 - JSP 基础教程 | 简单教程(www.twle.cn)</title> <p> <% out.println(greet.hello()); %> </p> <p>JSP 声明语句 - JSP 基础教程 | 简单教程(www.twle.cn)</p>
在浏览器上输入 http://localhost:8080/jsp/greeting.jsp 显示如下
JSP 表达式
如果每次输出都要使用 <% out.println() %>
是不是很累,因为每次都要多敲几个 out.println()
JSP 早就料到了我们喜欢偷懒,于是内置了 JSP 表达式来让我们偷懒
一个 JSP 表达式中包含的脚本语言表达式,先被转化成 String,然后插入到表达式出现的地方
由于表达式的值会被转化成 String,所以我们可以在一个文本行中使用表达式而不用去管它是否是 HTML 标签
表达式元素中可以包含任何符合 Java 语言规范的表达式,但是不能使用分号来结束表达式
JSP 表达式语法
<%= 表达式 %>
同样的,我们也可以用 jsp 标签
<jsp:expression> 表达式 </jsp:expression>
范例
现在,我们用 JSP 表达式来输出当前的日期和时间
webapp/curtime.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <meta charset="utf-8"> <title>JSP 表达式 - JSP 基础教程 | 简单教程(www.twle.cn)</title> <p>今天的日期是: <%= (new java.util.Date()).toLocaleString() %></p> <p>JSP 表达式 - JSP 基础教程 | 简单教程(www.twle.cn)</p>
在浏览器上输入 http://localhost:8080/jsp/curtime.jsp 显示如下
JSP 注释
JSP 注释主要有两个作用:为代码作注释以及将某段代码注释掉
JSP 注释语法如下
<%-- 注释内容 --%>
不同情况下使用注释的语法规则
语法 | 描述 |
---|---|
<%-- 注释 --%> | JSP注释,注释内容不会被发送至浏览器甚至不会被编译 |
HTML注释,通过浏览器查看网页源代码时可以看见注释内容 | |
<\% | 代表静态 <% 常量 |
%\> | 代表静态 %> 常量 |
\' | 在属性中使用的单引号 |
\" | 在属性中使用的双引号 |
范例
我们给上面的范例添加一句 JSP 注释 <%-- 该部分注释在网页中不会被显示--%>
webapp/jsp_comment.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <meta charset="utf-8"> <title>JSP 表达式 - JSP 基础教程 | 简单教程(www.twle.cn)</title> <p>今天的日期是: <%= (new java.util.Date()).toLocaleString() %></p> <%-- 该部分注释在网页中不会被显示--%> <p>JSP 表达式 - JSP 基础教程 | 简单教程(www.twle.cn)</p>
在浏览器上输入 http://localhost:8080/jsp/curtime.jsp 显示如下
JSP 指令
JSP 指令用来设置与整个JSP页面相关的属性
JSP指令语法
<%@ directive attribute="value" %>
JSP 有三种指令标签
指令 | 描述 |
---|---|
<%@ page ... %> | 定义页面的依赖属性,如脚本语言、error页面、缓存需求 |
<%@ include ... %> | 包含其他文件 |
<%@ taglib ... %> | 引入标签库的定义,可以是自定义标签 |
JSP 动作
JSP 动作标签使用 XML 语法结构来控制 servlet 引擎
它能够动态插入一个文件,重用 JavaBean 组件,引导用户去另一个页面,为 Java 插件产生相关的 HTML 等等
JSP 动作标签语法
<jsp:action_name attribute="value" />
动作标签基本上是一些预先就定义好的函数,下表罗列出了一些可用的 JSP 动作标签
语法 | 描述 |
---|---|
jsp:include | 用于在当前页面中包含静态或动态资源 |
jsp:useBean | 寻找和初始化一个JavaBean组件 |
jsp:setProperty | 设置 JavaBean组件的值 |
jsp:getProperty | 将 JavaBean组件的值插入到 output中 |
jsp:forward | 从一个JSP文件向另一个文件传递一个包含用户请求的request对象 |
jsp:plugin | 用于在生成的HTML页面中包含Applet和JavaBean对象 |
jsp:element | 动态创建一个XML元素 |
jsp:attribute | 定义动态创建的XML元素的属性 |
jsp:body | 定义动态创建的XML元素的主体 |
jsp:text | 用于封装模板数据 |
JSP 隐式对象
JSP 支持九个自动定义的变量,社区称隐式对象
对象 | 描述 |
---|---|
request | HttpServletRequest类的实例 |
response | HttpServletResponse类的实例 |
out | PrintWriter类的实例,用于把结果输出至网页上 |
session | HttpSession类的实例 |
application | ServletContext类的实例,与应用上下文有关 |
config | ServletConfig类的实例 |
pageContext | PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问 |
page | 类似于Java类中的this关键字 |
Exception | Exception类的对象,代表发生错误的 JSP 页面中对应的异常对象 |
控制流语句
JSP 提供对 Java 语言的全面支持
我们可以在 JSP 程序中使用 Java API 甚至建立 Java 代码块,包括判断语句和循环语句等等
判断语句
JSP if...else
范例
webapp/jsp_if.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%! int day = 3; %> <!DOCTYPE html> <meta charset="utf-8"> <title>JSP if...else 范例 - JSP 基础教程 | 简单教程(www.twle.cn)</title> <% if (day == 1 | day == 7) { %> <p>今天是周末</p> <% } else { %> <p>今天不是周末</p> <% } %> JSP if...else 范例 - JSP 基础教程 | 简单教程(www.twle.cn)
在浏览器上输入 http://localhost:8080/jsp/jsp_if.jsp 显示如下
switch...case
JSP switch...case 范例
webapp/jsp_switch.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%! int day = 3; %> <!DOCTYPE html> <meta charset="utf-8"> <title>JSP SWITCH...CASE 范例 - JSP 基础教程 | 简单教程(www.twle.cn)</title> <% 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("星期六"); } %> <p>JSP SWITCH...CASE 范例 - JSP 基础教程 | 简单教程(www.twle.cn)</p>
在浏览器上输入 http://localhost:8080/jsp/jsp_switch.jsp 显示如下
循环语句
JSP 页面可以使用 Java 的三个基本循环类型:for,while,和 do…while
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%! int fontSize; %> <!DOCTYPE html> <meta charset="utf-8"> <title>JSP for 循环范例 - JSP 基础教程 | 简单教程(www.twle.cn)</title> <%for ( fontSize = 1; fontSize <= 6; fontSize++){ %> <font color="green" size="<%= fontSize %>"> 简单编程 </font><br /> <%}%> <p>JSP for 循环范例 - JSP 基础教程 | 简单教程(www.twle.cn)</p>
在浏览器上输入 http://localhost:8080/jsp/jsp_for.jsp 显示如下
JSP while 循环范例
webapp/jsp_while.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%! int fontSize; %> <!DOCTYPE html> <meta charset="utf-8"> <title>While 循环范例 - JSP 基础教程 | 简单教程(www.twle.cn)</title> <%while ( fontSize <= 6){ %> <font color="green" size="<%= fontSize %>"> 简单编程 </font><br /> <% fontSize++;%> <%}%> <p>While 循环范例 - JSP 基础教程 | 简单教程(www.twle.cn)</p>
在浏览器上输入 http://localhost:8080/jsp/jsp_while.jsp 显示如下
JSP 运算符
JSP 支持所有 Java 逻辑和算术运算符
下表罗列出了 JSP 常见运算符,优先级从高到低
类别 | 操作符 | 结合性 |
---|---|---|
后缀 | () [] . (点运算符) | 左到右 |
一元 | ++ - - ! ~ | 右到左 |
可乘性 | * / % | 左到右 |
可加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | > >= < <= | 左到右 |
相等/不等 | == != | 左到右 |
位与 | & | 左到右 |
位异或 | ^ | 左到右 |
位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | || | 左到右 |
条件判断 | ?: | 右到左 |
赋值 | = += -= *= /= %= >>= <<= &= ^= |= | 右到左 |
逗号 | , | 左到右 |
JSP 字面量
JSP 语言定义了以下几个字面量
字面量 | 描述 |
---|---|
布尔值(boolean) | true 和 false |
整型(int) | 与 Java 中的一样 |
浮点型(float) | 与 Java 中的一样 |
字符串(string) | 以单引号或双引号开始和结束 |
- Null:null |