前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习springMVC(三)SpringMVC的编码过滤器配置, SpringMVC的静态资源放行(看不懂你打我)

深度学习springMVC(三)SpringMVC的编码过滤器配置, SpringMVC的静态资源放行(看不懂你打我)

作者头像
一写代码就开心
发布2021-07-08 15:07:48
1K0
发布2021-07-08 15:07:48
举报
文章被收录于专栏:java和pythonjava和python

目录

SpringMVC的编码过滤器配置

浏览器服务器交互的编码格式介绍

问题:

在浏览器和服务器的数据交互流程中,处理英文数据以外还有中文数据。 浏览器发起的请求数据中包含中文,服务器响应的数据包含中文。而浏览器 默认的编码格式为iso-8859-1,也就说浏览器默认发送给服务器的请求数据的 编码格式为iso-8859-1。同理,服务器响应给浏览器的数据,浏览器在接受到后 会按照iso-8859-1的编码格式来进行解码获取数据。但是tomcat服务器使用的 编码格式为utf-8,这样造成,浏览器发起的请求数据在服务器端使用utf-8的格式 接收出现乱码,服务器响应的utf-8类型的数据被浏览器解析时出现乱码。一旦出 现乱码问题,一定是编码格式和解码格式不一致造成的,怎么办?

在这里插入图片描述
在这里插入图片描述

解决

客户不会解决这个问题。所以格式需要在服务器端进行解决

后端解决接收后的数据

String uname = request.getParameter("uname");
String uname2=new String(uname.getBytes("iso-8859-1"),"utf-8");

返回给前端的数据

resp.setCharacterEncoding(“utf-8”)
   resp.setContentType(“text/html;charset=utf-8”)

SpringMVC的编码过滤器配置

每个方法里面进行解决,不好,我们要统一解决这个问题,所以使用过滤器

在项目的web.xml文件中配置SpringMVC官方提供的编码过滤器即可。

在这里插入图片描述
在这里插入图片描述
 <!--配置编码过滤器-->
    <filter>
        <filter-name>code</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <!--设置编码格式-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <!--设置编码格式的生效范围-->
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>code</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

SpringMVC的静态资源放行

SpringMVC的Dispatcher的拦截范围问题

问题:

按照SpringMVC的使用流程,需要在web.xml文件中配置DispatcherServlet 的拦截范围,而我们配置的拦截范围为”/”,表示拦截除jsp请求以外的所有请求。 这样造成,请求是js,css,图片等静态资源的请求,也会被DispatcherServlet拦截 ,调用对应的单元方法来处理请求。但是,我们呢是一个静态资源的请求,不应该 按照普通单元方法请求的流程来处理,而是将对应的静态资源响应给浏览器使用。 怎么办?

解决:

①将DispatcherServlet的底层逻辑进行变更,静态资源的请求就不要作为 单元方法请求处理,而是查找对应的资源响应给浏览器。

在SpringMVC的配置文件中配置静态资源的放行,告诉DispatcherServlet 哪些资源静态资源需要放行,将静态资源响应给了浏览器。

SpringMVC的静态资源放行配置

在这里插入图片描述
在这里插入图片描述
   <!--配置静态资源放行-->
<mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
<mvc:resources mapping="/css/**" location="/css/"></mvc:resources>
<mvc:resources mapping="/images/**" location="/images/"></mvc:resources>

注意: 浏览器发起静态资源请求,DispatcherServlet会先按照正常的单元方法逻辑 进行处理,如果找不到对应的单元方法,则根据SpringMVC的配置文件的静 态资源,判定此次请求是否为静态资源请求,如果是则将资源响应给浏览器,如 果不是,则响应404.也就说,不要设置某个单元方法的路径和静态资源的路径 是一致,这样就算配置了静态资源放行,也会导致静态资源无法访问的问题。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-07-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • SpringMVC的编码过滤器配置
    • 浏览器服务器交互的编码格式介绍
      • 问题:
      • 解决
    • SpringMVC的编码过滤器配置
    • SpringMVC的静态资源放行
      • SpringMVC的Dispatcher的拦截范围问题
        • 问题:
        • 解决:
        • SpringMVC的静态资源放行配置
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档