これは非常に基本的な要求と応答のテストです。ブラウザはjQuery $ .ajax APIを使用して「hello from browser」をサーブレットに送信し、サーブレットはこのメッセージを受信し、org.json.simpleライブラリを使用してJSONオブジェクトを作成し、メッセージ「hello from server」を含むJSON応答をブラウザに送り返します。
私はこれをlocalhostで実行していますが、IPアドレスが123.123.12.123で、プラットフォームがUbuntuで、サーバーがTomcat 6.0で、Eclipse IDEで実行されていると想定しています。
テスト1. Eclipseからサーバーを起動し、Firefoxを開いて http:// localhost:8080/myproject/test.jsp と入力します。サーブレットがメッセージを受信し、ブラウザーが応答を受信し、テストに合格しました。
テスト2.サーバーはUbuntuのEclipseでまだ実行中です。VirtualBoxからWindows 7ゲストマシンを起動し、Windows 7のFirefoxブラウザーを起動します http://123.123.12.123:8080/myproject/test.jsp 、期待どおりに動作し、テストに合格しました。
テスト3.サーバーはUbuntuのEclipseでまだ実行されています。InternetExplorer 9ブラウザーを開き、アドレスを指定します http://123.123.12.123:8080/myproject/test.jsp 、 何も起こりません。 デバッグは私に与えます
応答HTTP/1.1 200 OK
応答本文{"message": "hello from server"}
Test.jspは
<%@ page language = "Java" contentType = "text/html; charset = UTF-8" pageEncoding = "UTF-8"%> <!DOCTYPE html公開 "-// W3C // DTD HTML 4.01 Transitional // EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> < head> <meta http-equiv = "Content-Type" content = "text/html; charset = UTF-8"> <title>ここにタイトルを挿入</ title> </ head> <script src = "// ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js" type = "text/javascript"> </ script> <script type = "text/javascript" src = "release/js/libs/json2.js"> </ script> <script> $(ドキュメント)。 ready(function(){ var request =({"message": 'Hello from browser'}); var jsonobj = JSON.stringify(request); $。 ajax({ data:{para:jsonobj}、 dataType: 'json'、 url: './TestServlet', type:' POST ' 、 成功:function(jsonObj){ alert(jsonObj.message); }、 エラー:function(){ alert( 'Ajax readyState:' + xhr.readyState + '\ nstatus:' + xhr.status + '' + err); } } ); }); </ script> <body> </ body> </ html>
サーブレットコードは
import Java.io.IOException; import Java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet .http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.json.simple。 JSONObject; import org.json.simple.JSONValue; /** *サーブレット実装クラスTestServlet */ パブリッククラスTestServletはHttpServletを拡張します{ private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public TestServlet(){ super(); } /** * @HttpServletを参照#doGet(HttpServletRequest request、HttpServletResponse response) */ protected void doGet(HttpServletRequest request、HttpServletResponse response)throws ServletException、IOException { // TO DO自動生成されたメソッドスタブ } /** * @see HttpServlet#doPost(HttpServletRequest request、HttpServletResponse response) */ protected void doPost(HttpServletRequest request、HttpServletResponse response)がServletException、IOException { request.setCharacterEncoding( "utf8"); response.setCharacterEncoding( "utf8 "); response.setContentType(" application/json "); PrintWriter out = response.getWriter(); JSONObject jsonObj =(JSONObject)JSONValue.parse(request.getParameter( "para")); System.out.println(jsonObj.get( "message")); JSONObject obj = new JSONObject(); obj.put( "message"、 "hello from server"); out.print(obj); } }
更新:
変更により詳細を確認した後
エラー:function(){ alert( 'Ajax readyState:' + xhr.readyState + '\ nstatus:' + xhr.status + '' + err); }
に
エラー:function(xhr、err){ alert( 'Ajax readyState:' + xhr.readyState + '\ nstatus:' + xhr.status + '' + err); }
アラートのreadyState:0とstatus:0を受け取りました。しかし、{"message": "hello from server"}が応答本文に表示され、応答ヘッダーは
Key Value Response HTTP/1.1 200 OK
私も同じ問題を抱えていました。 Firefoxでは正常に機能しましたが、IEでは機能しませんでした...この投稿を読んで、私の問題は「Content-Type」に関連していることがわかりました。問題はそのIEが 'charset = UTF8'に問題があるようです。しかし、 'charset = UTF-8'(ダッシュ付き)を使用する場合、それは機能します!Content-Typeその後、次のようになります。application/ json; charset = UTF-8
<%
Gson gs = new Gson();
BeanHelpBH bh = new BeanHelpBH();
List<Baihatmoi> lst = bh.getTenbaihatbyName("Ao moi ca mau");
String bha = gs.toJson(lst);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
out.print(bha);
out.flush();
%>
script :
<script>
$(document).ready(function(){
$.get('jsontest.jsp',function(data){
[enter image description here][1] console.log(data);
});
});
</script>
gsonを使用すると、json応答を送信できます
@WebServlet(urlPatterns = {"/ jsonResponse"})パブリッククラスJsonResponseがHttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
Student student = new Student(12, "Ram Kumar", "Male", "1234565678");
Subject subject1 = new Subject(1, "Computer Fundamentals");
Subject subject2 = new Subject(2, "Computer Graphics");
Subject subject3 = new Subject(3, "Data Structures");
Set subjects = new HashSet();
subjects.add(subject1);
subjects.add(subject2);
subjects.add(subject3);
student.setSubjects(subjects);
Address address = new Address(1, "Street 23 NN West ", "Bhilai", "Chhattisgarh", "India");
student.setAddress(address);
Gson gson = new Gson();
String jsonData = gson.toJson(student);
PrintWriter out = response.getWriter();
try {
out.println(jsonData);
} finally {
out.close();
}
}
}