Ajax(Asynchronous JavaScript + XML)を利用して非同期通信を行ってみよう。
郵便番号APIに接続し郵便番号を入れると住所が自動入力されるようにする。
今回はzipcloudというサービスを利用させていただく。
●エクリプス新規動的プロジェクトからzipajaxlessonを作成する。
●proxyパッケージを作成し、その中に新規サーブレットZipProxy.javaを以下のように作成する。
proxy.ZipProxy.java
package proxy;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/ZipProxy")
public class ZipProxy extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//リクエストパラメーター取得
String zip = request.getParameter("zip");
//APIのURLを元にURLインスタンス作成
URL url = new URL("http://zipcloud.ibsnet.co.jp/api/search?zipcode=" + zip);
//接続
HttpURLConnection con = (HttpURLConnection) url.openConnection();
//通信方法指定
con.setRequestMethod("GET");
//内容を取得(スプーン)
InputStream is = con.getInputStream();
//スプーンからコップ
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
//コップからバケツ
BufferedReader br = new BufferedReader(isr);
//文字列連結用のインスタンス作成
StringBuffer sb = new StringBuffer();
//一行分の文字列を格納する変数
String line;
//文末まで回すループ
while ((line = br.readLine()) != null) {
//行を文字列として連結していく
sb.append(line);
}
//コンテントタイプをjsonに指定
response.setContentType("application/json;charset=UTF-8");
//出力するためのインスタンス作成
PrintWriter out = response.getWriter();
//出力
out.print(sb.toString());
}
}
●続いてWebContentフォルダの直下にindex.htmlを以下のように作成する。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>郵便番号API|Ajax通信</title>
</head>
<body>
<label for="zip">郵便番号</label>
<input type="text" id="zip"><br>
<label for="address">住所</label>
<input type="text" id="address">
<script>
'use strict';
document.addEventListener("DOMContentLoaded",function(){
var address=document.getElementById("address");
var zip=document.getElementById("zip");
zip.addEventListener("keyup",function(){
if(zip.value.length >= 7){
var xhr=new XMLHttpRequest();
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
if(xhr.status==200){
var data=JSON.parse(xhr.responseText);
address.value=data.results[0].address1+data.results[0].address2+data.results[0].address3;
}
}
};
xhr.open("GET","/zipajaxlesson/ZipProxy?zip="+zip.value);
xhr.send(null);
}
});
});
</script>
</body>
</html>
●フォームに郵便番号を入力してみよう。住所が自動入力される。
(今回は正常系のみを考慮した)

コメント