質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

0回答

1931閲覧

【Java】BufferedReaderで処理が止まる?YahooショッピングAPIから商品情報を取得したい

退会済みユーザー

退会済みユーザー

総合スコア0

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2019/08/29 08:13

前提・実現したいこと

jspとサーブレットを使って仮想的なECサイトの作成中です。
テキスト検索(top.jsp)でYahooショッピングAPIから商品情報を取得して一覧表示させたい。

レスポンスの読み出しで以下の問題が発生しました。

発生している問題・エラーメッセージ

エラーは起きてませんが、ページやコンソールに何も表示されない。 エクリプスでデバックしてみたら BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); で止まってしまっている。

該当のソースコード

Java

1package EC; 2 3import java.io.BufferedReader; 4import java.io.IOException; 5import java.io.InputStreamReader; 6import java.net.HttpURLConnection; 7import java.net.URL; 8import java.util.ArrayList; 9 10import javax.servlet.ServletException; 11import javax.servlet.annotation.WebServlet; 12import javax.servlet.http.HttpServlet; 13import javax.servlet.http.HttpServletRequest; 14import javax.servlet.http.HttpServletResponse; 15 16import com.fasterxml.jackson.databind.JsonNode; 17import com.fasterxml.jackson.databind.ObjectMapper; 18 19/** 20 * Servlet implementation class Search 21 */ 22@WebServlet("/Search") 23public class Search extends HttpServlet { 24 private static final long serialVersionUID = 1L; 25 26 /** 27 * @see HttpServlet#HttpServlet() 28 */ 29 public Search() { 30 super(); 31 // TODO Auto-generated constructor stub 32 } 33 34 /** 35 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 36 */ 37 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 38 // TODO Auto-generated method stub 39 try { 40 String appid = "アプリケーションID"; 41 //商品キーワードを受け取りString型に格納 42 request.setCharacterEncoding("UTF-8"); 43 String query = request.getParameter("search"); 44 //リクエストURL 45 String url = "http://shopping.yahooapis.jp/ShoppingWebService/V1/json/itemSearch?appid=" 46 + appid + "&query=" + query; 47 //API接続用のURL生成 48 URL urlConn = new URL(url); 49 System.out.println(urlConn); 50 //コネクションを取得 51 HttpURLConnection conn = (HttpURLConnection)urlConn.openConnection(); 52 //HttpのメソッドをGETに指定 53 conn.setRequestMethod("GET"); 54 //リクエストのボディ送信を許可しない 55 conn.setDoOutput(false); 56 //レスポンスのボディ送信を許可する 57 conn.setDoInput(true); 58 //接続 59 conn.connect(); 60 61 //レスポンスの読み出し 62 BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 63 String json = br.readLine(); 64 65 //JSON文字列を読み込み、JsonNodeオブジェクトに変換 66 ObjectMapper mapper = new ObjectMapper(); 67 JsonNode root = mapper.readTree(json); 68 69 //商品検索結果の入ったBeansを格納するArrayListを生成 70 ArrayList<productDataBeans> pdbList = new ArrayList<productDataBeans>(); 71 productDataBeans pdb = new productDataBeans(); 72 73 //JSONから10件分の要素を取り出し、String型に格納 74 //それをBeansにセットし、BeansをArrayListに格納 75 for(int i = 0; i <= 9; i++) { 76 String hitNum = String.valueOf(i); 77 String imageURL = root.get("ResultSet").get("0").get("Result").get(hitNum).get("Image").get("Small").textValue(); 78 String productName = root.get("ResultSet").get("0").get("Result").get(hitNum).get("Name").textValue(); 79 String price = root.get("ResultSet").get("0").get("Result").get(hitNum).get("Price").get("_value").textValue(); 80 int SearchResultNum = root.get("ResultSet").get("totalResultsAvailable").asInt(); 81 82 //商品検索結果を格納するBeansのインスタンスを生成 83 84 pdb.setImageURL(imageURL); 85 pdb.setProductName(productName); 86 pdb.setPrice(price); 87 pdb.setQuery(query); 88 pdb.setSearchResultNum(SearchResultNum); 89 90 pdbList.add(pdb); 91 } 92 93 //ArrayListをリクエストスコープに格納 94 request.setAttribute("resultData", pdbList); 95 96 br.close(); 97 98 request.getRequestDispatcher("/search.jsp").forward(request, response); 99 100 }catch (Exception e) { 101 request.setAttribute("error", e.getMessage()); 102 } 103 } 104 105 /** 106 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 107 */ 108 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 109 // TODO Auto-generated method stub 110 doGet(request, response); 111 } 112 113} 114

jsp

1<%@ page language="java" 2 contentType="text/html; charset=UTF-8" 3 pageEncoding="UTF-8"%> 4<!DOCTYPE html> 5<html> 6 <head> 7 <meta charset="UTF-8"> 8 <title>トップページ</title> 9 </head> 10 <body> 11 <p>仮想ショッピングサイトです。ここでのショッピングに金銭は発生しません。</p> 12 <form action="Search" method="GET"> 13 <input type="text" name="search"> 14 <input type="submit" name="submit" value="検索"> 15 </form> 16 </body> 17</html> 18

java

1package kagoyume; 2 3import java.io.Serializable; 4 5//商品情報を持ち回るJavaBeans 6 7public class productDataBeans implements Serializable{ 8 private String hitNum; 9 private String imageURL; 10 private String productName; 11 private String price; 12 private int SearchResultNum; 13 private String query; 14 15 public String getHitNum() { 16 return hitNum; 17 } 18 public void setHitNum(String hitNum) { 19 this.hitNum = hitNum; 20 } 21 22 public String getImageURL() { 23 return imageURL; 24 } 25 public void setImageURL(String imageURL) { 26 this.imageURL = imageURL; 27 } 28 29 public String getProductName() { 30 return productName; 31 } 32 public void setProductName(String productName) { 33 this.productName = productName; 34 } 35 36 public String getPrice() { 37 return price; 38 } 39 public void setPrice(String price) { 40 this.price = price; 41 } 42 43 public int getSearchResultNum() { 44 return SearchResultNum; 45 } 46 public void setSearchResultNum(int SearchResultNum) { 47 this.SearchResultNum = SearchResultNum; 48 } 49 50 public String getQuery() { 51 return query; 52 } 53 public void setQuery(String query) { 54 this.query = query; 55 } 56} 57

試したこと

URL(http://shopping.yahooapis.jp/ShoppingWebService/V1/json/itemSearch?appid=)の中のjson有無両方を試しました。

String json = br.readLine();

while(br.ready()){
String son = br.readLine();
}
にして試しました。

###終わりに
最後までご覧いただきありがとうございます。
何か気付いた点あればコメントいただけると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問