1. 程式人生 > >基於tomcat的java web專案的請求響應的編解碼問題

基於tomcat的java web專案的請求響應的編解碼問題

在一開始寫java web專案的時候,基本上每個人都不可避免地會遇到亂碼的問題,一般我們的解決方法都是這樣的:百度一下java web亂碼的常用解決方法,然後根據症狀找最符合的一個個去試,然後ok完事,然而等到下一次出現相同問題的時候,又得去翻資料。如此治標不治本,實在浪費了我們不少時間,所以還不如花點時間理解透徹這個知識點,以後就不用頭疼了。

要說編解碼這個問題,還得從http請求響應報文的內容說起,我就用最常見的Get和Post請求來說明:

GET請求的HTTP報文格式如下:

GET 請求地址(包括請求引數QueryString) 協議

請求頭

POST請求的HTTP報文格式如下:

POST 請求地址  協議

請求頭

<!--空行-->

請求體

而我們的web應用的編解碼就用於請求地址和請求體。顯而易見,GET請求引數的編解碼與請求地址的編解碼相關,POST請求引數的編解碼與請求體的編解碼相關。所以如果是GET請求出現亂碼,需要修改URL的解碼字符集,如在tamcat應用中修改server.xml的URIEncoding屬性:

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

而如果是POST請求出現亂碼,則要通過requset.setCharacterEncoding()去設定相應的編碼器,這樣request.getParameter()就會根據你設定的編碼器進行解碼(注意在設定編碼器之前獲取引數會使編碼無效)。在spring mvc中可以直接使用過濾器進行統一編碼。喜歡思考的同學會問了,我如何知道瀏覽器對url和請求體的編碼格式了?首先對於url的編碼格式,我只能很抱歉地說的確無法知道,這是由瀏覽器自身決定的,不同瀏覽器使用的不同的編碼方方式,但是所幸現在的主流瀏覽器都基本使用統一的編碼方式——UTF-8,所以我們只要設定URIEncoding=UTF-8,一般就不會出現問題了。而瀏覽器對請求體的編碼,我們就可以掌控了,因為這是由我們伺服器決定的。servlet中的response.setCharactEncoding方法或者esponse.setContentType方法(關於這兩個方法的區別,可以點選

這裡,話說設定contentType會使響應頭攜帶編碼資訊,瀏覽器可以根據這個編碼,這點我可以理解,但是設定characterEncoding是沒有編碼的頭資訊的,那瀏覽器是如何得知的呢?這點讓我很納悶)就是來告訴瀏覽器對響應內容的解碼方式以及傳送請求的編碼方式的,所以,我們只要使用request.setCharactEncoding和response.setCharacterEncoding設定統一的編碼方式,就不會出現亂碼的問題了。

總結:

1.如果url傳參或者表單get請求亂碼就設定web伺服器對url的解碼方式;

2.如果post請求出現亂碼就將requset和response設定為統一的characterEncoding。    

 如果到這裡大家還是不能理解出現亂碼的問題所在那也沒關係,只要全部設定utf-8就行啦。

相關推薦

關於Tomcat上請求解碼問題

tomcat 編碼最近翻閱《深入分析 Java Web 技術內幕》(作者:許令波),關於Tomcat上Web請求的編解碼問題,少了一個小點,可能影響了部分讀者的理解,我特意查證了一下,特總結如下:1. 請求的PathInfo部分用Tomcat的Connector元素的URIEncoding屬性指定的編碼來解碼

使用Spring Request-Reply實現基於Kafka的同步請求響應

proc relation 發布 hash exce def template 同步 服務器 圖片描述(最多50字)大家提到Kafka時第一印象就是它是一個快速的異步消息處理系統,不同於通常tomcat之類應用服務器和前端之間的請求/響應方式請求,客戶端發出一個請求,必然

CAS4.0.3服務的搭建實戰一【基於普通web專案

一、從官網下載對應的war包 1.地址一:https://github.com/apereo/cas/releases/tag/v4.0.3 2.地址二:http://central.maven.org/maven2/org/jasig/cas/cas-server-webapp/4.0

關於GET和POST請求解碼問題

  一、問題:        編碼問題是JAVA初學者在web開發過程中經常會遇到問題,網上也有大量相關的文章介紹,但其中很多文章並沒有對URL中使用了中文等非ASCII的字 符造成伺服器後臺程式解析出現亂碼的問題作出準確的解釋和說明。本文將詳細介紹由於在URL中使用

web專案請求路徑與專案名稱不同

可以在下圖位置,進行修改 也可以修改專案的路徑下的.settings資料夾下的org.eclipse.wst.common.component的value屬性 <property name=

spring mvc自定義過濾器filter實現對請求引數解碼的程式碼

百度,google了半天即使再萬能的stackoverflow上也沒有得到解答,今天偶然間發現springmvc註解@RequestParam不是通過HttpServletRequest.java的getParameter(String name)方法得到的引數值,而

從安裝作業系統開始,一步一步詳細的基於spring web專案建立與釋出

1.centos7 安裝 software selection選擇server with gui 設定centos鎖屏時間:Application→System Tools→Settings→Privacy→close→Screen Lock→ Lock Screen

cookie學習心得,基於java web專案的登入驗證

背景介紹: 1、cookie的由來: web開發中,儲存web瀏覽狀態的一種方式,http請求是無狀態的, 當用戶在傳送一個請求關得到返回資訊之後,客戶端與伺服器端之間的網路連線就已經斷開了, 在下一個請求傳送時,伺服器無法確定這次請求和上次的請求是否來自同一個客戶端。

基於tomcat的java web專案請求響應解碼問題

在一開始寫java web專案的時候,基本上每個人都不可避免地會遇到亂碼的問題,一般我們的解決方法都是這樣的:百度一下java web亂碼的常用解決方法,然後根據症狀找最符合的一個個去試,然後ok完事,然而等到下一次出現相同問題的時候,又得去翻資料。如此治標不治本,實在浪

開發基於protostuff解碼技術的Netty程序:傳輸pojo對象

tcp ons blog 1.3 object類 end 換來 序列化 ray [toc] 開發基於protostuff編解碼技術的Netty程序:傳輸pojo對象 前言 這次開發的Netty程序主要是在網絡中傳輸Java對象,傳輸的對象不僅限於字符串,也可以是自定義的其

基於Maven構建Web專案

1.下載Maven,並配置好環境變數 2.開啟命令列視窗,輸入以下命令構建Maven Web專案 mvn archetype:generate -DgroupId=com.hello -DartifactId=HelloWorld -DarchetypeArtifactId=maven-archetype

IDEA 基於Maven的springboot+jsp搭建web專案完整流程

話不多說直接上乾貨(本文章適合新手快速上手)。 一丶新建maven spring boot 專案 next 下一步 選擇 web 建立完的目錄如下,新建一個webapp資料夾然後建一個pages包用來放jsp檔案 配置pox.xml <

《Gradle構建SpringBoot學習筆記》第二章:建立基於Gradle構建的Spring Boot Web專案

1.生成初始化專案 通過 SpringBoot 官方提供的 Spring Initializr初始化一個Web專案,網址為https://start.spring.io/,瀏覽器開啟該網址顯示如下 選擇構建Gradle Project,語言選擇Java,Spr

Spring boot + Mybatis(基於xml配置方式) WEB專案

一.工具(idea) 二.建立專案 最後finish; 3.配置與編寫demo     目錄: 3.1 springBoot配置檔案:application.yml;也可使用properties檔案 spring: #資料來源配置 datas

史上最全的基於ffmpeg+sdl網路攝像頭解碼播放資料(包含交叉編譯過程,附帶完整原始碼)

原創博文,嚴禁私自轉載,轉載請註明出處!!! 近期,由於工作需要,要在開發板上跑一個攝像頭,攝像頭款式比較老,不支援rtsp格式,所以選擇編譯ffmpeg+sdl實現軟解碼播放攝像頭,特此記錄整個編譯過程(非常之艱辛,發文留念) 在ubuntu上交叉編譯環境的搭建:因為開發板上搭建的程式的執

java web專案介面請求get,post請求引數中文亂碼解決

java web專案介面請求get,post請求引數中文亂碼解決 在開發過程中,有時候會碰到get,post請求引數中文亂碼。 原因:  Http請求傳輸時將url以ISO-8859-1編碼,伺服器收到位元組流後預設會以ISO-8859-1編碼來解碼成字元

何暉光:“深度學習類腦嗎?”--- 基於視覺資訊解碼的深度學習類腦機制研究 | VALSE2017之十四

點選上方“深度學習大講堂”可訂閱哦!編者按:深度學習中最經典的卷積神經網路,其命名的初衷,即是向

基於Springboot框架 web專案 真實路徑對映到虛擬url路徑的實現

最近有一個需求 前提是很不靠譜的需求 最後一定會刪掉重做的 但是要現在湊合用的  就是用springboot的框架 搭建的一個web專案 因為springboot是自帶tomcat的 所以會打包成jar包 放到伺服器上部署 問題就是說 我們需要在伺服器上 建立一個資料夾 來存放

基於springcloud構建一個web專案

日子還很長,技術沉澱得一步步的來。先會用,然後再看實現原理 本篇部落格有點長,個人覺得還是比較細緻,希望對入手spring cloud的朋友能有所幫助 本來一直都想實踐一下zookeeper的,但是看了一篇關於CAP的討論之後,我還是選擇Eureka作為服務發現與服務治理的軟體。一個

使用STS建立基於maven的java web專案

1.工具版本      2.建立Maven Web專案: 2.1用STS建立Maven結構的web專案,選擇Artifact Id為maven-artchetype-webapp如圖所示: 2.2專案建好後如圖所示: 3.調整專案字元編碼為UTF-8 右鍵專案,開啟P