很多在學習jsp的時候遇到亂碼的問題吧,解決方案其實很簡單,自訂一個字元攔截器即可。
為了不耦合在業務代碼中,我們應該將字元轉碼獨立出來,做成一個字元攔截器
直接上代碼:
package com.jdbc.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CharacterFilter implements Filter {private FilterConfig config;public void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) resp;// 從web.xml檔案中擷取encoding對應的init-param中的param-valueString encoding = config.getInitParameter("encoding");// 只要定義了變數;就要判斷是否為空白;不然會報null 指標異常if (encoding != null) {// 指明內容請求格式的字元編碼集response.setContentType("text/html ;charset=" + encoding);// 請求時規範字元編碼格式request.setCharacterEncoding(encoding);// 指明輸出的格式字元編碼集response.setCharacterEncoding(encoding);}// 進入下一個攔截器chain.doFilter(request, response);}// FilterConfig 是攔截器的全域變數public void init(FilterConfig config) throws ServletException {this.config = config;}public void destroy() {}}
接下來要讓請求先進入字元攔截器中,在web.xml檔案中配置
<!-- 字元編碼集攔截器 --> <filter> <filter-name>CharacterFilter</filter-name> <filter-class>com.jdbc.filter.CharacterFilter</filter-class> <!-- 配置初始化參數 --> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <!-- 映射路徑 --> <filter-mapping> <filter-name>CharacterFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
以上便是字元攔截器,獨立於業務代碼,只需要copy到項目中即可。
一點點學習,一點點成長,有什麼疑問和建議可以留言,我會及時處理。
更多乾貨等你來拿 http://www.itit123.cn/