摘要:在開(kāi)發(fā)應(yīng)用的時(shí)候經(jīng)常會(huì)遇到令人頭痛的字符編碼問(wèn)題,期中一個(gè)就是客戶(hù)端發(fā)送過(guò)來(lái)的請(qǐng)求的編碼在請(qǐng)求頭里并沒(méi)有,開(kāi)發(fā)人員需要在后端自己選擇合適的來(lái)解析過(guò)來(lái)的參數(shù)。但是這里有個(gè)陷阱,整個(gè)應(yīng)用里,這個(gè)的攔截順序必須是第一個(gè),否則還是會(huì)出現(xiàn)亂碼問(wèn)題。
在開(kāi)發(fā)java web應(yīng)用的時(shí)候經(jīng)常會(huì)遇到令人頭痛的字符編碼問(wèn)題,期中一個(gè)就是客戶(hù)端發(fā)送過(guò)來(lái)的請(qǐng)求的編碼在請(qǐng)求頭里并沒(méi)有,開(kāi)發(fā)人員需要在后端自己選擇合適的encoding來(lái)解析request過(guò)來(lái)的參數(shù)。
這個(gè)問(wèn)題的解決辦法很簡(jiǎn)單,就是寫(xiě)一個(gè)filter來(lái)過(guò)濾所有請(qǐng)求,然后設(shè)置一下request的characterEncoding,比如:
public class CharacterEncodingFilter implements Filter { protected String encoding = "utf-8"; public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding(encoding); chain.doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException { String initEncoding = filterConfig.getInitParameter("encoding"); if (Strings.isNotBlank(initEncoding)) { this.encoding = initEncoding; } } public void destroy() { encoding = null; } }
把這個(gè)filter在web.xml里配置一下所攔截的url pattern就行了。
但是這里有個(gè)陷阱,整個(gè)web應(yīng)用里,這個(gè)filter的攔截順序必須是第一個(gè),否則還是會(huì)出現(xiàn)亂碼問(wèn)題。這是因?yàn)椋ㄖ辽僭趖omcat里):
request對(duì)象的parameter并不是一開(kāi)始就解析的,它是等你第一次調(diào)用getParameter*等凡和獲得請(qǐng)求參數(shù)有關(guān)的方法的時(shí)候才解析的
paramter一旦被解析過(guò)一次,那就不會(huì)再次被解析
所以如果在CharacterEncodingFilter之前有另外一個(gè)filter,而這個(gè)filter調(diào)用了getParameter*方法,那么就有可能使用錯(cuò)誤的encoding來(lái)解析,從而造成亂碼問(wèn)題。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65026.html
摘要:在開(kāi)發(fā)應(yīng)用的時(shí)候經(jīng)常會(huì)遇到令人頭痛的字符編碼問(wèn)題,期中一個(gè)就是客戶(hù)端發(fā)送過(guò)來(lái)的請(qǐng)求的編碼在請(qǐng)求頭里并沒(méi)有,開(kāi)發(fā)人員需要在后端自己選擇合適的來(lái)解析過(guò)來(lái)的參數(shù)。但是這里有個(gè)陷阱,整個(gè)應(yīng)用里,這個(gè)的攔截順序必須是第一個(gè),否則還是會(huì)出現(xiàn)亂碼問(wèn)題。 在開(kāi)發(fā)java web應(yīng)用的時(shí)候經(jīng)常會(huì)遇到令人頭痛的字符編碼問(wèn)題,期中一個(gè)就是客戶(hù)端發(fā)送過(guò)來(lái)的請(qǐng)求的編碼在請(qǐng)求頭里并沒(méi)有,開(kāi)發(fā)人員需要在后端自己選擇...
摘要:在開(kāi)發(fā)應(yīng)用的時(shí)候經(jīng)常會(huì)遇到令人頭痛的字符編碼問(wèn)題,期中一個(gè)就是客戶(hù)端發(fā)送過(guò)來(lái)的請(qǐng)求的編碼在請(qǐng)求頭里并沒(méi)有,開(kāi)發(fā)人員需要在后端自己選擇合適的來(lái)解析過(guò)來(lái)的參數(shù)。但是這里有個(gè)陷阱,整個(gè)應(yīng)用里,這個(gè)的攔截順序必須是第一個(gè),否則還是會(huì)出現(xiàn)亂碼問(wèn)題。 在開(kāi)發(fā)java web應(yīng)用的時(shí)候經(jīng)常會(huì)遇到令人頭痛的字符編碼問(wèn)題,期中一個(gè)就是客戶(hù)端發(fā)送過(guò)來(lái)的請(qǐng)求的編碼在請(qǐng)求頭里并沒(méi)有,開(kāi)發(fā)人員需要在后端自己選擇...
摘要:在開(kāi)發(fā)應(yīng)用的時(shí)候經(jīng)常會(huì)遇到令人頭痛的字符編碼問(wèn)題,期中一個(gè)就是客戶(hù)端發(fā)送過(guò)來(lái)的請(qǐng)求的編碼在請(qǐng)求頭里并沒(méi)有,開(kāi)發(fā)人員需要在后端自己選擇合適的來(lái)解析過(guò)來(lái)的參數(shù)。但是這里有個(gè)陷阱,整個(gè)應(yīng)用里,這個(gè)的攔截順序必須是第一個(gè),否則還是會(huì)出現(xiàn)亂碼問(wèn)題。 在開(kāi)發(fā)java web應(yīng)用的時(shí)候經(jīng)常會(huì)遇到令人頭痛的字符編碼問(wèn)題,期中一個(gè)就是客戶(hù)端發(fā)送過(guò)來(lái)的請(qǐng)求的編碼在請(qǐng)求頭里并沒(méi)有,開(kāi)發(fā)人員需要在后端自己選擇...
摘要:第一次寫(xiě)技術(shù)文章,主要內(nèi)容是使用創(chuàng)建一個(gè)簡(jiǎn)單的項(xiàng)目,如有操作或理解錯(cuò)誤請(qǐng)務(wù)必指出,當(dāng)謙虛學(xué)習(xí)?;舅枷肫鋵?shí)就是一個(gè)項(xiàng)目引用別的模塊包,最終項(xiàng)目被打成包發(fā)布。 第一次寫(xiě)技術(shù)文章,主要內(nèi)容是使用maven創(chuàng)建一個(gè)簡(jiǎn)單的SpringMVC WEB 項(xiàng)目,如有操作或理解錯(cuò)誤請(qǐng)務(wù)必指出,當(dāng)謙虛學(xué)習(xí)。做這一次的工作主要是因?yàn)橄爰訌?qiáng)一下自己對(duì)Spring Web 項(xiàng)目的理解,因?yàn)槠綍r(shí)都是直接寫(xiě)業(yè)務(wù)代...
閱讀 2814·2019-08-30 15:55
閱讀 2861·2019-08-30 15:53
閱讀 2299·2019-08-26 13:47
閱讀 2562·2019-08-26 13:43
閱讀 3161·2019-08-26 13:33
閱讀 2809·2019-08-26 11:53
閱讀 1801·2019-08-23 18:35
閱讀 805·2019-08-23 17:16