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

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

tomcat如何進行請求信息編碼

2019-11-11 07:50:22
字體:
來源:轉載
供稿:網友

我們知道網絡傳輸的,都是二進制字節流,那么服務器如何編碼,怎么知道哪個字符集進行編碼呢,那我們深入分析下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部分源碼,也沒得要領,只能說明功力還不夠,需要繼續精進,不過合理的推導也不失為解決問題的一種好辦法。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品777| 中文字幕日韩av电影| 日韩欧美在线中文字幕| 久热爱精品视频线路一| 精品视频在线播放色网色视频| 欧美国产日韩一区二区在线观看| 日韩电影大片中文字幕| 日韩国产欧美精品一区二区三区| 91精品国产91久久久久久久久| 亚洲欧美色图片| 成人黄色网免费| 日韩中文字幕网站| 国产精品一区二区在线| 亚洲自拍在线观看| 国产91精品最新在线播放| 欧美一区二粉嫩精品国产一线天| 精品中文字幕在线| 国产成人一区二| 日本精品性网站在线观看| 欧美成人自拍视频| 欧美男插女视频| 亚洲欧美变态国产另类| 九九热这里只有在线精品视| 最新国产成人av网站网址麻豆| 日韩av免费网站| 亚洲欧美制服丝袜| 欧美成人第一页| 久久91超碰青草是什么| 午夜精品免费视频| 色综合色综合久久综合频道88| 国产精品久久久精品| www.日本久久久久com.| 国产精品美女午夜av| 日韩在线免费观看视频| 国产视频精品xxxx| 91成人性视频| 欧美激情中文字幕在线| 日韩av片电影专区| 亚洲视频axxx| 亚洲a成v人在线观看| 狠狠做深爱婷婷久久综合一区| 国产一区二区激情| 亚洲香蕉av在线一区二区三区| 色综合久综合久久综合久鬼88| 欧美高清视频在线播放| 8x拔播拔播x8国产精品| 欧美日韩在线视频观看| 91在线国产电影| 欧美丰满少妇xxxxx| 亚洲人成免费电影| 美女精品久久久| 欧美日韩一区二区免费视频| 欧美亚洲视频在线看网址| 亚洲人成在线电影| 日韩av电影国产| 亚洲人成电影网站色www| 成人激情视频免费在线| 国语自产精品视频在线看一大j8| 91久久久久久久| 情事1991在线| 欧美在线观看一区二区三区| 亚洲夜晚福利在线观看| 欧美性受xxxx白人性爽| 国产精品日韩欧美| 久久国产精品久久久久久久久久| 亚洲女人被黑人巨大进入| 亚洲丝袜一区在线| 亚洲国产精品成人精品| 欧美小视频在线观看| 欧美猛男性生活免费| 国产成人av在线| 国产午夜精品一区二区三区| 国产一区二区三区精品久久久| 国产亚洲成av人片在线观看桃| 成人a在线观看| 久久精品国产亚洲精品2020| 欧美日韩在线视频首页| 成人欧美一区二区三区黑人孕妇| 国产成人福利视频| 啊v视频在线一区二区三区| 日本欧美一二三区| 色黄久久久久久| 欧美性理论片在线观看片免费| 亚洲色在线视频| 3344国产精品免费看| 成人日韩在线电影| 国产精品福利观看| 成人黄色免费网站在线观看| 国产精品mp4| 日韩风俗一区 二区| 91久久精品一区| 国产成人a亚洲精品| 欧美老妇交乱视频| 亚洲黄色在线看| 一区二区三区 在线观看视| 国产一区二区三区中文| 国产国语videosex另类| 日本亚洲欧洲色| 久久久久久久久久国产精品| 国模精品系列视频| 欧美日韩在线视频一区二区| 2019中文字幕在线免费观看| 久久色精品视频| 中文字幕久热精品在线视频| 色综合色综合网色综合| 欧美性生交xxxxx久久久| 亚洲精品国产精品自产a区红杏吧| 久久久久久久久久久成人| 91精品国产自产91精品| yw.139尤物在线精品视频| 久久久亚洲福利精品午夜| 国产精品香蕉国产| 亚洲成色999久久网站| www.国产精品一二区| 国产精品久久久久久一区二区| 欧美日韩一区二区三区在线免费观看| 国产成人精品久久| 久久久久久网站| 日韩欧美精品在线观看| 精品偷拍一区二区三区在线看| 日韩中文字幕不卡视频| 国产欧美精品一区二区三区-老狼| 亚洲精品网址在线观看| 欧美电影《睫毛膏》| 日韩中文视频免费在线观看| 一区二区三区日韩在线| 精品福利在线看| 亚洲第一精品夜夜躁人人爽| 亚洲欧美成人精品| 亚洲男人的天堂网站| 亚洲精品福利资源站| 国产精品视频一区二区高潮| 亚洲伦理中文字幕| 亚洲娇小xxxx欧美娇小| 欧美夜福利tv在线| 国产成人精品视| 日韩电影免费观看在线| 日韩h在线观看| 亚洲国产小视频在线观看| 91av在线网站| 亚洲精品美女视频| 欧美激情免费看| 亚洲一区制服诱惑| 色偷偷88888欧美精品久久久| 亚洲日韩欧美视频一区| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲成av人片在线观看香蕉| …久久精品99久久香蕉国产| 操人视频在线观看欧美| 国产成人精品视频在线观看| 国产成人精品亚洲精品| 欧美激情中文网| 亚洲成av人影院在线观看| 日本不卡视频在线播放| 久久久爽爽爽美女图片| 国产亚洲人成网站在线观看| 成人av电影天堂| 色偷偷偷综合中文字幕;dd| 国产精品老牛影院在线观看| 亚洲伊人一本大道中文字幕| 亚洲综合中文字幕在线观看| 国模吧一区二区| 最近2019中文字幕第三页视频| 欧美激情视频给我|