解決策は、にある二回コーディングフロントデスク、背景は一度デコードすることができます。
レセプションJSPファイル
1つのVARのテキスト= "张三" 。 3 VARのユーザ名= encodeURI(encodeURI(テキスト));
背景サーブレットコード
1文字列名= URLDecoder.decode( "対応するフィールド"、 "UTF-8") 。
簡単なログイン検証例。
ケース説明:バックエンドのコンソール中国のゴミ問題が解決されたAjaxリクエストを確認するには。
シンプルなログイン画面、ユーザー名は、ユーザー名を入力するように要求された場合は、ユーザー名のログインを入力し、「ユーザー名は空にすることはできません」ではありません。「ジョン・ドウ」と入力したユーザー名は、すでに他のノーヒントによって占められたユーザー名を求められた場合。
フロントページのindex.jsp
1 <%- 2 のIntelliJ IDEAによって作成。 3 ユーザー:hejjon 4 日:2019 / 6 / 3 5 時間:10 :19 6は するには、このテンプレートを使用するファイルを変更します| 設定| ファイルのテンプレート。 7 - %> 8 <%@ページのcontentType = " text / htmlの;のcharset = UTF-8 " 言語= " Javaの" %> 9 <% 10 文字列のパス=request.getContextPath(); 11 列basePathを= request.getScheme()+ " :// " + request.getServerName()+ " :" + request.getServerPort() 12 + パス+ " / " 。 13 %> 14 < HTML > 15 < ヘッド> 16 < 基地HREF = "<%= basePathを%>" > 17 < タイトル>用户登录界面<> 18 < スクリプトタイプ= "テキスト/ javascriptの" > 19 のvar XHR。 20 関数の変化(){ 21 22 のvar ヴァル= のdocument.getElementById(" のuname " ).VALUE。 23 のVaR のuname = encodeURI(encodeURI(ヴァル))。 24 25 であれば(のuname === "" ){ 26 のdocument.getElementById(" namespan " ).innerHTML = " 用户名不能为空" 。 27 } 他{ 28 // オブジェクトがXHR作成 29 XHR = 新しい新規のXMLHttpRequest(); 30 //は、サーバとの接続を確立 31は xhr.openを(" GET " 、" のuname =ログイン/サーブレット?" + 、のunameをtrueに); 32 / / コールバック関数 33は xhr.onreadystatechange = プロセス; 34れる // データを送る 35 xhr.send(ヌル); 36 } 37 38 } 39の 40 機能プロセス(){ 41 であれば(xhr.readyStateの== 4 && xhr.statusの== 200 ){ 42 // 接收后台响应 43 VARのテキスト= xhr.responseText。 44 のdocument.getElementById(" namespan " ).innerHTML = テキスト。 45 } 46 } 47 </ スクリプト> 48 </ ヘッド> 49 <ボディ> 50 < P > 51 用户:< 入力タイプ= "テキスト" 名前= "のuname" ID = "のuname" のonblur = "変化()" /> < スパンID = "namespan" > </ スパン> 52 </ P > 53 < P > 54 密码:< 入力タイプ= "パスワード" 名前= "PWD" ID = "PWD" /> 55 </ P > 56 </ ボディ> 57 </ HTML >
背景LoginServlet.java
1つの インポートjavax.servlet.ServletException。 2 インポートjavax.servlet.annotation.WebServlet。 3 インポートjavax.servlet.http.HttpServlet。 4 インポートするjavax.servlet.http.HttpServletRequest。 5 輸入のjavax.servlet.http.HttpServletResponse。 6 インポートにjava.io.IOException。 7 インポートてjava.io.PrintWriter。 8 インポートjava.net.URLDecoder。 9 10 11 @WebServletは( "/サーブレット/ログイン") 12 パブリッククラスがloginservletが延びるのHttpServlet { 13 @Override 14 保護されたボイドサービス(HttpServletRequestのREQ、HttpServletResponseのRESP)はServletExceptionがは、IOException {スロー 15 バックグラウンド応答テキスト形式設定// 16 resp.setContentTypeを( ";のcharset = UTF-8テキスト/ HTML") 。17 受信要求受信// 18は、 文字列のuname URLDecoder.decode =(req.getParameter( "のuname")); 19 20は //のSystem.out.println(のuname); 21は 22である のPrintWriter resp.getWriter OUT =(); 23である ( "ジョン・ドウ" .equals IF(のuname )){ 24 Out.print( "ユーザ名が既に占有されている"); 25 } {他 26である Out.print( "ユーザ名が利用可能です")。 27 } 28 } 29 } 30