IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JavaWeb第三天--Thymeleaf -> 正文阅读

[Java知识库]JavaWeb第三天--Thymeleaf

一、流程图

47CA0E8C-EF2C-4137-8E87-4E78901DE64B.png

二、代码实现

  1. 添加thymeleaf的jar包
  2. 在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>
  1. 新建一个Servlet类ViewBaseServlet
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());
    }
}
  1. Servlet继承VIewBaseServlet
// Servlet从3.0开始支持注解方式注册
    @WebServlet("/index")
public class IndexServlet extends  ViewBaseServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        FruitDAO fruitDAO = new FruitDAOImpl();
        List<Fruit> fruitList = fruitDAO.getFruitList();
        fruitList.forEach(System.out::println);
        // 保存到session中
        HttpSession session = req.getSession();
        session.setAttribute("fruitList",fruitList);
        // 视图名称是index,thymeleaf会将这个逻辑视图名称对应到 物理视图名称上去
        // 逻辑视图名称: index
        // 物理视图名称: view-prefix + 逻辑视图名称 + view-suffix
        // 所以真实的视图名称是: "/index.html "
        super.processTemplate("index",req,resp);
    }
}
  1. 用thymeleaf渲染页面
  • th:if 如果
  • th:unless 否则
  • th:each 循环
  • th:text 获取文本
<html xmlns:th="http://www.thymeleaf.org">
   <head>
      <meta charset="utf-8">
      <link rel="stylesheet" href="css/index.css">
   </head>
   <body>
      <div id="div_container">
         <div id="div_fruit_list">
            <table id="tbl_fruit">
               <tr>
                  <th class="w20">名称</th>
                  <th class="w20">单价</th>
                  <th class="w20">库存</th>
                  <th>操作</th>
               </tr>
               <tr th:if="${#lists.isEmpty(session.fruitList)}">
                  <td colspan="4">对不起,库存为空</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><img src="/fruit1.4-thymeleaf/imgs/del.jpg" class="delImg"/></td>
               </tr>
            </table>
         </div>
      </div>
   </body>
</html>

三、总结

1.编码
post提交需要设置编码,防治中文乱码
request.setCharacterEncoding("utf-8")
get提交方式,tomcat8开始,不需要设置
tomcat8之前, String fname = request.getParameter("fname");
byte[] bytes = fname.getBytes("iso-8859-1");
fname = new String(bytes,"UTF-8);
2.继承关系以及生命周期
1)Servlet接口:init、service、destroy
HttpServlet实现了service方法,通过request.getMethod判断请求方式
根据请求方式调用内部的do方法。每个do方法进行简单实现,如果请求方式不符合 报错405。
2)生命周期:实例化,初始化,服务,销毁
Tomcat负责维护Servlet实例的生命周期
每个Servlet在Tomcat容器中只有一个实例,线程不安全
Servlet启动时机--<load-on-startup>
3.HTTP协议
1)由Request和Response两部分组成
2)请求包含:请求行、请求消息头、请求主体:query String、form data、request payload
3)响应包含:响应行、响应消息头、相应主体
4.HttpSession
1)HttpSession:表示会话
2)为什么需要HttpSession:因为Http协议是无状态的
3)Session保存作用域:一次会话范围都有效
5.服务器转发和客户端重定向
1)服务器转发:request.getRequestDispatcher("index.html").forward(request,response)
2)客户端重定向:
response.sendRedirect("index.html")
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-22 20:26:08  更:2022-02-22 20:29:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:11:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码