JSP 基础语法

本章我们将学习 JSP 的基础语法

前面几章节我们了解了 JSP 是什么能做什么和 JSP 的生命周期,我们已经迫不及待的想要进入 JSP 实质性的学习环节了

我们将主要讲解一下几个方面概念

  1. JSP 嵌入 Java 脚本程序
  2. 中文编码问题
  3. JSP 声明
  4. JSP 表达式
  5. JSP 注释
  6. JSP 指令
  7. JSP 行为
  8. JSP 隐藏对象
  9. JSP 判断语句和循环语句
  10. JSP 运算符
  11. 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

JSP 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2018 简单教程 twle.cn All Rights Reserved.