SpringMVC整合Thymeleaf中文乱码问题,html代码显示不全

16 篇文章 1 订阅
9 篇文章 0 订阅


前言

SpringMVC和Thymeleaf组合在一起的问题,比较冷门,一般遇到的也比较少。因为大家在SSM阶段技术选型的时候,一般会选用jsp,学校老师也是这么教的。
一般在SpringBoot阶段用到Thymeleaf模板引擎比较多,而且SpringBoot还有专门的Thymeleaf的启动器,帮我们省去了不少配置。

但是我在搭建个人博客时,想练习一下SSM,又想摒弃jsp技术,就结合了一下Thymeleaf。但是发现了不少的问题:

一、如何编写SpringMVC的配置文件?

这里对xml进行讨论,笔者用的是xml配置。
一开始我是照着《Spring实战(第四版)》进行配置,书上是这么说的:
在这里插入图片描述
首先看到这里使用了p命名空间,p命名空间注入的特点是使用属性而不是子元素的形式配置Bean的属性,从而简化了配置代码。

要使用p命名空间,要在xml的开头添加约束:
xmlns:p=“http://www.springframework.org/schema/p”

但是照着这段代码敲完后,出现的第一个问题是新版本的Spring(Spring5),不认识ServletContextTemplateResolver。

而且解析页面现了中文乱码的问题,所有中文都变成了问号(?)。经过网上多方寻求解决方案,最终确定了如下配置:

代码如下:

<!--
        Spring对thymeleaf支持  Spring实战第四版 P192
        前提:导入pom.xml关于thymeleaf的坐标 而且别忘了加上版本号!!!!!
    -->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver"
          p:templateEngine-ref="templateEngine"
          p:characterEncoding="UTF-8"
    />
    <bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine"
          p:templateResolver-ref="templateResolver"/>
    <!--
        下面这个bean不能完全照着Spring实战配 会出问题.我搜了一下网上的大神有解决方案:
        解决方案我已经收藏在csdn的收藏夹里面了
        https://blog.csdn.net/qq_31782587/article/details/73550504

        然后又冒出了一个巨大的坑,卡了我2小时! 就是thymeleaf集成springMVC, 走controller之后会出现中文乱码!!
        看https://www.cnblogs.com/zhi-leaf/p/10594353.html  解决方案在这里面
        其实就是配置2次 p:characterEncoding="UTF-8" (自己搜索这句话,在哪里配置了2次)
    -->
    <bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"
          p:prefix="/WEB-INF/pages/"
          p:suffix=".html"
          p:templateMode="HTML5"
          p:characterEncoding="UTF-8"
    />

二、启动服务器之后,页面html的代码显示不全

问题的描述是,我的一个页面,启动之后发现页面内容显示不全,右键查看网页源代码,发现源代码根本就没显示完全,而是从中间截断了,只显示了三分之一不到的行数,拉进度条死活拉不下去了。

如下图所示,在浏览器中查看源代码,发现显示到这就到此为止了。
在这里插入图片描述
后来我通过注释掉一些代码,精准找到了问题的原因:

在idea中代码是这样的:

<div class="ui inverted link list">
     <a class="item m-text-lined" th:each="newBlog,iter:${newBlogs}" th:href="@{'/page_blog/'+${newBlog.getId()}}" th:text="${newBlog.getTitle()}">博客1</a>
</div>

到浏览器时,代码却是这样的:
在这里插入图片描述
发现里面的a标签以及里面的 th:(thymeleaf相关代码)居然被浏览器给吃了?!

那么问题就迎刃而解了,其实是Thymeleaf的报错,这个th字段里面的东西出错了,编译器也报红了,我没注意,所以就出现了这么个奇葩问题。
在这里插入图片描述

总结

使用冷门技术栈组合难免会遇到各种各样的问题,不过大都是配置上的,之前用SpringBoot给我们屏蔽掉太多配置细节了,换回SSM的方式,简直是配置地狱。不过解决这些问题之后,业务代码的开发流程和SpringBoot别无二致。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值