1.介绍
既能够正常显示页面,又能在页面中包含动态数据部分。
此时我们需要引入服务器端动态视图模板技术。
MVC架构
MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范,是将业务逻辑、数据、显示分离的方法来组织代码
MVC主要作用是降低了视图与业务逻辑间的双向偶合。
MVC不是一种设计模式,MVC是一种架构模式。
M o d e l ModelModel(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao) 和 服务层(行为Service)。也就是该模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
V i e w ViewView(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
C o n t r o l l e r ControllerController(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。
视图
hymeleaf会将这个 逻辑视图 对应到 物理视图 上去
物理视图
初步理解为:那个需要包含动态数据的静态网页
名称 | 作用 | 注意 |
视图前缀 | 路径开头的部分 | 一般是路径 |
试图后缀 | 路径结尾的部分 | 一般是后缀名 |
逻辑视图
初步理解为:那个静态网页的文件名(不加后缀)
例子
视图 | 例子 |
视图名称 | index |
物理视图名称 | index |
逻辑视图名称 | view-prefix + 逻辑视图名称 + view-suffix |
视图前缀 | 逻辑视图 | 视图后缀 | 物理视图 |
/pages/user/ | login | .html | /pages/user/login.html |
/pages/user/ | login_success | .html | /pages/user/login_success.htm |
<!-- 在上下文参数中配置视图前缀和视图后缀 -->
<context-param
> <param-name>view-prefix</param-name>
<param-value>/WEB-INF/view/</param-value>
</context-param>
<context-param>
<param-name>view-suffix</param-name>
<param-value>.html</param-value>
</context-param>
HelloWorld
1.创建index.html 2.在index.html编写超链接
<a href="/view/TestThymeleafServlet">初步测试Thymeleaf</a>
3.创建Servlet
<servlet>
<servlet-name>TestThymeleafServlet</servlet-name>
<servlet-class>com.atguigu.thymeleaf.servlet.TestThymeleafServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestThymeleafServlet</servlet-name>
<url-pattern>/TestThymeleafServlet</url-pattern>
</servlet-mapping>
4.修改Servlet继承的父类
5.在doGet()方法中跳转到Thymeleaf页面
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.声明当前请求要前往的视图名称 String viewName = "target";
// 2.调用ViewBaseServlet父类中的解析视图模板的方法
super.processTemplate(viewName, request, response);
}
Thymeleaf
什么是Thymeleaf
Thymeleaf 是一个适用于 Web 和独立环境的现代服务器端 Java 模板引擎,能够处理 HTML、XML、JavaScript、CSS 甚至纯文本。 Thymeleaf 的主要目标是提供一种优雅且高度可维护的模板创建方式。 为了实现这一目标,它建立在自然模板的概念之上,以不影响模板用作设计原型的方式将其逻辑注入模板文件中。 这改善了设计沟通并弥合了设计和开发团队之间的差距。 Thymeleaf 从一开始就考虑到了 Web 标准(尤其是 HTML5),允许您根据需要创建完全验证的模板
优势
SpringBoot官方推荐使用的视图模板技术,和SpringBoot完美整合。
不经过服务器运算仍然可以直接查看原始值,对前端工程师更友好。
标准表达式语法
变量表达式: ${ ... }
选择变量表达式: * { ... }
消息表达式: # { ... }
链接 URL 表达式:@{ ... }
片段表达式: ~ { ... }
表达式基本对象
在计算上下文变量上的 OGNL 表达式时,一些对象可用于表达式以获得更高的灵活性。这些对象将被引用(按照 OGNL 标准) ,从 # 符号开始:
ctx: 上下文对象。
vars: 上下文变量。
locale: 上下文 locale。
Request: (仅在 Web 上下文中) HttpServletRequest 对象。
Response: (仅在 Web 上下文中) HttpServletResponse 对象。
Session: (仅在 Web 上下文中) HttpSession 对象。
servletContext: (仅在 Web 上下文中) ServletContext 对象。
表达式实用对象
除了这些基本对象之外,Thymeleaf 还将为我们提供一组实用对象,帮助我们在表达式中执行常见任务。
execInfo:有关正在处理的模板的信息。
#messages:用于获取变量表达式内的外部化消息的方法,其方式与使用 #{…} 语法获取消息的方式相同。
uris:转义部分 URL/URI 的方法
conversions:用于执行配置的转换服务(如果有)的方法。
dates:java.util.Date 对象的方法:格式化、组件提取等。
calendars:类似于#dates,但用于 java.util.Calendar 对象。
numbers:格式化数字对象的方法。
strings:String 对象的方法:包含、startsWith、前置/附加等。
objects:一般对象的方法。
bools:布尔求值方法。
arrays:数组的方法。
lists:列表方法。
sets:集合方法。
maps:地图方法。
aggregates:在数组或集合上创建聚合的方法。
ids:处理可能重复的 id 属性的方法(例如,作为迭代的结果)。
变量表达式不仅可以写成 ${ ... } ,还可以写成 * { ... }。
但是有一个重要的区别: 星号语法计算选定对象上的表达式,而不是整个上下文上的表达式。也就是说,只要没有选定的对象,美元和星号语法就完全相同。
什么是被选择的对象?使用 th: object 属性的表达式的结果。让我们在我们的用户配置文件(userprofile.html)页面中使用一个
基本语法:th名称空间
th:text作用
不经过服务器解析,直接用浏览器打开HTML文件,看到的是『标签体原始值』
经过服务器解析,Thymeleaf引擎根据th:text属性指定的『标签体新值』去替换
执行表达式
Servlet代码:
request.setAttribute("reqAttrName", "<span>hello-value</span>");
页面代码:
<p>有转义效果:[[${reqAttrName}]]</p>
<p>无转义效果:[(${reqAttrName})]</p>
执行效果:
<p>有转义效果:<span>hello-value</span></p>
<p>无转义效果:<span>hello-value</span></p>