ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaWeb学习-Thymeleaf

2022-07-15 14:03:32  阅读:184  来源: 互联网

标签:JavaWeb templateResolver 视图 学习 Thymeleaf import servlet javax 模板


Thymeleaf:视图模板技术

Thymeleaf是一个供后端人员使用的,为快速开发页面而生的Java模板引擎,能够动态地替换掉静态内容,使页面动态显示。

(模板引擎(用于Web开发)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。)

(1)添加JAR包

(2)新建一个Servlet类ViewBaseServlet

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;

public class ViewBaseServlet extends HttpServlet {

    private TemplateEngine templateEngine;

    @Override
    public void init() throws ServletException {

        // 1.获取ServletContext对象
        ServletContext servletContext = this.getServletContext();

        // 2.创建Thymeleaf解析器对象
        ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(servletContext);

        // 3.给解析器对象设置参数
        // ①HTML是默认模式,明确设置是为了代码更容易理解
        templateResolver.setTemplateMode(TemplateMode.HTML);

        // ②设置前缀
        String viewPrefix = servletContext.getInitParameter("view-prefix");

        templateResolver.setPrefix(viewPrefix);

        // ③设置后缀
        String viewSuffix = servletContext.getInitParameter("view-suffix");

        templateResolver.setSuffix(viewSuffix);

        // ④设置缓存过期时间(毫秒)
        templateResolver.setCacheTTLMs(60000L);

        // ⑤设置是否缓存
        templateResolver.setCacheable(true);

        // ⑥设置服务器端编码方式
        templateResolver.setCharacterEncoding("utf-8");

        // 4.创建模板引擎对象
        templateEngine = new TemplateEngine();

        // 5.给模板引擎对象设置模板解析器
        templateEngine.setTemplateResolver(templateResolver);

    }

    protected void processTemplate(String templateName, HttpServletRequest req, HttpServletResponse resp) throws IOException {
        // 1.设置响应体内容类型和字符集
        resp.setContentType("text/html;charset=UTF-8");

        // 2.创建WebContext对象
        WebContext webContext = new WebContext(req, resp, getServletContext());

        // 3.处理模板数据
        templateEngine.process(templateName, webContext, resp.getWriter());
    }
}

(3)在web.xml中添加配置

<!-- 在上下文参数中配置视图前缀和视图后缀 -->
<context-param>
    <param-name>view-prefix</param-name>
    <param-value>/</param-value>
</context-param>
<context-param>
    <param-name>view-suffix</param-name>
    <param-value>.html</param-value>
</context-param>

(4)我们的Servlet继承ViewBaseServlet

根据逻辑视图获得真实视图名称


@WebServlet("/index")
public class IndexServlet extends ViewBaseServlet {
    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        FruitDAO fruitDAO = new FruitDAOImpl();
        List<Fruit> fruitList = fruitDAO.getFruitList();
        System.out.println("fruitList.size() = " + fruitList.size());
        HttpSession session = request.getSession();
        session.setAttribute("fruitList",fruitList);

        Object fr = session.getAttribute("fruitList");
        System.out.println("fr = " + fr);


        //处理模板(视图名称,request,response)
        //thymeleaf 会将这个逻辑视图名称对应到物理视图名称上去,
        //逻辑视图名称:  index
        //物理视图名称:  view-prefix + 逻辑视图名称 + view-suffix
        //真实视图名称:       /           index        .html
        super.processTemplate("index",request,response);
    }
}

(5)页面使用Thymeleaf标签获取数据

<div>
    <table>
        <tr>
            <th>名称</th>
            <th>单价</th>
            <th>数量</th>
            <th>备注</th>
        </tr>
        <tr th:if="${#lists.isEmpty(session.fruitList)}"><!--判断集合是否为空-->
            <td>库存为空!</td><!--为空输出语句-->
        </tr>
        <tr th:unless="${#lists.isEmpty(session.fruitList)}" th:each="fruit : ${session.fruitList}">
            <!--集合不为空,循环输出-->
            <td th:text="${fruit.fname}"></td>
            <td th:text="${fruit.price}"></td>
            <td th:text="${fruit.fcount}"></td>
            <td th:text="${fruit.remark}"></td>
        </tr>
    </table>
</div>

标签:JavaWeb,templateResolver,视图,学习,Thymeleaf,import,servlet,javax,模板
来源: https://www.cnblogs.com/Joyce-mi7/p/16481131.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有