Thymeleaf 教程

杂货店网站

为了更好地解释用 Thymeleaf 处理模板所涉及的概念,本教程将使用一个演示应用程序,你可以从项目的网站上下载。

这个应用程序是一个想象中的虚拟杂货店的网站,它将为我们提供许多场景来展示 Thymeleaf 的许多功能。

首先,我们需要为我们的应用程序建立一套简单的模型实体。产品(Products),通过创建订单(Orders)出售给客户(Customers)。我们还将管理关于这些产品(Products)的评论(Comments)。

我们的应用程序还将有一个非常简单的服务层,由包含以下方法的服务对象组成:

public class ProductService {
    //...
    public List<Product> findAll() {
        return ProductRepository.getInstance().findAll();
    }

    public Product findById(Integer id) {
        return ProductRepository.getInstance().findById(id);
    }
}

在 Web 层,我们的应用程序将有一个过滤器,根据请求的 URL,将执行委托给支持的 Thymeleaf 命令。

private boolean process(HttpServletRequest request, HttpServletResponse response)
        throws ServletException {
    try {
        // 这可以防止触发引擎对资源URL的执行
        if (request.getRequestURI().startsWith("/css") ||
                request.getRequestURI().startsWith("/images") ||
                request.getRequestURI().startsWith("/favicon")) {
            return false;
        }

        /*
         * 查询控制器/URL映射并获得控制器来处理这个请求。
         * 如果没有控制器可用。返回 false,并让其他过滤器/Servlets处理该请求。
         */
        IGTVGController controller = this.application.resolveControllerForRequest(request);
        if (controller == null) {
            return false;
        }

        /*
         * 获取 TemplateEngine 实例。
         */
        ITemplateEngine templateEngine = this.application.getTemplateEngine();

        /*
         * 设置响应头
         */
        response.setContentType("text/html;charset=UTF-8");
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);

        /*
         * 执行控制器和处理视图模板,将结果写入响应器。
         */
        controller.process(request, response, this.servletContext, templateEngine);
        return true;
    } catch (Exception e) {
        try {
            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        } catch (final IOException ignored) {
            // Just ignore this
        }
        throw new ServletException(e);
    }
}

这是我们的 IGTVGController 接口:

public interface IGTVGController {
    public void process(
            HttpServletRequest request, HttpServletResponse response,
            ServletContext servletContext, ITemplateEngine templateEngine);    
}

我们现在要做的就是创建 IGTVGController 接口的实现,从服务中检索数据,并使用 ITemplateEngine 对象处理模板。

最后,它将看起来像这样:

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号