模板引擎
用于web开发,是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。
模板引擎的分类
1.置换型 模板引擎
将规定好的文本标记替换为目标内容。这种模板引擎实现简单,除了标签替换之外,很少支持诸如子模板引用,流程控制等功能。置换模板引擎通常用于业务逻辑不是很复杂的项目,比如生成短信,生成电子邮件,甚至很多代码生成器也在用它。可以说,置换型模板引擎的思想是整个模板引擎界的基础。
2.解释型 模板引擎
置换标记,有了解释器的存在,可以支持更加复杂的标记和语法。
3.编译型 模板引擎
它通过解析引擎和一系列的算法将我们定义的模板转换为页面文件,然后直接访问页面文件即可。
主要回顾下JSP 模板引擎
学习网站
https://www.runoob.com/jsp/jsp-jstl.html
概念
Java Server Page(java服务器端页面技术),是Sun公司制定的一种服务器端动态页面生成技术的规范。
JSP结构
HTML标签 + java代码 , 即在 HTML 页面中嵌入 java 代码。
JSP的几种写法
java代码片段: <% Java代码片段; %>
java代码表达式:<% =Java代码表达式 %>
java方法:<% !Java方法 %>
<body>
<!--jsp代码块-->
<% User user = new User(); %><br>
<!--jsp代码表达式-->
<% =user %><br>
<!--JSP定义方法 -->
<%
int add(int a,int b){
return a+b;
}
%><br>
<!--jsp调用方法-->
<%=add(1,3)%><br>
<!--jsp循环-->
<% for(int i=0;i<10;i++){ %>
<h3>现在遍历到了:<%=i%></h3>
<%}%>
</body>
三大指令
1.page指令
import 用于导包的,可以一次性导入多个包,中间用逗号隔开,也可以使用多次page指令来进行导包;
pageEncoding 告诉JSP引擎,JSP文件保存的时候应该采用的编码格式;
contentType 等价于response.setContentType();
errorPage 指向错误处理页面(需要手动书写错误页面)
isErrorPage 可以写true/false,即定义这个页面是否是错误页面,默认是false;这个属性和上面的errorPage属性一般是成对出现的,成对并不是指在一个页面都出现,而是指关联着出现;
session 可以写true/false,默认是true,即表示当前页面是否支持session;
isELIgored 可以写为true/false,表示这个JSP是否支持EL表达式,默认为true;
2.include指令
这个指令里面最主要的属性是file,用来表示这个页面中要包含哪个页面;
3.taglib 指令
定义一个标签库以及其自定义标签的前缀;

<% page language="java" contentType="text/html;charset=UTF-8" pageEncoding="utf-8"%>
<% include file="top.jsp" %>
<% taglib url="http://java.sun.com/jsp/jst1/core" prefix="c" %>
九大对象
隐含对象 | 类型 | 说明 |
---|---|---|
request | HttpServletRequest | 代表请求对象 |
response | HttpServletResponse | 代表响应对象 |
out | JSPWriter | 输出数据流 |
session | HttpSession | 会话 |
application | ServletContext | 全局Servlet上下文对象 |
pageContext | PageContext | Jsp页面上下文 |
page | Object | 代表jsp页面本身,即this |
config | ServletConfig | Servlet配置对象 |
exception | throwable | 捕获页面异常对象 |

7大动作
语法 描述
jsp:include 在页面被请求的时候引入一个文件。
jsp:useBean 寻找或者实例化一个JavaBean。
jsp:setProperty 设置JavaBean的属性。
jsp:getProperty 输出某个JavaBean的属性。
jsp:forward 把请求转到一个新的页面。
jsp:plugin 根据浏览器类型为Java插件生成OBJECT或EMBED标记。
jsp:element 定义动态XML元素
jsp:attribute 设置动态定义的XML元素属性。
jsp:body 设置动态定义的XML元素内容。
jsp:text 在JSP页面和文档中使用写入文本的模板

JSTL 标签库
概念
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的,结构化的任务,比如迭代,条件判断,xml文件操作,国际化标签,sql标签。除了这些,还提供一个框架来使用集成JSTL的自定义标签。
JSTL的分类:
核心标签,格式化标签,sql标签,xml标签,JSTL函数
核心标签库
导入方式:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

EL 表达式
概念
expression language,主要是用来简化JSP中的表达式的代码,可以很方便的以标签的形式来代替jsp中的部分java代码,以提高代码的可读性。
语法
${el语句}
EL隐含对象
类别 | 标识符 | 描述 |
---|---|---|
JSP | pageContext | 当前页面 |
作用域 | pageScope | 页面作用域 |
requestScope | 请求作用域 | |
sessionScope | 会话作用域 | |
applicationScope | 应用程序作用域 | |
请求参数 | param | 存储请求参数 |
paramValues | 将请求参数的所有值作为String数组存储 | |
请求头 | header | 按名称存储请求头 |
headerValues | 将请求头的所有值作为String数组存储 | |
Cookie | cookie | 按名称存储请求附带的cookie |
初始化参数 | initParam | 按名称存储web应用程序上下文初始化参数 |
eg:
//java代码
ArrayList<User> lists = new ArrayList<User>();
lists.add(new User("1001","test",22));
lists.add(new User("1002","test2",33));
session.setAttribute("userList",ists);
Map<String,user> map = new HashMap<String,User>();
map.put("user1",new user("1003","test3",45));
session.setAttribute("currentUser",map);
//前端取值
//读取集合
${uesrList[0].name}<br>
${uesrList[1].name}<br>
//读取map
${currentUsr.user1.name}<br>
EL 运算符
算术运算符
算术运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
+ | 加 | ${1 + 1} | 2 |
- | 减 | ${1 - 1} | 0 |
* | 乘 | ${1*2} | 2 |
/或div | 除 | ${3/2} | 1.5 |
%或mod | 取余 | ${3%2} | 1 |
关系运算符
关系运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
== 或 eq | 等于 | 1==1 或 {1eq1} | true |
!= 或 ne | 不等于 | 1!=1 或 {1ne 1} | false |
< 或 lt | 小于 | 1 < 2 或 {1 lt 2} | true |
> 或 gt | 大于 | 1 > 2 或 {1 gt 2} | false |
<= 或 le | 小于或等于 | 1 <= 2 或 {1 le 2} | true |
>= 或 ge | 大于或等于 | 1 >= 2 或 {1 ge 2} | false |
逻辑运算符
逻辑运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
&& 或 and | 交集 | a and b | a,b为true时为true,其它情况为false |
|| 或 or | 并集 | a||b 或 aorb | a,b都为fasle时为false,其它情况为true |
! 或 not | 非 | !a 或 not a | 当a为true时,为false |
条件运算符
${表达式1?表达式2:表达式3}
验证运算符
${empty 表达式}
案例
<!--遍历recommentList-->
<c:forEach items="${list}" val="item">
${item.name}
</c:foreach>
<!--利用下标取出前4元素 status-->
<c:forEach items="${split}" val="subString" varStatus="status">
<c:if test="${status.index<4}">
<li classs=""><img src="${baseUrl}${subString}" alt="图片丢失">
</c:if>
</c:forEach>
<!--取出123-->
<c:forEach var="x" begin="1" end="${pageProductHot.extra.listPageCount}">
<a href="${baseUrl}product/jsp/index.jsp">${x}</a>
</c:forEach>
<!--取出前5个元素-->
<c:forEach items="${pageProductHot.list}" var="item" varStatus="status">
<c:if test="${(status.index) < 5}">
${item.name}
</c:if>
</c:forEach>
<!--判断字符串是否为 "" 判断是否为null -->
<c:if test="${not empty item.coverImgUrl || item.coverImgUrl eq null}">
</c:if>
<!--分隔字符串 并且判断字符串长度 -->
<c:set value="${fn:split(item.imgUrls,',')}" var="split"/>
<c:if test="${fn:length('${split}') == 1 }">
<img src="${baseUrl}${split[0]}">
<c:if test="${fn:length(item.textContentShort) > 100}"> </c:if>
</c:if>
</c:set>
SpringBoot 下JSP的使用
- 引入JSP的starter
<!--引入jstl 和内嵌tomcat,jstl是一个jsp标签集合,它封装了jsp应用的核心功能-->
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!--tomcat-embed-jasper主要是用来支持jsp解析和运行-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
2.构建jsp目录
在src下的main目录下新建webapp目录,子目录WEB-INF目录

- 配置jsp和数据库
# 端口
server.port=8081
# 设置jsp的访问目录
spring.mvc.view.prefix=/WEB-INF/jsp/
# 设置jsp文件以什么后缀结尾
spring.mvc.view.suffix=.jsp
# 配置数据库
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.name=root
spring.datasource.password=123
4.让SpringBoot项目能创建JSP文件
file --> Project Structure --> Modules -- > web -->Deployment Descriptors 添加web.xml,Web Resource Directory添加web.xml


5.创建jsp文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Spring Boot jsp</title>
</head>
<body>
welcome
你好
</body>
</html>
6.运行项目
右侧maven框选项项目下的Plugins下的SpringBoot run:

网友评论