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

2021-07-08 15:07:48 浏览数 (1)

目录

  • SpringMVC的编码过滤器配置
    • 浏览器服务器交互的编码格式介绍
      • 问题:
      • 解决
    • SpringMVC的编码过滤器配置
  • SpringMVC的静态资源放行
    • SpringMVC的Dispatcher的拦截范围问题
      • 问题:
      • 解决:
      • SpringMVC的静态资源放行配置

SpringMVC的编码过滤器配置

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

问题:

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

解决

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

后端解决接收后的数据

代码语言:javascript复制
String uname = request.getParameter("uname");
String uname2=new String(uname.getBytes("iso-8859-1"),"utf-8");

返回给前端的数据

代码语言:javascript复制
resp.setCharacterEncoding(“utf-8”)
   resp.setContentType(“text/html;charset=utf-8”)

SpringMVC的编码过滤器配置

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

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

代码语言:javascript复制
 <!--配置编码过滤器-->
    <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的静态资源放行配置

代码语言:javascript复制
   <!--配置静态资源放行-->
<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.也就说,不要设置某个单元方法的路径和静态资源的路径 是一致,这样就算配置了静态资源放行,也会导致静态资源无法访问的问题。

0 人点赞