简介

  1. JSP(全称Java Server Pages) 与 PHP、ASP、ASP.NET 等语言类似,运行在服务端的语言。JSP 技术是以 Java 语言作为脚本语言的,JSP 网页为整个服务器端的 Java 库单元提供了一个接口来服务于HTTP的应用程序。
  2. 总的来说,JSP 网页就是用另一种方式来编写 Servlet 而不用成为 Java 编程高手。除了解释阶段外,JSP 网页几乎可以被当成一个普通的 Servlet 来对待。
  3. JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成servlet。

    语法

  4. 脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。任何文本、HTML标签、JSP元素必须写在脚本程序的外面。语法格式:

    1. <% 代码片段 %>

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

    1. <%@ page language="java" contentType="text/html; charset=UTF-8"
    2. pageEncoding="UTF-8"%>
  5. 声明:一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。JSP声明的语法格式:

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

    程序示例:

    1. <%! int i = 0; %>
    2. <%! int a, b, c; %>
    3. <%! Circle a = new Circle(2.0); %>
  6. JSP表达式

一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。JSP表达式的语法格式:

  1. <%= 表达式 %>

程序示例:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <body>
  4. <p>
  5. 今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
  6. </p>
  7. </body>
  1. JSP注释

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

  1. <body>
  2. <%-- 该部分注释在网页中不会被显示--%>
  3. <p>
  4. 今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
  5. </p>
  6. </body>
  1. JSP指令

JSP指令用来设置与整个JSP页面相关的属性。JSP指令语法格式:

  1. <%@ directive attribute="value" %>

这里有三种指令标签:

指令 描述
<%@ page … %> 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include … %> 包含其他文件
<%@ taglib … %> 引入标签库的定义,可以是自定义标签

动作元素

与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用。JSP动作元素是用XML语法写成的。
利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。

  1. 动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。

    1. <jsp:include page="相对 URL 地址" flush="true" />

    前面已经介绍过include指令,它是在JSP文件被转换成Servlet的时候引入文件,而这里的jsp:include动作不同,插入文件的时间是在页面被请求的时候。

  2. jsp:useBean 动作用来加载一个将在JSP页面中使用的JavaBean。

    1. <jsp:useBean id="name" class="package.class" />

    在类载入后,我们既可以通过 jsp:setProperty 和 jsp:getProperty 动作来修改和检索bean的属性。

  3. jsp:forward动作把请求转到另外的页面。jsp:forward标记只有一个属性page。

    1. <jsp:forward page="相对 URL 地址" />
  4. jsp:plugin动作用来根据浏览器的类型,插入通过Java插件 运行Java Applet所必需的OBJECT或EMBED元素。

  5. 动作元素动态定义XML元素。
  6. 动作元素允许在JSP页面和文档中使用写入文本的模板

    隐式对象

  7. JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量。

  8. JSP所支持的九大隐式对象: | 对象 | 描述 | | —- | —- | | request | HttpServletRequest 接口的实例 | | response | HttpServletResponse 接口的实例 | | out | javax.servlet.jsp.JspWriter类的实例,用于把结果输出至网页上 | | session | HttpSession类的实例 | | application | ServletContext类的实例,与应用上下文有关 | | config | ServletConfig类的实例 | | pageContext | PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问 | | page | 类似于Java类中的this关键字 | | Exception | Exception类的对象,代表发生错误的JSP页面中对应的异常对象 |

  9. PageContext类定义了一些字段,包括PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE。其中一个重要的方法就是 removeAttribute(),它可接受一个或两个参数。比如,pageContext.removeAttribute(“attrName”) 移除四个scope中相关属性,但是下面这种方法只移除特定 scope 中的相关属性:

    1. pageContext.removeAttribute("attrName", PAGE_SCOPE);

    JSTL

  10. JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

  11. 根据JSTL标签所提供的功能,可以将其分为5个类别。
  • 核心标签
  • 格式化标签
  • SQL 标签
  • XML 标签
  • JSTL 函数

    核心标签

    核心标签是最常用的 JSTL标签。引用核心标签库的语法如下:
    1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    | 标签 | 描述 | | —- | —- | | | 用于在JSP中显示数据,就像<%= … > | | | 用于保存数据 | | | 用于删除数据 | | | 用来处理产生错误的异常状况,并且将错误信息储存起来 | | | 与我们在一般程序中用的if一样 | | | 本身只当做的父标签 | | | 的子标签,用来判断条件是否成立 | | | 的子标签,接在标签后,当标签判断为false时被执行 | | | 检索一个绝对或相对 URL,然后将其内容暴露给页面 | | | 基础迭代标签,接受多种集合类型 | | | 根据指定的分隔符来分隔内容并迭代输出 | | | 用来给包含或重定向的页面传递参数 | | | 重定向至一个新的URL. | | | 使用可选的查询参数来创造一个URL |

格式化标签

JSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下:

  1. <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
标签 描述
使用指定的格式或精度格式化数字
解析一个代表着数字,货币或百分比的字符串
使用指定的风格或模式格式化日期和时间
解析一个代表着日期或时间的字符串
绑定资源
指定地区
绑定资源
指定时区
指定时区
显示资源配置文件信息
设置request的字符编码

SQL标签

JSTL SQL标签库提供了与关系型数据库(Oracle,MySQL,SQL Server等等)进行交互的标签。引用SQL标签库的语法如下:

  1. <%@ taglib prefix="sql"
  2. uri="http://java.sun.com/jsp/jstl/sql" %>
标签 描述
指定数据源
运行SQL查询语句
运行SQL更新语句
将SQL语句中的参数设为指定值
将SQL语句中的日期参数设为指定的java.util.Date 对象值
在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行

XML 标签

JSTL XML标签库提供了创建和操作XML文档的标签。引用XML标签库的语法如下:

  1. <%@ taglib prefix="x"
  2. uri="http://java.sun.com/jsp/jstl/xml" %>

在使用xml标签前,你必须将XML 和 XPath 的相关包拷贝至你的\lib下

JSTL函数

JSTL包含一系列标准函数,大部分是通用的字符串处理函数。引用JSTL函数库的语法如下:

  1. <%@ taglib prefix="fn"
  2. uri="http://java.sun.com/jsp/jstl/functions" %>
函数 描述
fn:contains() 测试输入的字符串是否包含指定的子串
fn:containsIgnoreCase() 测试输入的字符串是否包含指定的子串,大小写不敏感
fn:endsWith() 测试输入的字符串是否以指定的后缀结尾
fn:escapeXml() 跳过可以作为XML标记的字符
fn:indexOf() 返回指定字符串在输入字符串中出现的位置
fn:join() 将数组中的元素合成一个字符串然后输出
fn:length() 返回字符串长度
fn:replace() 将输入字符串中指定的位置替换为指定的字符串然后返回
fn:split() 将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回
fn:startsWith() 测试输入字符串是否以指定的前缀开始
fn:substring() 返回字符串的子集
fn:substringAfter() 返回字符串在指定子串之后的子集
fn:substringBefore() 返回字符串在指定子串之前的子集
fn:toLowerCase() 将字符串中的字符转为小写
fn:toUpperCase() 将字符串中的字符转为大写
fn:trim() 移除首尾的空白符

EL表达式

  1. JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单。JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式。在JSP EL表达式内可以使用整型数,浮点数,字符串,常量true、false,还有null。
  2. JSP EL允许您指定一个表达式来表示属性值。一个简单的表达式语法如下:

    1. ${expr}

    其中,expr指的是表达式。在JSP EL中通用的操作符是 .{} 。这两个操作符允许您通过内嵌的JSP对象访问各种各样的JavaBean属性。
    想要停用对EL表达式的评估的话,需要使用page指令将isELIgnored属性值设为true:

    1. <%@ page isELIgnored ="true|false" %>

    这样,EL表达式就会被忽略。若设为false,则容器将会计算EL表达式。

  3. 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 | 测试是否空值 |

  1. <h3>${empty m}</h3> //测试m是否为空值,若为空则返回true
  1. JSP EL允许您在表达式中使用函数。这些函数必须被定义在自定义标签库中。函数的使用语法如下:

    1. ${ns:func(param1, param2, ...)}

    ns指的是命名空间(namespace),func指的是函数的名称,param1指的是第一个参数

  2. JSP EL支持下表列出的隐含对象: | 隐含对象 | 描述 | | —- | —- | | pageScope | page 作用域 | | requestScope | request 作用域 | | sessionScope | session 作用域 | | applicationScope | application 作用域 | | param | Request 对象的参数,字符串 | | paramValues | Request对象的参数,字符串集合 | | header | HTTP 信息头,字符串 | | headerValues | HTTP 信息头,字符串集合 | | initParam | 上下文初始化参数 | | cookie | Cookie值 | | pageContext | 当前页面的pageContext |

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

举例来说,访问一个名为order的参数,可以这样使用表达式:${param.order},或者${param[“order”]}。
接下来的例子表明了如何访问request中的username参数:

  1. <body>
  2. <center>
  3. <h1><% out.print(title); %></h1>
  4. </center>
  5. <div align="center">
  6. <p>${param["username"]}</p>
  7. </div>
  8. </body>

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