JSP
JSP 技术是以 Java 语言作为脚本语言的,JSP 网页为整个服务器端的 Java 库单元提供了一个接口来服务于HTTP的应用程序。
JSP文件后缀名为 *.jsp
JSTL
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
根据JSTL标签所提供的功能,可以将其分为5个类别:
- 核心标签
- 格式化标签
- SQL 标签
- XML 标签
- JSTL 函数
核心标签
<c:out> 标签
<c:out>标签用来显示一个表达式的结果
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 要输出的内容 | 是 | 无 |
default | 输出的默认值 | 否 | 主体中的内容 |
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:out value="${salary}"/>
<c:set> 标签
<c:set>标签用于设置变量值和对象属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 要存储的值 | 否 | 主体的内容 |
var | 存储信息的变量 | 否 | 无 |
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:out value="${salary}"/>
<c:if> 标签
<c:if>标签判断表达式的值,如果表达式的值为 true 则执行其主体内容。
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
test | 条件 | 是 | 无 |
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:if test="${salary > 2000}">
<p>我的工资为: <c:out value="${salary}"/><p>
</c:if>
<c:choose>标签
<c:choose>标签与Java switch语句的功能一样,用于在众多选项中做出选择。
switch语句中有case,而<c:choose>标签中对应有<c:when>,switch语句中有default,而<c:choose>标签中有<c:otherwise>
- <c:choose>标签没有属性。
- <c:when>标签只有一个属性,在下表中有给出。
- <c:otherwise>标签没有属性。
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
test | 条件 | 是 | 无 |
<c:set var="salary" scope="session" value="${2000*2}"/>
<p>你的工资为 : <c:out value="${salary}"/></p>
<c:choose>
<c:when test="${salary <= 0}">
太惨了。
</c:when>
<c:when test="${salary > 1000}">
不错的薪水,还能生活。
</c:when>
<c:otherwise>
什么都没有。
</c:otherwise>
</c:choose>
<c:forEach>
<c:forEach>标签迭代一个集合中的对象
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
items | 要被循环的信息 | 否 | 无 |
begin | 开始的元素(0=第一个元素,1=第二个元素) | 否 | 0 |
end | 最后一个元素(0=第一个元素,1=第二个元素) | 否 | Last element |
step | 每一次迭代的步长 | 否 | 1 |
var | 代表当前条目的变量名称 | 否 | 无 |
varStatus | 代表循环状态的变量名称 | 否 | 无 |
<c:forEach items="${sessionScope.userList}" var="userItem" varStatus="userStatus"> ${userItem.键名} </c:forEach>
实例解读: 对 session 对象存储的 userList 集合对象进行遍历,每次访问的项暂时存储在 userItem 变量中,从索引 1 开始至索引 10 进行访问,每次访问项的状态相关值由 userStatus 对象暂存
格式化标签
<fmt:formatNumber>标签
<fmt:formatNumber>标签用于格式化数字,百分比,货币
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 要显示的数字 | 是 | 无 |
pattern | 指定一个自定义的格式化模式用与输出 | 否 | 无 |
groupingUsed | 是否对数字分组 (TRUE 或 FALSE) | 否 | true |
maxFractionDigits | 小数点后最大的位数 | 否 | 无 |
minFractionDigits | 小数点后最小的位数 | 否 |
pattern属性。这个属性可以让您在对数字编码时包含指定的字符:
符号 | 描述 |
---|---|
0 | 代表一位数字 |
# | 代表一位数字,若没有则显示 0,前导 0 和追尾 0 不显示。 |
. | 小数点 |
<fmt:formatNumber value="${salary.totalShifts}" pattern="###,##0.00"/>
<fmt:formatNumber groupingUsed="false" value="${kqWorker.salary}" maxFractionDigits="7" minFractionDigits="0"/>
<fmt:formatDate> 标签
<fmt:formatDate>标签用于使用不同的方式格式化日期
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 要显示的日期 | 是 | 无 |
pattern | 自定义格式模式 | 否 | 无 |
<fmt:formatDate> 标签格式模式:
代码 | 描述 | 实例 |
---|---|---|
y | 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 | 2002 |
M | 月份数字。一位数的月份没有前导零。 | April & 04 |
d | 月中的某一天。一位数的日期没有前导零。 | 20 |
h | 12 小时制的小时。一位数的小时数没有前导零。 | 12 |
H | 24 小时制的小时。一位数的小时数没有前导零。 | 0 |
m | 分钟。一位数的分钟数没有前导零。 | 45 |
s | 秒。一位数的秒数没有前导零。 | 52 |
<fmt:formatDate value="${kqWorker.kqWorkerFile.contractExpire}" pattern="yyyy-MM-dd"/>
<fmt:formatDate value="${kqWorker.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
<fmt:message> 标签
<fmt:message>标签映射一个关键字给局部消息,然后执行参数替换
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
key | 要检索的消息关键字 | 否 | Body |
<fmt:message key='project.attendanceManagement.DkList.pleaseSelect' />
使用<fmt:message>
标签可以方便地实现国际化,可以根据用户的语言环境动态显示不同的文本消息,提供更好的多语言支持。在这个例子中,<fmt:message key='project.attendanceManagement.DkList.pleaseSelect' />
可能会显示一个用于选择提示的文本消息,具体的内容需要查看资源文件中该键对应的值。
JSP 表达式语言:EL表达式
/ or div | 除 |
% or mod | 取模 |
== or eq | 测试是否相等 |
!= or ne | 测试是否不等 |
< or lt | 测试是否小于 |
> or gt | 测试是否大于 |
<= or le | 测试是否小于等于 |
>= or ge | 测试是否大于等于 |
&& or and | 测试逻辑与 |
|| or or | 测试逻辑或 |
! or not | 测试取反 |
empty | 测试是否空值 |
表单标签库
表单标签库中包含了可以用在jsp页面渲染HTML元素的标签
<form:form>
属性 | 描述 |
modelAttribute | 暴露表单支持对象的模型属性名称,默认是command |
<form:form modelAttribute="book" action="save-book" method="post">
...
</form:form>
input标签
<form:input path="xxx"/>
path属性将文本框输入值绑定到form object上。
password标签
<form:password path="xxx"/>
hidden标签
<form:hidden path="xxx"/>
表示隐藏的元素,故不支持cssClass和cssStyle属性。
textarea标签
<form:textarea path="xxx"/>
示例一、
<form:form action="addSto" method="post" modelAttribute="storageInformation">
<form:input path="teacherId" name="teacherId" value="教师编号" />
<form:input path="subjectId" name="subjectId" value="科目编号 " />
<form:input path="storageName" name="storageName" value="名称" />
<form:radiobutton path="category" name="category" value="0" />科目共享
<form:radiobutton path="category" name="category" value="1" />个人独有
<br>
<div class="forgot">
<input type="submit" value="创建">
</div>
</form:form>
示例二、
创建实体类 user
package net.biancheng.po;
public class User {
private String name;
private Integer age;
private Double height;
/** 省略setter和getter方法*/
}
创建 addUser.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="fm" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>添加用户</title>
</head>
<body>
<fm:form method="post" modelAttribute="user" action="${pageContext.request.contextPath }/showuser">
用户名:<fm:input path="name"/>
<br />
年龄:<fm:input path="age"/>
<br />
身高:<fm:input path="height"/>
<br />
<input type="submit" value="保存" />
</fm:form>
</body>
</html>
其他
<%@ page contentType="text/html;charset=UTF-8" %>
该指令用于设置 JSP 页面输出的内容类型和编码格式。其中 contentType
属性表示输出内容类型,本例中设置为 "text/html"
,表示输出的是 HTML 类型的文档;charset
属性表示字符集编码,本例中设置为 UTF-8
,表示采用 UTF-8 编码格式输出页面。
<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
该指令用于在 JSP 页面中引入一个静态文件。其中 file
属性表示要引入的文件路径,本例中引入了位于应用程序 Web 根目录下 /WEB-INF/views/include
目录下名为 taglib.jsp
的文件。
Shiro
Apache Shiro 是一个强大易用的 安全框架,提供了认证、授权、加密和会话管理等功能,对于任何一个应用程序,Shiro 都可以提供全面的安全管理服务。
<shiro:hasPermission name=“...“>
<shiro:hasPermission name="sys:user:edit">
haspermission是从外部引入的一个标签,执行标签时,标签会根据name属性来判断当前用户是否拥有指定的权限。如果有,就执行shiro标签内的代码,如果没有,就跳过不执行。
更多有关可看:
欢迎留言区补充