亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

tomcat如何進行請求信息編碼

2019-11-14 08:54:44
字體:
來源:轉載
供稿:網友

我們知道網絡傳輸的,都是二進制字節流,那么服務器如何編碼,怎么知道哪個字符集進行編碼呢,那我們深入分析下tomcat連接,仔細探討下。 接下來,我們看一下段代碼,這是一個很簡單的表單。

<form action="demo01?name=中國" method="post"> <input type="text" name="name1" value="張三"/> <input type="submit" value="提交"/> </form>

controller中,我們直接用 HttpServletRequest,不用sPRing獲取參數。

@RequestMapping(value = "/demo01", method = RequestMethod.GET) public String dologin1(HttpServletRequest request) throws UnsupportedEncodingException { log.info(request.getCharacterEncoding()); log.info("name:中國" + request.getParameter("name")); log.info("name1:張三" + request.getParameter("name1")); return "login";}

運行tomcat,結果如下,中文亂碼: 這里寫圖片描述 我們用fiddler查看請求的詳情: 這里寫圖片描述 我們來經過測試下:

@Test public void test() throws UnsupportedEncodingException { String str = "中國"; byte[] bytes = str.getBytes("utf-8"); System.out.println(Hex.encodeHex(bytes)); System.out.println(new String(bytes, "iso8859-1")); String str1 = "張三"; byte[] bytes1 = str1.getBytes("utf-8"); System.out.println(Hex.encodeHex(bytes1)); System.out.println(new String(bytes1, "iso8859-1")); }

打印如下:

e4b8ade59bbdiso8859-1編碼: ??-???e5bca0e4b889?? ??‰

由此,可以發現,我使用的谷歌瀏覽器,默認使用的中文編碼為utf-8,而tomcat編碼默認的是iso8859-1編碼,由于編碼對應的字符不同,所以造成亂碼。 既然有編碼問題,那么肯定可以解決,查看tomcat手冊 發現tomcat連接器可以指定uri編碼,參數URIEncoding:This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used. 在server.xml中配置如下:

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" URIEncoding="utf-8" redirectPort="8443"/>

此時運行tomcat,uri參數問題解決,結果如下: 這里寫圖片描述

那請求體參數如何進行編碼呢?我們查看servelt源碼發現,請求體的編碼可以在獲取參數前進行設置,由此猜想,tomcat解析請求體參數是在第一次使用時進行解析,也不難理解,字符串解析是耗性能的,既然不需要使用,那么不用解析,同樣就不用消耗這部分性能。

/** * Overrides the name of the character encoding used in the body of this * request. This method must be called prior to reading request parameters * or reading input using getReader(). Otherwise, it has no effect. * * @param env <code>String</code> containing the name of * the character encoding. * @throws UnsupportedEncodingException if this * ServletRequest is still in a state where a * character encoding may be set, but the specified * encoding is invalid */ public void setCharacterEncoding(String env) throws UnsupportedEncodingException;

改變controller代碼,增加utf-8編碼:

@RequestMapping(value = "/demo01", method = RequestMethod.POST) public String dologin(HttpServletRequest request) throws UnsupportedEncodingException { request.setCharacterEncoding("utf-8"); log.info(request.getCharacterEncoding()); log.info("name:中國" + request.getParameter("name")); log.info("name1:張三" + request.getParameter("name1")); return "login"; }

運行tomcat,發現編碼問題完美解決: 這里寫圖片描述 難道每次獲取參數前都要設置編碼嗎?肯定有更省事的方式,那就是過濾器,且我們可以直接用spring提供的現成的,org.springframework.web.filter.CharacterEncodingFilter,查看其代碼:

@Override protected void doFilterInternal( HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) { request.setCharacterEncoding(this.encoding); if (this.forceEncoding) { response.setCharacterEncoding(this.encoding); } } filterChain.doFilter(request, response); }

發現也就是設置request編碼而已,沒什么神秘的,不過既然有現成的,我們何必再造輪子 呢。 沒有從tomcat源碼中分析出問題有些遺憾,查看了tomcat部分源碼,也沒得要領,只能說明功力還不夠,需要繼續精進,不過合理的推導也不失為解決問題的一種好辦法。


上一篇:骨牌鋪方格

下一篇:Spring

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情aaaa| 欧美中文字幕在线播放| 中文字幕亚洲无线码a| 懂色av影视一区二区三区| 久久久久久久久久久91| 日韩电影网在线| 国产精品嫩草视频| 日本国产高清不卡| 成人福利在线观看| 自拍偷拍亚洲精品| 国产精品一区电影| 中国人与牲禽动交精品| 国产精品99久久99久久久二8| 亚洲a级在线播放观看| 国产日韩欧美日韩大片| 亚洲自拍在线观看| 亚洲午夜未满十八勿入免费观看全集| 国产高清视频一区三区| 91精品久久久久久综合乱菊| 久久久久久久久久久成人| 中文字幕亚洲一区在线观看| 亚洲精品欧美日韩专区| 久久网福利资源网站| 欧美精品一二区| 国产欧美一区二区三区在线| 久久精品中文字幕一区| 中文字幕在线视频日韩| 在线视频一区二区| 91精品国产高清| 久久久精品美女| 欧美性开放视频| 日本欧美在线视频| 97成人在线视频| 日韩美女视频免费在线观看| 亚洲日韩中文字幕| 国产精品极品在线| 在线色欧美三级视频| 国产精品极品美女在线观看免费| 欧美在线免费视频| 国产欧美在线观看| 欧美亚洲国产成人精品| 欧美日韩国产成人| 久久91精品国产91久久跳| 亚洲欧美第一页| 美女999久久久精品视频| 91在线观看免费| 日韩av免费在线播放| 欧美夜福利tv在线| 国产精品嫩草影院久久久| 欧美中文字幕在线观看| 亚洲午夜国产成人av电影男同| 8x海外华人永久免费日韩内陆视频| 亚洲自拍偷拍色片视频| 亚洲免费成人av电影| 夜色77av精品影院| 成人免费视频在线观看超级碰| 欧美国产日韩在线| 这里只有精品在线观看| 国产女人精品视频| 欧洲日本亚洲国产区| 欧美成人在线网站| 欧美插天视频在线播放| 欧美精品18videos性欧| 日韩精品中文字幕视频在线| 日韩中文av在线| 欧美激情按摩在线| 日韩精品免费一线在线观看| 欧美最猛性xxxxx免费| 亚洲国产精品久久久久秋霞不卡| 在线视频一区二区| 欧美日韩综合视频| 中文字幕国产亚洲2019| 热久久这里只有| 亚洲国产91精品在线观看| 亚洲国产福利在线| 国产精品久久99久久| 韩曰欧美视频免费观看| 日韩欧美精品免费在线| 国产香蕉97碰碰久久人人| 亚洲欧美日韩国产中文| 亚洲免费视频在线观看| 日韩电影中文字幕| 日韩欧美中文字幕在线播放| 国产精品av在线| 欧美性猛交xxxx黑人| 亚洲精品成人久久久| 国产精品免费一区豆花| 成人国产亚洲精品a区天堂华泰| 亚洲精品视频播放| 97福利一区二区| 国产精品高潮在线| 国产精品青草久久久久福利99| 亚洲精美色品网站| 久久久精品一区| 国产欧美精品一区二区三区介绍| 狠狠久久亚洲欧美专区| 欧美老少做受xxxx高潮| 欧美三级xxx| 亚洲精品视频网上网址在线观看| 萌白酱国产一区二区| 亚洲精品一区中文| 姬川优奈aav一区二区| 欧美性极品xxxx做受| 91精品视频大全| 国产91免费看片| 久久久国产视频91| 91系列在线观看| 91精品综合久久久久久五月天| 日韩av在线一区二区| 欧美性猛交xxxx久久久| 26uuu久久噜噜噜噜| 欧美日韩精品二区| 精品国产乱码久久久久久虫虫漫画| 国产精品av在线| 欧美性理论片在线观看片免费| 亚洲免费av片| 亚洲国产精品va| 欧美多人爱爱视频网站| 77777亚洲午夜久久多人| 伊人久久综合97精品| 中文字幕亚洲字幕| 亚洲人成电影网站色| 欧美影院在线播放| 性欧美视频videos6一9| 亚洲美女av电影| 91嫩草在线视频| 国模精品视频一区二区三区| 亚洲sss综合天堂久久| 97视频在线看| 亚洲日韩第一页| 日韩成人在线电影网| 三级精品视频久久久久| 日韩激情片免费| 美女久久久久久久久久久| 国外成人免费在线播放| 久久久女女女女999久久| 91精品国产91久久久久久| 欧美做爰性生交视频| xxxx欧美18另类的高清| 777精品视频| 欧美日韩在线视频首页| 精品毛片三在线观看| 久久香蕉国产线看观看网| 欧美日韩在线看| 亚洲欧洲自拍偷拍| 国产午夜精品全部视频在线播放| 国内精品视频在线| 国产精品亚洲аv天堂网| 亚洲第一色中文字幕| 日韩中文字幕免费看| 亚洲精品久久久久中文字幕二区| 国产精品爽爽爽| 成人疯狂猛交xxx| 欧美成人精品在线| 亚洲国产精品资源| 欧美多人爱爱视频网站| 亚洲综合成人婷婷小说| 欧美超级免费视 在线| 国产精品盗摄久久久| 日韩视频中文字幕| 国产精品免费一区| 久久久www成人免费精品| 久久久在线免费观看| 亚洲 日韩 国产第一|