国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Servlet解決參數(shù)亂碼問題

2019-11-14 23:44:29
字體:
供稿:網(wǎng)友
Servlet解決參數(shù)亂碼問題為什么會產(chǎn)生亂碼?

之所以會產(chǎn)生亂碼,是由于服務(wù)器端和客戶端的編碼方式不一致造成的??蛻舳伺c服務(wù)器端的交互過程中,存在著兩次數(shù)據(jù)交換:第一次,客戶端向服務(wù)器端發(fā)起請求,第二次數(shù)據(jù)交換,服務(wù)器端響應(yīng)客戶端的請求后做出應(yīng)答,將處理結(jié)果返回給客戶端。

前提了解,無論服務(wù)器端是在接受數(shù)據(jù)還是在返回數(shù)據(jù)時,如果不指定其數(shù)據(jù)編碼格式,那么他就會以其默認(rèn)的“iso8859-1”來編碼?! ?/p>首先看客戶端向服務(wù)器端發(fā)出請求:

  客戶端的頁面以何種編碼方式打開某個頁面,通過http協(xié)議發(fā)送請求給服務(wù)器端時,就以何種編碼方式將提交數(shù)據(jù)轉(zhuǎn)換成其對應(yīng)的二進制數(shù)來進行http傳輸。這個編碼方式是在頁面制作時已經(jīng)指定了的,最常見的是做一個html文件時通過<meta http-equiv="content-type" content="text/html; charset=UTF-8">指定編碼格式為utf8。那么,在服務(wù)器端接受這些數(shù)據(jù)時就要通過utf8來將這些二進制數(shù)據(jù)進行解碼。如果用其他的編碼方式,比如gbk來解碼,就會出現(xiàn)亂碼。

  舉例:客戶端傳輸“北京”兩個字給服務(wù)器端,如果頁面打開時是utf-8格式,那么就會以utf8來將“北京”轉(zhuǎn)化成其對應(yīng)的二進制數(shù)A:1000100111001010(瞎編的),在服務(wù)器端接收時,如果沒有指定以utf8來接受這個二進制流A,那么服務(wù)器以其默認(rèn)編碼格式ISO8859-1來解碼A,以為不同的編碼方式對應(yīng)的碼表不一樣,同樣是1000100111001010,ISO8859-1可能解析不出來相應(yīng)的字符,那么就會以?或者亂碼來代替,然后輸出,這是我們就看到了亂碼。

  所以我們要做的就是統(tǒng)一兩邊的編碼格式,在服務(wù)器端以客戶端頁面的編碼格式來解析傳過來的二進制數(shù)據(jù)流。可在servlet的doGet()和doPost()方法中作如下操作:

頁面以get方法提交表單:

處理GET 提交方法的servlet 中的doGet()方法

    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {                String username = request.getParameter("username");        username = new String(username.getBytes("iso8859-1"),"utf-8");//將接收來的二進制數(shù)據(jù)流以iso8859-1解碼再轉(zhuǎn)換成utf-8        System.out.PRintln(username);    }

對于doPost()方法,代碼如下

    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {                //解決post方法提交數(shù)據(jù)中的亂碼問題        //        request.setCharacterEncoding("utf-8");//將解碼方式設(shè)為來源網(wǎng)頁的編碼方式即可,這句話加在這個方法的第一句        String add = request.getParameter("address");        System.out.println(add);           }

再看服務(wù)器端向客戶端返回數(shù)據(jù)

  原理基本上同客戶端向服務(wù)器端發(fā)送請求,要做到兩邊編碼方式一致。做法就是在服務(wù)器響應(yīng)時,第一,設(shè)置客戶端相應(yīng)的http協(xié)議它的數(shù)據(jù)輸出編碼格式為指定的格式(假如utf8);第二將要輸出的數(shù)據(jù)以utf8格式編碼。

public class RequestAllexampleServlet2 extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {                response.setContentType("text/html;charset=utf-8");//設(shè)置http輸出格式        response.setCharacterEncoding("utf-8");//設(shè)置字符編碼格式        response.getWriter().write("北京");    }

訪問這個Servlet結(jié)果為:


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 浙江省| 抚宁县| 龙江县| 西华县| 巴青县| 石台县| 东阿县| 土默特右旗| 嘉兴市| 堆龙德庆县| 白河县| 军事| 台南县| 阿坝县| 常宁市| 正阳县| 汾阳市| 湘潭县| 钟山县| 和林格尔县| 岫岩| 司法| 无棣县| 全椒县| 璧山县| 元谋县| 和静县| 博乐市| 科技| 灵山县| 咸丰县| 安义县| 友谊县| 得荣县| 大丰市| 萍乡市| 大丰市| 离岛区| 交城县| 永德县| 神农架林区|