ftl idea 乱码

ftl idea 乱码

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">
<servlet>
<servlet-name>freemarker</servlet-name>
<servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
<init-param>
<param-name>TemplatePath</param-name>
<param-value>/WEB-INF/ftl</param-value>
</init-param>
<init-param>
<param-name>default_encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>

</servlet>
<servlet-mapping>
<servlet-name>freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping>

</web-app>

http://img1.sycdn.imooc.com//climg/60d2e349091ec0cb09380373.jpg


必须要增加这个红色框里面的代码才能保证ftl不乱码


请老师回答一下 一个servlet中为啥要设置两个init-param 初始化参数呢?


解决乱码看了好多问答,老师给的解决方案完全没用,希望老师尝试后再给解答



正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小班 2021-06-23 18:00:17

同学你好,1、增加如下代码并不能完全保证不出现乱码,还会有其他因素的影响

http://img1.sycdn.imooc.com//climg/60d3051f0901ad8506320176.jpg

    ​2、在servlet中初始化参数可以设置多个,这里一个是配置ftl的路径的,一个配置编码的

http://img1.sycdn.imooc.com//climg/60d3033f0910edfb08450324.jpg

    ​3、编码是因为书写和解析时编码不一致导致的,所以并不能直接确定是由于哪里的编码不同导致的乱码问题,只能一点一点排查。

同学说的是页面中ftl文件展示在浏览器中的乱码吧

如果是,同学可以检查一下自己的servlet文件和ftl文件编码是不是UTF-8,以及在servlet中添加如下这个编码语句。

request.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("UTF-8");

同学使用如下内容,修改后清理缓存,重新启动tomcat再来试试。

<servlet>
  <servlet-name>freemarker</servlet-name>
  <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
  <init-param>
    <param-name>TemplatePath</param-name>
    <param-value>/WEB-INF/ftl</param-value>
  </init-param>
  <init-param>
    <param-name>DefaultEncoding</param-name>
    <param-value>UTF-8</param-value>
  </init-param>
</servlet>

祝学习愉快~

  • 提问者 一娆Hacker #1

    同学说的是页面中ftl文件展示在浏览器中的乱码吧

    如果是,同学可以检查一下自己的servlet文件和ftl文件编码是不是UTF-8,以及在servlet中添加如下这个编码语句。

    request.setCharacterEncoding("UTF-8");

    response.setCharacterEncoding("UTF-8");



    老师 是ftl中的乱码,servlet和ftl结合是后面的步骤

    我当时只做测试 单纯访问ftl (这是一个ftl页面)都会出现乱码

    request.setCharacterEncoding("UTF-8");

    response.setCharacterEncoding("UTF-8");

    所以加这两个没用的


    之前清理缓存和设置utf-8的方法我都尝试过了,在其他回答中看到的,但是其他同学也说这些都没用


    只有加了红框内的初始化参数中文才不会乱码

    2021-06-23 20:05:38
  • 好帮手慕小班 回复 提问者 一娆Hacker #2

    同学你好,1、request.setCharacterEncoding("UTF-8");和response.setCharacterEncoding("UTF-8");是设置请求和响应的编码。

        2、而web.xml中的DefaultEncoding是设置freemarker的编码,TemplatePath是设置freemarker的模板路径,所以这些都是freemarker的配置,所以配置了DefaultEncoding后,freemarker文件不乱码了。

    祝学习愉快~


    2021-06-24 11:21:52
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师