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

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

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

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

Java

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

サーブレット

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

716閲覧

サーブレットでJSON In Javaを使用し、JSONから文字列をブラウザ上に表示できない

m1st

総合スコア21

JSON

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

Java

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

サーブレット

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2018/11/21 09:00

前提・実現したいこと

EC2+Tomcat8+Eclipse(Version: Photon)を使用してサーブレットのプログラムを書く練習をしております。
今回、サーブレット内でJSONの文字列を作成してその文字列をJSON In Javaで取得し、ブラウザ上で表示させることが目的です。作成したコードは、エクスポートしてWARファイルにしたのちtomcat8>webappsに保存します。
該当するコードは以下の通りです。

JsonServlet.java

java

1package servlet; 2 3import java.io.IOException; 4import java.io.PrintWriter; 5 6import javax.servlet.ServletException; 7import javax.servlet.annotation.WebServlet; 8import javax.servlet.http.HttpServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11 12import org.json.JSONException; 13import org.json.JSONObject; 14 15 16/** 17 * Servlet implementation class JsonServlet 18 */ 19@WebServlet("/JsonServlet") 20public class JsonServlet extends HttpServlet { 21 private static final long serialVersionUID = 1L; 22 23 public JsonServlet() { 24 super(); 25 } 26 27 /** 28 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 29 */ 30 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 31 32 try { 33 String script = "{ \"name\":\"Taro Tanaka\", \"age\":30}"; 34 JSONObject obj = new JSONObject(script); 35 response.setContentType("text/html; charset=UTF-8"); 36 PrintWriter out = response.getWriter(); 37 out.println("<html>"); 38 out.println("<head>"); 39 out.println("<title>jsonの内容</title>"); 40 out.println("</head>"); 41 out.println("<body>"); 42 out.println("<p>" + obj.getString("name") + obj.getString("age") + "</p>"); 43 out.println("</body>"); 44 out.println("</html>"); 45 } catch (JSONException e) { 46 e.printStackTrace(); 47 } 48 } 49}

JSON In Javaを使用するにあたりライブラリを追加しなければならないので、こちらから.jarファイルをダウンロードしました。
その後プロジェクト直下に[lib]フォルダを作成→先ほどダウンロードしたファイルを保存→プロジェクトを右クリックしてビルド・パスの構成→JARファイルの追加により[lib]フォルダに保存したファイルを指定しました。

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

しかしながらブラウザ上で確認しようとしても、このページは見つかりません(404)と表示されてしまいます。

試したこと

Eclipse上でビルド・パスを一切追加せず、既存のライブラリを使用したサーブレットなら全て出力結果をブラウザ上で確認できます。一応ネットで調べるだけ調べたのですが原因が分かりませんでした。。。

補足情報

1.他のライブラリを追加した時も同じようにできませんでした。
2.ダウンロードしたライブラリにビルド・パスを追加した際は全て、プロジェクトのアイコンの左側に黄色の三角の中に[!]のマークが出現します。しかし、ソースコードなどにはそのマークは無く、エラーも出ておりません。
3.足りない情報があればできる範囲は全て答えます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

JavaのWebアプリケーションが利用する外部ライブラリは、アプリケーション内のWEB-INF/lib に jarファイルを配置しなければなりません。これはJavaのWebアプリケーションの仕様です。

開発プロジェクトのビルドパスを通しただけでは、その環境のビルドが解決しただけです。

投稿2018/11/21 09:18

A-pZ

総合スコア12011

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

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

m1st

2018/11/21 09:32 編集

拙い文章で申し訳ありませんが、素早い回答ありがとうございます! 無事ライブラリを追加し、JSONのファイルから文字列を出力できました。 本当にありがとうございます<m(__)m>
A-pZ

2018/11/21 09:33

d(・ω・
m1st

2018/11/21 13:29

先ほど文字出力できたと書きましたが、別ファイルの出力で上記のファイルではありませんでした。 上記のファイルをブラウザ上で表示させても空白のページが出現します。 通信は行えています(ステータス200)。また、ライブラリの問題は解決済みです。 なぜ、htmlのbody内の表記がブラウザ上でなされないのか、試行錯誤しているのですがわかりません。 もしお時間があるようでしたら、回答のほどよろしくお願いいたします。
A-pZ

2018/11/22 01:04

実行すると org.json.JSONException: JSONObject["age"] not a string. 例外が出ていますね。 作成されているJSONのデータを見ると、\"age\":30 と書いてありますので、これは文字列ではなく数値で定義されていますから、obj.getInt("age") で動作するでしょう。なお、実行時に例外が出ますから、その内容を見て、何が問題であるかを判断できますし、サーブレットは実行時例外のスタックトレースをコンソールに出力しますので、今回のコードでいえば、全体を try~catchで囲むのはあまりよくありません。
m1st

2018/11/22 04:11

問題を解決することができました。ありがとうございます!!! 例外処理の内容を出力したものをから何が問題であったのか判断するように心がけます。また、try~catch文の使い方を気を付けようと思います。 本当に助かりました<m(__)m>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問