zoukankan      html  css  js  c++  java
  • springmvc配置过滤器时,访问html页面出现乱码问题

    在学习springmvc的时候,在jsp页面使用post的方式提交表单,然后就出现乱码了,于是使用springmvc提供的过滤器进行过滤,过滤器代码如下:

     2     <filter>
     3         <filter-name>characterEncodingFilter</filter-name>
     4         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class
     6         <init-param>
     7             <param-name>encoding</param-name>
     8             <param-value>utf-8</param-value>
     9         </init-param>
    18         <init-param>
    19             <param-name>forceRequestEncoding</param-name>
    20             <param-value>true</param-value>
    21         </init-param>
    24         <init-param>
    25             <param-name>forceResponseEncoding</param-name>
    26             <param-value>true</param-value>
    27         </init-param>
    28     </filter>
    29     <filter-mapping>
    30         <filter-name>characterEncodingFilter</filter-name>
    31         <!--
    32         /*:表示强制所有的请求先通过过滤器处理
    33         参考视频地址:https://www.bilibili.com/video/BV1sk4y167pD?p=17
    34         -->
    35         <url-pattern>/*</url-pattern>
    36     </filter-mapping>

    值得注意的是,我的html页面也是指定了utf-8的编码的。html页面的代码如下:

     1 !DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="utf-8">
     5     <title>这是一个静态页面</title>
     6 </head>
     7 <body>
     8     这是一个静态页面
     9 </body>
    10 </html>

    但是启动服务器访问就是乱码,我单独将这个文件使用浏览器打开,页面是没有乱码的。这说明应该是我服务器配置的问题。

    通过查阅资料,将过滤器的forceResponseEncoding去掉即可,也就是不强制响应头使用utf-8的编码。具体的原因还是有点懵逼,但是我看了很多人的代码

    他们配置过滤器的时候,是不会配置forceResponseEncoding、forceRequestEncoding的,也就是使用最多的是一下的过滤器代码:

    2     <filter>
     3         <filter-name>characterEncodingFilter</filter-name>
     4         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class
     6         <init-param>
     7             <param-name>encoding</param-name>
     8             <param-value>utf-8</param-value>
     9         </init-param>
    28     </filter>
    29     <filter-mapping>
    30         <filter-name>characterEncodingFilter</filter-name>
    31         <!--
    32         /*:表示强制所有的请求先通过过滤器处理
    33         参考视频地址:https://www.bilibili.com/video/BV1sk4y167pD?p=17
    34         -->
    35         <url-pattern>/*</url-pattern>
    36     </filter-mapping>

      至于为什么强制了响应头response的编码方式,访问html页面会造成乱码,这具体的原因还是不知道。以后使用springmvc配置的时候,如果配置过滤器就要留点心了。我在网上也找到了和我一样问题的人,参考博客地址:

    https://blog.csdn.net/Knightletter/article/details/108394048?utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase

    这是我使用第一种处理静态资源的方法处理出现的问题,也就是由springmvc转发给tomcat默认的servlet处理静态资源的方式。

    第二种方式的,是使用springmvc自带的ResourceHttpRequestHandler这个处理器对象进行处理,也就是在springmvc的配置文件中加入以下配置:

     <mvc:resources mapping="/static/**" location="/static/"/>

    这里我将所有的静态资源都放在了一个名为static文件夹下,如下图所示:

      这样就可以避免配置多个<mvc:resources了。并且第二种方式就算过滤器的response强制了编码,访问静态页面的时候还是不会乱码的。并且第二种方法更加符合实际开发的使用。所以处理springmvc处理静态资源文件的话,都是建议使用第二种方式。

    参考视频地址:https://www.bilibili.com/video/BV1sk4y167pD?p=38

  • 相关阅读:
    QT生成流水账号
    Qt实现端口扫描器
    Qtablevies获取内容
    Qt中暂停线程的执行
    Qt经典出错信息之undefined reference to `vtable for classname
    Qt中 QString 和int, char等的“相互”转换
    caffe实现自己的层
    获取minist数据并转换成lmdb
    命名空间下接类,比如common.cpp
    caffe这个c++工程的目录结构
  • 原文地址:https://www.cnblogs.com/ljfsmile0613/p/13881522.html
Copyright © 2011-2022 走看看