1. 程式人生 > 其它 >Tomcat裡面靜態資源亂碼怎麼解決?比如引入layui的時候,layui的中文提示亂碼,還有一系列靜態資源中文亂碼的完美解決方案

Tomcat裡面靜態資源亂碼怎麼解決?比如引入layui的時候,layui的中文提示亂碼,還有一系列靜態資源中文亂碼的完美解決方案

技術標籤:基礎細節java亂碼tomcat

如果在SSM裡面,如果是你自己專案的web.xml裡面沒設定編碼為UTF-8或者自己的靜態資源編碼對應不上響應的編碼,這種簡單的就不說了

我之前用tomcat9老是發現layui裡面的中文提示亂碼,搞了半天沒搞出來,明明檔案編碼是utf8,響應編碼也是,為什麼就會亂碼呢?

解決方案:

找到本地tomcat所有的路勁,找到裡面/conf/web.xml,找到default那個servlet

<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <!--新增上這個,預設是沒有這個的-->
        <init-param>
            <param-name>fileEncoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

解釋:

1. 預設沒有指定字元編碼,需要指定字元編碼(注意:是tomcat下面的web.xml,不是你自己專案的web.xml)

有人可能好奇,這個default是啥哦?

我們如果在自己專案的web.xml裡面配置了url-pattern為 / ,就代表:我們會把我們所有的請求給DispatcherServlet處理,包括靜態和動態的,我們會發現靜態的請求404,動態的沒問題

因為DispatcherServlet 根本沒有處理靜態資源的能力,然後我們如何解決?

找到springmvc.xml的配置檔案新增 :<mvc:default-servlet-handler/> (加了這個配置必須新增 <mvc:annotation-driven/>因為這個配置和RequestMapping會有衝突,新增它了可以解決)

<mvc:default-servlet-handler/> 這個註解建立DefaultServletRequestHandler來處理靜態資源,這個DefaultServletRequestHandler類似於我們自己寫的Controller,把靜態資源交給tomcat/conf/web.xml裡面的defaultServlet處理

所以,因為這個defaultServlet沒指定編碼,所以靜態資源會亂碼。