Servlet 整合Thylemeaf (基于Maven构建)

本文介绍了如何在web项目中逐步弃用JSP,转而采用Thymeleaf作为视图模板。通过详细步骤展示了Thymeleaf与Maven的整合过程,包括在pom.xml中添加依赖,配置web.xml的视图前缀和后缀,以及创建Thymeleaf的工具类。此外,还提供了一个Servlet示例,演示了如何在实际应用中处理Thymeleaf视图。
摘要由CSDN通过智能技术生成

      由于JSP的种种原因,现在web项目中视图层逐步转向视图模板:FreeMarker、Thylemeaf等,但是关于Thylemeaf的使用基本都是基于和Spring、SpringMVC 整合的,也有部分基于Servlet整合的(基于jar文件的形式),最近由于教学需要,和技术更新等web课程部分逐步弱化JSP,而去强化Maven和Thylemeaf,所以进行了Thylemeaf和Maven的整合,这对充分了解Thylemeaf和web相关的内容会有一个更深的了解,对于后面的内容也有一定的帮助。首先需要pom.xml文件需要导入thylemeaf的依赖:

 <dependency>
          <groupId>org.thymeleaf</groupId>
          <artifactId>thymeleaf</artifactId>
          <version>3.0.15.RELEASE</version>
 </dependency>

web.xml文件配置(视图的前缀和后缀)

   <context-param>
        <param-name>prefix</param-name>
        <param-value>/WEB-INF/view/</param-value>
    </context-param>
    
    <context-param>
        <param-name>suffix</param-name>
        <param-value>.html</param-value>
    </context-param>

Thylemeaf的工具类(主要完成对页面进行渲染前的准备工作)


import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.WebContext;
import org.thymeleaf.templatemode.TemplateMode;
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;

/**
 * Thymeleaf 视图处理
 * @author TonySong
 */
public class ThymeleafViewServlet extends HttpServlet {

    private TemplateEngine templateEngine;

    @Override
    public void init() throws ServletException {
        //获取ServletContext对象
        ServletContext servletContext = this.getServletContext();
        //创建Thymeleaf解析对象
        ServletContextTemplateResolver templateResolver =
                new ServletContextTemplateResolver(servletContext);
         //设置模板模式为HTML
        templateResolver.setTemplateMode(TemplateMode.HTML);
        //从web.xml文件获取视图的前缀
        String prefix = servletContext.getInitParameter("prefix");
        System.out.println("prefix>>>>>>>>>>>>>"+prefix);
        templateResolver.setPrefix("/WEB-INF/view/");
        //获取后缀
        String suffix = servletContext.getInitParameter("suffix");
        System.out.println("suffix....>"+suffix);
        templateResolver.setSuffix(".html");
        //关闭缓存
        templateResolver.setCacheable(false);
        //设置编码方式
        templateResolver.setCharacterEncoding("utf-8");
        //实例化视图引擎
        this.templateEngine = new TemplateEngine();
        //设置视图引擎为templateResolver
        this.templateEngine.setTemplateResolver(templateResolver);
    }

    protected void processTemplate(String templateName, HttpServletRequest req, HttpServletResponse resp) throws IOException,ServletException{
          resp.setContentType("text/html;charset=utf-8");
          req.setCharacterEncoding("utf-8");
          //根据请求对象和响应对象和全局对象创建web上下文全局对象
          WebContext context = new WebContext(req, resp, getServletContext());
          //根据模板名称和全局对象并依据响应输出流来渲染页面: 前缀+名称+后缀 /WEB-INF/view/list.html
          this.templateEngine.process(templateName,context,resp.getWriter());
    }
}

Servlet:

@WebServlet( urlPatterns = {"/list"})
public class HelloServlet extends ThymeleafViewServlet {

    private StudentDao studentDao = new StudentDaoImpl();

    protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String currentPage=req.getParameter("currentPage");
        Pager<Student> pager=  this.studentDao.pageList(currentPage, 5);
        pager.setUrl("list");
        req.setAttribute("pager", pager);
        this.processTemplate("list", req, resp);
    }
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                String path = req.getServletPath();
                switch (path){
                    case "/list": this.list(req, resp);break;
                }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值