08-JSP模板引擎

nobility 发布于 2021-09-28 3029 次阅读


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>
此作者没有提供个人介绍
最后更新于 2021-09-28