ServletでJSON
前回、JavaアプリケーションでJSONを使ってみましたが、今回はServletでJSONを使ってみます。サンプル:呼び出し元のtest.html
test.html
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery Test</title>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$("#btn").click(function() {
var param = {
str1 : $("#txt1").val(),
str2 : $("#txt2").val()
};
$.ajax({
contentType : "Content-Type: application/json; charset=UTF-8",
url : "./TestJ",
type : "POST",
data : JSON.stringify(param)
}).done(function(data, status, xhr) {
// 正常
show(data);
}).fail(function(xhr, status, error) {
// 異常
$("#msg").append(xhr);
$("#msg").append(":" + status);
$("#msg").append(":" + error);
}).always(function(data, status, xhr) {
// 常に
});
});
});
function show(data) {
// var obj = JSON.parse(data);
var obj = data;
//ここに結果
$("#msg").html(obj.str);
//ここにリスト
if (obj.ret == "true") {
var str1 = "<table border='1'>";
$.each(obj.ary, function(i, val) {
str1 += "<tr><td>" + i + "</td><td>" + val + "</td></tr>";
console.log(i + ': ' + val);
});
str1 += "</table>";
$("#ret1").html(str1);
} else {
$("#ret1").empty();
}
//ここにマップ
if (obj.ret == "true") {
var str2 = "<table border='1'>";
$.each(obj.map, function(key, val) {
str2 += "<tr><td>" + key + "</td><td>" + val + "</td></tr>";
});
str2 += "</table>";
$("#ret2").html(str2);
} else {
$("#ret2").empty();
}
}
</script>
</head>
<body>
<input type="text" id="txt1" />
<input type="text" id="txt2" />
<br />
<input type="button" id="btn" value="ボタン" />
<div id="msg">ここに結果</div>
<br />
<div id="ret1">ここにリスト</div>
<br />
<div id="ret2">ここにマップ</div>
</body>
</html>
黄色部分がJSONを送る部分です。JSONを受け取る部分は特になにも必要ありません。
サンプル:呼び出し先のServlet
TestJ.java
package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
@WebServlet("/TestJ")
public class TestJ extends HttpServlet implements ServletContextListener {
private static final long serialVersionUID = 1L;
public TestJ() {
super();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 送信されたJSONの取得
BufferedReader buffer = new BufferedReader(request.getReader());
String reqJson = buffer.readLine();
// JSONをオブジェクトに変更
ObjectMapper mapper = new ObjectMapper();
Map<String, String> reqMap =
mapper.readValue(reqJson, new TypeReference<Map<String, String>>() {});
// 戻り値用のオブジェクト作成
Map<String, Object> map = new HashMap<>();
map.put("A", "あいう");
map.put("B", "えお");
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
Map<String, Object> resMap = new HashMap<>();
resMap.put("str", reqMap.get("str1") + reqMap.get("str2") + "が送信されました");
resMap.put("ret", "true");
resMap.put("map", map);
resMap.put("ary", list);
// オブジェクトをJson文字列に変更
String resJson = mapper.writeValueAsString(resMap);
// ヘッダ情報などセット
response.setContentType("application/json");
response.setHeader("Cache-Control", "nocache");
response.setCharacterEncoding("utf-8");
// JSONを戻す
PrintWriter out = response.getWriter();
out.print(resJson);
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("contextDestroyed");
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("contextInitialized");
}
}
赤色がJSONを受け取る部分で、黄色部分がJSONを送る部分です。
ブラウザ表示
Eclipseで環境構築
コンパイルを通すためには前回の設定が必要です。それとは別に実行するために以下の設定が必要になります。
サーバタグを開いて、サーバ(Tomcat v8.0 Server ~)をダブルクリックして、
表示された画面でOpen launch configurationをクリックします。
表示されたダイアログでUser Entriesを選択して、Add External JARsをクリックします。
必要なJarファイルを選択します。
ページのトップへ戻る