Qida's Blog

纸上得来终觉浅,绝知此事要躬行。

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

它的出现,是因为人们开始注重软件的分层设计,不希望在 JSP 页面中出现 JAVA 逻辑代码。同时也由于自定义标签的开发难度较大、不利于技术的标准化,因此产生了 JSTL。

JSTL 和 EL 的结合,基本可以让页面再无 <% %> 代码。

JSTL 标准标签库可分为五类:

核心标签库

共 14 个,从功能上可以分为 4 类。引用方法:

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

表达式控制

标签 描述
<c:out> 用于显示数据,就像 <%= %>,区别在于 <c:out> 标签可以直接通过 . 操作符来访问属性
<c:set> 用于保存数据
<c:remove> 用于删除数据
<c:catch> 用来处理产生错误的异常状况,并且将错误信息储存起来

流程控制

标签 描述
<c:if> 与我们在一般程序中用的 if 一样
<c:choose> 本身只当做 <c:when><c:otherwise> 的父标签
<c:when> <c:choose> 的子标签,用来判断条件是否成立
<c:otherwise> <c:choose> 的子标签,接在 <c:when> 标签后,当 <c:when> 标签判断为 false 时被执行

循环

标签 描述
<c:forEach> 基础迭代标签,接受多种集合类型
<c:forTokens> 根据指定的分隔符来分隔内容并迭代输出

URL 操作

标签 描述
<c:import> 检索一个绝对或相对 URL,然后将其内容暴露给页面
<c:url> 使用可选的查询参数来创造一个 URL
<c:redirect> 重定向至一个新的 URL
<c:param> 用来给包含或重定向的页面传递参数

格式化标签库

用于格式化并输出文本、日期、时间、数字,这里只介绍最最最常用的两个标签。引用方法:

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

格式化数字

标签 描述
<fmt:formatNumber> 使用指定的格式或精度格式化数字

格式化日期

标签 描述
<fmt:formatDate> 使用指定的风格或模式格式化日期和时间

SQL 标签库

不常用。引用方法:

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

XML 标签库

不常用。引用方法:

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

函数标签库

大部分都是通用的字符串处理函数,用于配合 EL 表达式使用。引用方法:

1
<%@ taglib prefix="fn" 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() 移除首位的空白符

参考

JSP 标准标签库(JSTL)

JSP 有以下三类标签:

JSP Directive

指令标签用于设置与整个 JSP 页面相关的属性,非常常用。

标签 标签 描述
<%@ page ... %> <jsp:directive.page attribute="value" /> 定义页面的依赖属性,例如脚本语言、页面编码、缓存需求等等
<%@ include ... %> <jsp:directive.include file="relative url" /> 引入其它文件,例如 JSP、HTML、文本文件
<%@ taglib ... %> <jsp:directive.taglib uri="uri" prefix="prefixOfTag" /> 引入标签库,可以是 JSP 标准标签库(JSTL)、也可以是自定义标签库

JSP Syntax

语法标签是 Java 早期为了便于开发人员在 JSP 页面中书写业务逻辑而设计的,但目前不再建议使用。

标签 标签 描述
<% scriptlet %> <jsp:scriptlet> scriptlet </jsp:scriptlet> 脚本程序,可以包含任意有效的 Java 语句、变量、方法或表达式
<%! declaration %> <jsp:declaration> declaration </jsp:declaration> 声明语句,可以声明一个或多个变量、方法,供后面的 Java 代码使用
<%= expression %> <jsp:expression> expression </jsp:expression> 表达式,其结果会被转为字符串并输出到 HTML 页面
<%-- comment --%> 代码注释

举个栗子:

1
2
3
4
5
6
7
8
9
<html>
<body>
<%! String output = "world"; %>

<% out.println("Hello " + output); %>
<br/>
<%= "Hello " + output %>
</body>
</html>

渲染输出:

1
2
Hello world 
Hello world

上例中,虽然结合使用这三种语法标签,可以在 JSP 页面中写出大段的 Java 逻辑代码,但强烈不建议这么做,因为这样会导致前端页面和业务逻辑之间紧耦合,以致后续难以维护。

JSP Action

函数标签是一些预定义好的行为标签,但不常用。

标签 描述
<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> 用于封装模板数据

Q1 参加了一场 Docker 技术分享后,发现了 Docker 这个好东西,回头动手安装,打算跑起来体验一番,却遇到了一些蛋疼的问题。

阅读全文 »

在使用交互式 Bash 时,一个配置得当的命令提示符可以为用户带来不少便利,本文讲解如何配置命令提示符。

默认提示符

命令提示符涉及到以下两个环境变量:

环境变量 描述
PS1 主提示符,Bash 会在准备好读入一条命令时显示,默认值 \s-\v\$
PS2 次提示符,Bash 会在需要更多的输入来完成一条命令时显示,默认值 >

定制提示符

Bash 允许通过插入一些反斜杠转义的特殊字符来定制这些提示符,常用的转义字符如下:

转义字符 描述
\h 主机名,第一个 . 之前的部分
\H 主机名
\j shell 当前管理的作业数量
\l shell 的终端设备名的基本部分
\n 新行符
\r 回车
\s shell 的名称, $0 的基本部分 (最后一个斜杠后面的部分)
\u 当前用户的用户名
\v bash 的版本 (例如,4.3)
\w 当前工作目录
\W 当前工作目录的基本部分
\! 此命令的历史编号
\# 此命令的命令编号
\$ 如果有效 UID 为 0,则显示 #, 否则 $
\\ 一个反斜杠

除此之外,还有一些不太常用的日期转义字符:

转义字符 描述
\d 当前日期,格式是 “星期 月份 日” (例如,”Tue May 26”)
\D{format} 自定义日期格式,花括号是必需的
\t 当前时间,采用 24 小时制的 HH:MM:SS 格式
\T 当前时间,采用 12 小时制的 HH:MM:SS 格式
\@ 当前时间,采用 12 小时制上午/下午 am/pm 格式
\A 当前时间,采用 24 小时制上午/下午格式

如何定制

由于 PS1 默认设置的 \s-\v\$ 实在是太废毫无信息量可言,显示如下:

1
bash-4.3$

因此可以通过修改 ~/.bash_profile 文件来定制自己的命令提示符。例如,使用 CentOS 默认设置的 [\u@\h \W]\$

1
2
3
$ vim ~/.bash_profile

export PS1="[\u@\h \w]\$ "

定制后,能够知道当前用户、主机名、工作目录:

1
[root@BGP-BJ-C-5HL ~]$

参考

http://www.gnu.org/software/bash/manual/bashref.html#Controlling-the-Prompt

自定义shell终端提示符(例如颜色)