栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

后台模板技术Thymeleaf以及Listener

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

后台模板技术Thymeleaf以及Listener

目录

关于模板的概念、优势、逻辑模型、用法等

1.模板引擎的概念:

2.模板技术的优势:

3.模板技术的逻辑模型:

4.模板技术的用法:

关于监听器(Listener)的概念、优势、逻辑模型、用法

监听器的概念:

监听器的优势:

监听器的逻辑模型:

监听器的用法:


关于模板的概念、优势、逻辑模型、用法等

1.模板引擎的概念:

模板引擎是为了解决 HTML 和 java混杂在一起的问题,将HTML的内容提取出来 放到单独的文件夹当中 ,称为模板,主要针对于一些动态的部分 ,可以将这部分动态内容在模板中使用占位符(特殊的符号占位),当服务器把这些动态的部分计算好之后,就可以把模板中的占位符替换成动态计算的结果,然后把这个组装好的HTML格式的字符串再返回给浏览器。

2.模板技术的优势:

可以使得前后端分离 ,使得代码更加的清晰,不至于让代码显得十分的臃肿繁琐。

tips:关于模板引擎的使用有很多但是主流的模板引擎为:Thymeleaf

Thymeleaf项目与其他模板引擎的最大优势,其模板文件本身也是一个格式良好的HTML文件,并且可以直接被浏览器打开。改变了在传统模板引擎下前端设计人员和后端开发人员的协作方式,能有效的提高工作效率。并且提供基于标准html5的语法。这是相较于其他模板的优势。

3.模板技术的逻辑模型:

 

4.模板技术的用法:

关于Thymeleaf的使用流程

1.通过,maven 引入依赖
​


  org.thymeleaf
  thymeleaf
  3.0.12.RELEASE

tips: 依赖导入不正确时的几种情况和解决方式: 1.先检查依赖的拼写是否正确 2.使用maven的clean、compile、package,构件success后,再invalidate Cache And Restart 3.使用 maven goal :maven——U

2.创建HTML模板文件
​
其中 Thymeleaf 模板语言的基本语法:
​
Thymeleaf中的所有语法都是以 "th:" 为开头的标签
1.设置xmlns:th = "www.thymeleaf.org"
//这步可以省略 省略之后HTML中的 Thymeleaf语法会报错但是不影响正常的使用
2.th:text="" 替换标签的文本部分
th:each="每个元素的名称:${列表}"
th:if=""    满足条件
th:unless=""  不满足条件
其他得基本为可以直接替换标签的属性,类似th:hrefth:srcth:classth:id
​
​
例如:

此处会被替换

3.编写Servlet代码
01、模板引擎
02、模板解析器
03、提供模板渲染的数据
模板文件 -》路径的形式体现-》真实需要的其实是模板文件里面的内容
模板处理之后的结果字符串
​
//@WebServlet("/template-demo")
public class TemplateDemoServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1. 创建模板引擎对象
        // TemplateEngine 是核心对象. 切实的负责模板渲染的工作.
​
​
        TemplateEngine engine = new TemplateEngine();
        ServletContext servletContext = req.getServletContext();
        
        // 2. 创建解析器对象
        // 创建解析器对象. 功能是加载 HTML 模板, 并解析
        ServletContextTemplateResolver resolver = new ServletContextTemplateResolver(servletContext);
        resolver.setTemplateMode(TemplateMode.HTML);
        
        resolver.setCharacterEncoding("utf-8");
        
        // 设置符合要求的文件要被解析器加载起来.
        //setPrefix 表示文件前缀, setSuffix 表示文件后缀.
        
        resolver.setPrefix("/WEB-INF/templates/");
        resolver.setSuffix(".html");
        resolver.setCacheable(false);
​
•        // 3. 关联解析器对象到引擎对象上
•        engine.setTemplateResolver(resolver);
​
•        // 4. 提供给模板引擎本次解析的上下文对象
•        WebContext webContext = new WebContext(req, resp, servletContext);
​
•        // 5. 准备好要放入 Context 的数据
•        List courseList = getCourseList();
•        webContext.setVariable("courseList", courseList);
​
•        // 6. 通过模板引擎生成最终的正文内容
•        String responseBody = engine.process("course-list", webContext);
​
​
•        // 7. 填充响应对象
•        resp.setCharacterEncoding("utf-8");
•        resp.setContentType("text/html");
•        resp.getWriter().println(responseBody);
•    }
​
​
•    private List getCourseList() {
•        return Arrays.asList("JavaSE", "JavaDS", "JavaDB", "JavaWeb", "JavaTest", "JavaEE");
•    }
}



    
    
    
    课程列表


    
    
           
  1.            

关于监听器(Listener)的概念、优势、逻辑模型、用法

监听器的概念:

监听某个事件的发生,状态的改变,其本质是方法的回调,在Servlet运行过程中 会有一些特殊的时机 可以让我们来执行一些我们自定义的逻辑,监听器就是让我们在特殊的时机下 插入代码

监听器的优势:

可以帮我们省略一些被反复执行的步骤,从而使得我们的代码拥有更高的效率。

监听器的逻辑模型:

 

监听器的用法:

Servlet 标准提供方法,可以在ServletContext 初始化好后执行我们的代码

1.添加@WebListener,代表得是我们写的类是一个监听器的类

2.实现SerevletContextListener 接口 我们关心的是 ServletContext 初始化和 销毁事件(更加关心初始化,对于销毁事件并没有十分关心)

3.重写contextInitialized 方法,在ServletContext初始化好后执行一些代码

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
​
//@WebListener
public class DemoListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // ServletContext 刚被初始化好后执行
        System.out.println("servlet context 刚被初始化");
        ServletContext servletContext = sce.getServletContext();
        System.out.println(servletContext.hashCode());
    }
​
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        // 销毁不关心
    }
}
@WebListener
public class ThymeleafConfig implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // 1. 创建模板引擎对象
        TemplateEngine engine = new TemplateEngine();
​
        ServletContext servletContext = sce.getServletContext();
        // 2. 创建解析器对象
        ServletContextTemplateResolver resolver = new ServletContextTemplateResolver(servletContext);
        resolver.setTemplateMode(TemplateMode.HTML);
        resolver.setCharacterEncoding("utf-8");
        resolver.setPrefix("/WEB-INF/templates/");
        resolver.setSuffix(".html");
        resolver.setCacheable(false);
​
        // 3. 关联解析器对象到引擎对象上
        engine.setTemplateResolver(resolver);
​
        // 3.5 把 引擎对象 放到 ServletContext 对象里
        servletContext.setAttribute("engine", engine);
    }
​
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
​
    }
}
​
​
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.WebContext;
​
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
​
@WebServlet("/template")
public class TemplateServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = req.getServletContext();
        // 4. 提供给模板引擎本次解析的上下文对象
        WebContext webContext = new WebContext(req, resp, servletContext);
​
        // 5. 准备好要放入 Context 的数据
        List courseList = getCourseList();
        webContext.setVariable("courseList", courseList);
​
        // 6. 通过模板引擎生成最终的正文内容
        // 3.5 从 ServletContext 对象中取出来之前放进去的 engine 对象
        TemplateEngine engine = (TemplateEngine) servletContext.getAttribute("engine");
        String responseBody = engine.process("course-list", webContext);
​
        // 7. 填充响应对象
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");
        resp.getWriter().println(responseBody);
    }
//输入的 Context
    private List getCourseList() {
        return Arrays.asList("JavaSE", "JavaDS", "JavaDB", "JavaWeb", "JavaTest", "JavaEE");
    }
}



    
    
    
    课程列表


    
    
​
​
​
​
​

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/695243.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号