JSP模板引擎
JSP(Java Server Page)本质上就是Servlet,混合了html、css、JavaScript和Java语言的一个文件,后缀名为**.jsp**,应该放在静态资源目录Web
中,最终会被翻译成Servlet,属于编译型的模板引擎
基本语法
<% %>
:使用百分号可包裹Java代码块<%= %>
:使用百分号包裹,等号做前缀可输出Java表达式的值<%! %>
:使用百分号包裹,叹号做前缀可声明方法<%@ %>
:使用百分号包裹,and符做前缀可使用jsp指令<%@ page %>
:定义当前JSP页面全局设置<%@ include %>
:引入其他JSP页面合并到当前位置<%@ taglib %>
:引入JSP标签库
<%@ page import="java.util.ArrayList" %> <%--使用page命令 import属性引入Java的包--%>
<%@ page contentType="text/html;charset=UTF-8" %> <%--使用page命令 contentType属性设置contentType防止乱码--%>
<html>
<head>
<title>Document</title>
</head>
<body>
<%! public boolean isOdd(int number) { return number % 2 != 0; }%> <%--声明方法--%>
<%
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < 100; i++) {
if (isOdd(i)) {
list.add(i);
}
}
%><%--Java代码块--%>
<% for (Integer item : list) { %>
<h1><%=item%>是奇数</h1> <%--输出Java表达式--%>
<% } %>
</body>
</html>
九大内置对象
jsp文件中内置遍历,可直接使用
对象名 | 对象类型 | 描述 |
---|---|---|
request |
HttpServletRequest |
请求对象 |
response |
HttpServletResponse |
响应对象 |
session |
HttpSession |
会话对象 |
application |
ServletContext |
应用全局对象 |
out |
PrintWriter |
输出对象 |
page |
this |
当前页面对象 |
pageContext |
PageContext |
页面上下文对象 |
config |
ServletConfig |
应用配置对象 |
exception |
Throwable |
应用异常对象 |
EL表达式
EL(Expression Language)表达式语言,简化JSP输出,EL表达式就内置在JSP中无需引入任何东西即可使用,使用${表达式内容}
即可输出相应内容
- 对于对象点属性来说会调用对应的getter方法,直接输出对象会调用该对象的
toString()
方法 - 对于null,EL表达式会自动转化为空字符串
- 字符串比较不再需要
equals()
方法,直接使用双等号即可
作用域对象
省略作用域对象时会从小作用域向大作用域中不断查找,直到找到该属性,若都找不到返回空字符串
对象名 | JSP内置对象 | 对象类型 |
---|---|---|
pageScope |
pageContext |
PageContext |
requestScope |
request |
HttpServletRequest |
sessionScope |
session |
HttpSession |
applicationScope |
application |
ServletContext |
<%
pageContext.setAttribute("key","pageValue");
request.setAttribute("key","requestValue");
session.setAttribute("key","sessionValue");
application.setAttribute("key","ServletContextValue");
%>
<h1>${pageScope.key}</h1>
<h1>${requestScope.key}</h1>
<h1>${sessionScope.key}</h1>
<h1>${applicationScope.key}</h1>
<h1>${key}</h1>
参数对象
对象名 | 描述 |
---|---|
param |
自动将query string转化为对象,可使用点运算符得出 |
<%--localhost:8080/javaWeb/?key=param1&key=param2--%>
<%--若有多个只会获取第一个key--%>
<h1>${param.key}</h1>
JSTL标签库
JSTL(JSP Standard Tag Library)JSP标准标签库,使用JSTL标签库就需要引入相关jar包,从Tomcat官网下载并导入项目即可,但是要注意新版本的JSP已经内置的EL表达式,所以不需要引入了
包名 | 描述 | 是否需要引入 |
---|---|---|
taglibs-standard-impl-1.2.5.jar | 标签库定义包 | 是 |
taglibs-standard-spec-1.2.5.jar | 标签实现包 | 是 |
taglibs-standard-jstlel-1.2.5.jar | el表达式包 | 否 |
taglibs-standard-compat-1.2.5.jar | 1.0版本兼容包 | 否 |
核心标签库
在jsp中使用核心标签库就需要先引入该标签库,并给该标签库前缀取名,一般使用c
因为核心的首个英文单词就是c,核心标签库的描述信息存放在了 taglibs-standard-impl-1.2.5.jar/META-INF/c.tld
中
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
单分支判断
<%request.setAttribute("show", true);%>
<c:if test="${requestScope.show}">
<%--test属性接收一个布尔值的EL表达式,若该表达式为true则会输出该标签中的内容,否则不会输出--%>
<h1>show</h1>
</c:if>
多分支判断
<%request.setAttribute("score", 100);%>
<c:choose> <%--when和otherwise标签只能在choose标签包裹中使用--%>
<c:when test="${requestScope.score == 100}"><%--when中test属性接收一个布尔值的EL表达式,依次向下匹配,匹配到一个就停止匹配--%>
<h1>满分</h1>
</c:when>
<c:when test="${requestScope.score >= 60}">
<h1>及格</h1>
</c:when>
<c:otherwise><%--所有的when都未匹配到则匹配otherwise--%>
<h1>重修</h1>
</c:otherwise>
</c:choose>
循环遍历
<%request.setAttribute("array", new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9});%>
<%--可遍历所有可遍历的数据结构--%>
<c:forEach items="${requestScope.array}" var="item" varStatus="idx" begin="1" end="9" step="2">
<%-- items属性接收一个使用EL表达式描述的可遍历的数据集合对象--%>
<%--var属性接收一个变量,用于当前暂存遍历到的对象--%>
<%--varStatus属性接受一个变量,用于获取当前遍历状态对象,比如获取index值--%>
<%--begin属性决定遍历的起始位置,end属性决定遍历的结束位置,默认从0到结尾--%>
<%--step属性决定遍历的步长,默认是1--%>
<h1>${idx.index}、${item}</h1>
</c:forEach>
其他常用标签
<%
request.setAttribute("nul", null);
request.setAttribute("html", "<a href='http://www.baidu.com'></a>");
%>
<h1>
<c:out value="${requestScope.nul}" default="空"/>
<%--value属性接收一个使用EL表达式对象,default接收默认值,当value中的对象为空时显示默认值--%>
</h1>
<h1>
<c:out value="${requestScope.html}" escapeXml="true"/>
<%--value属性接收一个使用EL表达式对象,escapeXml接收字符串的布尔值,对html字符串将转义避免XSS攻击--%>
</h1>
格式化输出标签库
在jsp中使用格式化输出标签库就需要先引入该标签库,并给该标签库前缀取名,一般使用fmt
,格式化输出标签库的描述信息存放在了 taglibs-standard-impl-1.2.5.jar/META-INF/fmt.tld
中
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
格式化日期
<%request.setAttribute("date", new java.util.Date());%>
<h1>
<fmt:formatDate value="${requestScope.date}" pattern="yyyy-MM-dd HH:mm:ss.SSS" />
<%--value属性接收一个使用EL表达式描述的时间对象,pattern接收时间格式化字符串--%>
</h1>
格式化数字
<%request.setAttribute("number", 123456.654321);%>
<h1>
<%--value属性接收一个使用EL表达式描述数字,pattern接收数字格式化字符串--%>
<fmt:formatNumber value="${requestScope.number}" pattern="0.00"/>
<%--0.00代表整数部分随意,小数部分保留俩位(四舍五入)--%>
<fmt:formatNumber value="${requestScope.number}" pattern="0,000.00"/>
<%--0,000.00代表整数部分按千使用逗号分位--%>
</h1>
Comments NOTHING