JSP——语法,指令,表达式语言(EL),JSTL标签

1.JSP语法

 

1)JSP 语法

 

脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。

 

脚本程序的语法格式:

 

 

<% 代码片段 %>

 

 

或者,您也可以编写与其等价的XML语句,就像下面这样:

 

 

<jsp:scriptlet>

   代码片段

</jsp:scriptlet>

 

 

注:任何文本、HTML标签、JSP元素必须写在脚本程序的外面。

 

 

 

第一个JSP示例:

 

 1 <html>
 2 
 3 <head><title>Hello World</title></head>
 4 
 5 <body>
 6 
 7 Hello World!<br/>
 8 
 9 <%
10 
11 out.println("Your IP address is " + request.getRemoteAddr());
12 
13 %>
14 
15 </body>
16 
17 </html>

 

 

2)中文编码问题

 

如果我们要在页面正常显示中文,我们需要在 JSP 文件头部添加以下代码:< >

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

 

 

 

 

接下来我们将以上程序修改为:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2 
 3     pageEncoding="UTF-8"%>
 4 
 5 <!DOCTYPE html>
 6 
 7 <html>
 8 
 9 <head>
10 
11 <meta charset="utf-8">
12 
13 <title>sxt教程</title>
14 
15 </head>
16 
17 <body>
18 
19 Hello World!<br/>
20 
21 <%
22 
23 out.println("你的 IP 地址 " + request.getRemoteAddr());
24 
25 %>
26 
27 </body>
28 
29 </html>

 

 

 

这样中文就可以正常显示了。

 

 

 

3)JSP声明

 

一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量和方法然后才能使用它们。(加!是全局变量,不加是局部)

 

 

 

JSP声明的语法格式:

 

 

<%! declaration; [ declaration; ]+ ... %>

 

 

或者,您也可以编写与其等价的XML语句,就像下面这样:

 

 

<jsp:declaration>

   代码片段

</jsp:declaration>

 

 

 

 

 

 

程序示例:

 

 

<%! int i = 0; %>

<%! int a, b, c; %>

<%! Circle a = new Circle(2.0); %>

 

 

 

 

4)JSP表达式

 

一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。

 

 

 

由于表达式的值会被转化成String,所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。

 

 

 

注意:

 

表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。

 

 

 

JSP表达式的语法格式:

 

 

<%= 表达式 %>

 

 

 

 

同样,您也可以编写与之等价的XML语句:

 

 

<jsp:expression>

   表达式

</jsp:expression>

 

 

 

 

程序示例:

 

 1  
 2 
 3 <%@ page language="java" contentType="text/html; charset=UTF-8"
 4 
 5     pageEncoding="UTF-8"%>
 6 
 7 <!DOCTYPE html>
 8 
 9 <html>
10 
11 <head>
12 
13 <meta charset="utf-8">
14 
15 <title>sxt教程</title>
16 
17 </head>
18 
19 <body>
20 
21 <p>
22 
23    今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
24 
25 </p>
26 
27 </body>
28 
29 </html>

 

 

5)JSP注释

 

JSP注释主要有两个作用:为代码作注释以及将某段代码注释掉。

 

 

 

JSP注释的语法格式:

 

<%-- 该部分注释在网页中不会被显示--%>

 

 

 

不同情况下使用注释的语法规则:

 

<%-- 注释 --%> JSP注释,注释内容不会被发送至浏览器甚至不会被编译

 

<!-- 注释 --> HTML注释,通过浏览器查看网页源代码时可以看见注释内容

 

 

 

6)JSP指令

 

JSP指令用来设置与整个JSP页面相关的属性。

 

JSP指令语法格式:

 

 

<%@ directive attribute="value" %>

 

 

 

 

这里有三种指令标签:

 

 

指令 描述

<%@ page ... %> 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等

<%@ include ... %> 包含其他文件

<%@ taglib ... %> 引入标签库的定义,可以是自定义标签

 

 

 

 

7)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组件的值插入到 output

jsp:forward 从一个JSP文件向另一个文件传递一个包含用户请求的request对象

jsp:plugin 用于在生成的HTML页面中包含AppletJavaBean对象

jsp:element 动态创建一个XML元素

jsp:attribute 定义动态创建的XML元素的属性

jsp:body 定义动态创建的XML元素的主体

jsp:text 用于封装模板数据

 

 

 

 

8)JSP隐含对象

 

JSP支持九个自动定义的变量,江湖人称隐含对象。这九个隐含对象的简介见下表:

 

 

对象 描述

request HttpServletRequest类的实例

response HttpServletResponse类的实例

out PrintWriter类的实例,用于把结果输出至网页上

session HttpSession类的实例

application ServletContext类的实例,与应用上下文有关

config ServletConfig类的实例

pageContext PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问

page 类似于Java类中的this关键字

Exception Exception类的对象,代表发生错误的JSP页面中对应的异常对象

 

 

 

 

9)控制流语句

 

JSP提供对Java语言的全面支持。您可以在JSP程序中使用Java API甚至建立Java代码块,包括判断语句和循环语句等等。

 

 

 

[1] 判断语句

 

If…else块,语法如下:

 

 

<% if (day == 1 | day == 7) { %>

      <p>今天是周末</p>

<% } else { %>

      <p>今天不是周末</p>

<% } %>

 

 

 

[2] switch…case

 

与if…else块有很大的不同,它使用out.println(),并且整个都装在脚本程序的标签中,就像下面这样:

 

 

<%

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("星期六");

}

%>

 

 

[3] 循环语句

 

在JSP程序中可以使用Java的三个基本循环类型:forwhile,和 dowhile

 

 

 

让我们来看看for循环的例子,以下输出的不同字体大小:

 

 

<%for ( fontSize = 1; fontSize <= 3; fontSize++){ %>

   <font color="green" size="<%= fontSize %>">

    sxt教程

   </font><br />

<%}%>

 

 

 

 

[4] while 循环

 

 

<%while ( fontSize <= 3){ %>

   <font color="green" size="<%= fontSize %>">

    Sxt教程

   </font><br />

<%fontSize++;%>

<%}%>

 

 

 

 

 

10)JSP运算符

 

JSP支持所有Java逻辑和算术运算符。

 

下表罗列出了JSP常见运算符,优先级从高到底:

 

 

 

类别 操作符 结合性

 

后缀 () [] . (点运算符) 左到右

 

一元 ++ - - ! ~ 右到左

 

可乘性 * / % 左到右

 

可加性 + - 左到右

 

移位 >> >>> <<   左到右

 

关系 > >= < <=   左到右

 

相等/不等 == != 左到右

 

位与 & 左到右

 

位异或 ^ 左到右

 

位或 | 左到右

 

逻辑与 && 左到右

 

逻辑或 || 左到右

 

条件判断 ?: 右到左

 

赋值 = += -= *= /= %= >>= <<= &= ^= |= 右到左

 

逗号 , 左到右

 

 

 

11)JSP 字面量

 

JSP语言定义了以下几个字面量:

 

 

布尔值(boolean)true false;

整型(int):与 Java 中的一样;

浮点型(float):与 Java 中的一样;

字符串(string):以单引号或双引号开始和结束;

Null:null

 

 

2.JSP指令

 

1)JSP 指令

 

JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。

 

 

 

语法格式如下:

 

 

<%@ directive attribute="value" %>

 

 

指令可以有很多个属性,它们以键值对的形式存在,并用逗号隔开。

 

JSP中的三种指令标签:

 

 

指令 描述

<%@ page ... %> 定义网页依赖属性,比如脚本语言、error页面、缓存需求等等

<%@ include ... %> 包含其他文件

<%@ taglib ... %> 引入标签库的定义

 

 

 

 

2)Page指令

 

Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。

 

Page指令的语法格式:

 

 

<%@ page attribute="value" %>

 

 

等价的XML格式:

 

 

<jsp:directive.page attribute="value" />

 

 

下表列出与Page指令相关的属性:

 

 

属性 描述

contentType 指定当前JSP页面的MIME类型和字符编码

errorPage 指定当JSP页面发生异常时需要转向的错误处理页面

isErrorPage 指定当前页面是否可以作为另一个JSP页面的错误处理页面

import 导入要使用的Java类

info 定义JSP页面的描述信息

language 定义JSP页面所用的脚本语言,默认是Java

session 指定JSP页面是否使用session

 

 

 

 

3)Include指令

 

JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。

 

 

 

Include指令的语法格式如下:

 

 

<%@ include file="文件相对 url 地址" %>

 

 

include 指令中的文件名实际上是一个相对的 URL 地址。如果您没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。

 

 

 

4)Taglib指令

 

JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

 

 

 

Taglib指令的语法:

 

 

<%@ taglib uri="uri" prefix="prefixOfTag" %>

 

 

uri属性确定标签库的位置,prefix属性指定标签库的前缀。

 

 

等价的XML语法:

 

 

<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />

 

 

3.JSP表达式语言

 

1)JSP 表达式语言

 

JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单。JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式。在JSP EL表达式内可以使用整型数,浮点数,字符串,常量true、false,还有null。

 

 

 

JSP EL允许您指定一个表达式来表示属性值。一个简单的表达式语法如下:

 

 

${expr}

 

 

 

 

其中,expr指的是表达式(隐含对象)。在JSP EL中通用的操作符是 . 和 {} 。这两个操作符允许您通过内嵌的JSP对象访问各种各样的JavaBean属性。

 

 

 

2)EL中的基础操作符

 

EL表达式支持大部分Java所提供的算术和逻辑操作符:

 

 

操作符 描述

. 访问一个Bean属性或者一个映射条目

[] 访问一个数组或者链表的元素

( ) 组织一个子表达式以改变优先级

+ 加

- 减或负

* 乘

/ or div 除

% or mod 取模

== or eq 测试是否相等

!= or ne 测试是否不等

< or lt 测试是否小于

> or gt 测试是否大于

<= or le 测试是否小于等于

>= or ge 测试是否大于等于

&& or and 测试逻辑与

|| or or 测试逻辑或

! or not 测试取反

empty 测试是否空值

 

 

 

 

3)JSP EL隐含对象

 

JSP EL支持下表列出的隐含对象:

 

 

隐含对象 描述

pageScope page 作用域

requestScope request 作用域

sessionScope session 作用域

applicationScope application 作用域

param Request 对象的参数,字符串

paramValues Request对象的参数,字符串集合

header HTTP 信息头,字符串

headerValues HTTP 信息头,字符串集合

initParam 上下文初始化参数

cookie Cookie值

pageContext 当前页面的pageContext

 

 

 

 

您可以在表达式中使用这些对象,就像使用变量一样。

 

 

 

 4)pageContext对象

 

pageContext对象是JSP中pageContext对象的引用。通过pageContext对象,您可以访问request对象。比如,访问request对象传入的查询字符串,就像这样:

 

 

${pageContext.request.queryString}

 

 

 

 

4)Scope对象

 

pageScope,requestScope,sessionScope,applicationScope变量用来访问存储在各个作用域层次的变量。

 

 

 

举例来说,如果您需要显式访问在applicationScope层的box变量,可以这样来访问:applicationScope.box。

 

 

 

5)param和paramValues对象

 

param和paramValues对象用来访问参数值,通过使用request.getParameter方法和request.getParameterValues方法。

 

 

 

举例来说,访问一个名为order的参数,可以这样使用表达式:${param.order},或者${param["order"]}。

 

 

 

接下来的例子表明了如何访问request中的username参数:

 

 

 

 1 <%@ page import="java.io.*,java.util.*" %>
 2 
 3 <%
 4 
 5     String title = "Accessing Request Param";
 6 
 7 %>
 8 
 9 <html>
10 
11 <head>
12 
13 <title><% out.print(title); %></title>
14 
15 </head>
16 
17 <body>
18 
19 <center>
20 
21 <h1><% out.print(title); %></h1>
22 
23 </center>
24 
25 <div align="center">
26 
27 <p>${param["username"]}</p>
28 
29 </div>
30 
31 </body>
32 
33 </html>

 

 

param对象返回单一的字符串,而paramValues对象则返回一个字符串数组。

 

 

 

6)header和headerValues对象

 

header和headerValues对象用来访问信息头,通过使用 request.getHeader方法和request.getHeaders方法。

 

 

 

举例来说,要访问一个名为user-agent的信息头,可以这样使用表达式:${header.user-agent},或者${header["user-agent"]}。

 

接下来的例子表明了如何访问user-agent信息头:

 

 1 <%@ page import="java.io.*,java.util.*" %>
 2 
 3 <%
 4 
 5     String title = "User Agent Example";
 6 
 7 %>
 8 
 9 <html>
10 
11 <head>
12 
13 <title><% out.print(title); %></title>
14 
15 </head>
16 
17 <body>
18 
19 <center>
20 
21 <h1><% out.print(title); %></h1>
22 
23 </center>
24 
25 <div align="center">
26 
27 <p>${header["user-agent"]}</p>
28 
29 </div>
30 
31 </body>
32 
33 </html>

 

 

总结:

 

优点:方便快捷的使用隐式对象里面的属性。

 

缺点:不能代替流程控制,例如for循环/while/switch...,没有代码补全,找BUG不好找。

 

4.JSTL标签

 

引用核心标签库的语法如下:

 

 

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

 

 

 

 

标签 描述

 

<c:out> 用于在JSP中显示数据,就像<%= ... >

 

<c:set> 用于保存数据

 

<c:remove> 用于删除数据

 

<c:if> 与我们在一般程序中用的if一样

 

<c:choose> 本身只当做<c:when>和<c:otherwise>的父标签

 

<c:when>   <c:choose>的子标签,用来判断条件是否成立

 

<c:otherwise>  <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行

 

<c:forEach> 基础迭代标签,接受多种集合类型

 

注:在引用核心标签库时,应该将该jar包(jstl.jar和standar.jar)导入并且Build Path一下

 

posted @ 2019-06-17 10:41  他也就火三年  阅读(527)  评论(0编辑  收藏  举报