Java Servlet 模板引擎集成:使用 Thymeleaf 创建 ViewBaseServlet
下面是一个示例的 ViewBaseServlet 类,其中在 init() 方法中创建了 Thymeleaf 模板引擎,并在 processTemplate() 方法中处理模板数据:
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.WebContext;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class ViewBaseServlet extends HttpServlet {
private TemplateEngine templateEngine;
@Override
public void init() throws ServletException {
ServletContext servletContext = getServletContext();
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(servletContext);
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");
templateResolver.setCharacterEncoding("UTF-8");
templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
}
protected void processTemplate(HttpServletRequest request, HttpServletResponse response, String templateName)
throws ServletException, IOException {
WebContext webContext = new WebContext(request, response, getServletContext(), request.getLocale());
templateEngine.process(templateName, webContext, response.getWriter());
}
}
在这个示例中,我们创建了一个名为 ViewBaseServlet 的基础 Servlet 类,它将实现模板引擎的创建和模板数据的处理。在 init() 方法中,我们创建了一个 ServletContextTemplateResolver 对象,设置了模板文件的位置和后缀,并指定了字符编码。然后,我们创建一个 TemplateEngine 对象,并设置模板解析器。
在 processTemplate() 方法中,我们首先创建了一个 WebContext 对象,用于传递请求、响应和 ServletContext 等信息给模板引擎。然后,我们使用 templateEngine.process() 方法来处理模板数据,将模板名称和 WebContext 作为参数传递给模板引擎,同时将渲染后的结果通过 response.getWriter() 写入响应。
在具体的 Servlet 类中,你可以继承 ViewBaseServlet,并在 doGet() 或 doPost() 方法中调用 processTemplate() 方法来处理模板数据。例如:
public class ProductServlet extends ViewBaseServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 处理业务逻辑...
// 渲染商品列表模板
processTemplate(request, response, "product-list");
}
// 其他方法...
}
在上述示例中,我们在 ProductServlet 中的 doGet() 方法中处理了一些业务逻辑,然后通过调用 processTemplate() 方法来渲染名为 'product-list' 的模板。
请注意,模板文件(例如 'product-list.html')应该位于 WEB-INF/templates/ 目录下,这是由 ViewBaseServlet 中的 ServletContextTemplateResolver 设置的前缀和后缀决定的。你可以根据实际情况进行调整。另外,确保 Thymeleaf 的依赖已经正确添加到项目的依赖中。
原文地址: https://www.cveoy.top/t/topic/jqL 著作权归作者所有。请勿转载和采集!