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

文章目录

  • 前言
  • 一、如何编写SpringMVC的配置文件?
  • 二、启动服务器之后,页面html的代码显示不全
  • 总结


前言

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。

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

代码如下:


    <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 id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"
          p:prefix="/WEB-INF/pages/"
          p:suffix=".html"
          p:templateMode="HTML5"
          p:characterEncoding="UTF-8"
    />

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

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

如下图所示,在浏览器中查看源代码,发现显示到这就到此为止了。
SpringMVC整合Thymeleaf中文乱码问题,html代码显示不全_第1张图片
后来我通过注释掉一些代码,精准找到了问题的原因:

在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()}">博客1a>
div>

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

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

总结

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

你可能感兴趣的:(SSM,debug专题,前端,乱码,springmvc,前端,debug)