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

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

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

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

Java

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

3578閲覧

AjaxのPOSTのデータをJavaで受け取りjspで処理したい

Chandler_Bing

総合スコア673

JSP

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

Java

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2019/03/10 13:02

現在簡単なクイズ問題をJava、jsp、Ajaxを使用し作成していますが非同期通信が上手く行きません。JavaとAjaxで非同期通信を行うのは初めてなので困っています。以下ファイルです。

DBに保存されているクイズのカラムの値をフィールド値に入れ、インスタンスとして扱います。

Java

1package model; 2 3import java.io.Serializable; 4import java.util.List; 5 6import dao.JavaQuizDao; 7 8public class Quiz implements Serializable { 9 private int question_id; 10 private String question; 11 private String answer1; 12 private String answer2; 13 private String answer3; 14 private String answer4; 15 private String correct_answer; 16 17 public Quiz() { 18 } 19 20 public Quiz(int question_id, String question, String answer1, String answer2, String answer3, String answer4, 21 String correct_answer) { 22 this.question_id = question_id; 23 this.question = question; 24 this.answer1 = answer1; 25 this.answer2 = answer2; 26 this.answer3 = answer3; 27 this.answer4 = answer4; 28 this.correct_answer = correct_answer; 29 } 30 31 public int getQuestion_id() { 32 return question_id; 33 } 34 35 public String getQuestion() { 36 return question; 37 } 38 39 public String getAnswer1() { 40 return answer1; 41 } 42 43 public String getAnswer2() { 44 return answer2; 45 } 46 47 public String getAnswer3() { 48 return answer3; 49 } 50 51 public String getAnswer4() { 52 return answer4; 53 } 54 55 public String getCorrect_answer() { 56 return correct_answer; 57 } 58}

これはサンプルのJSPコードです。Ajaxを介してDBからデータを得ます。それがコンソールに表示されれば成功とします。

JSP

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 5<!DOCTYPE html> 6<html lang="en" dir="ltr"> 7 8<head> 9 <meta charset="utf-8"> 10 <title>JavaのAjaxの練習です。</title> 11 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> 12</head> 13 14<body> 15 <h2>何も表示しません</h2> 16</body> 17 18<script> 19 $(function() { 20 21 function getQuizzes() { 22 return $.post('/Ajax', { 23 action: getQuizzes 24 }) 25 } 26 27 getQuizzes().done(function(result) { 28 }); 29 30 }); 31</script> 32</html>

Ajax.java
ここにPOSTから飛んできます。ReturnQuizzes.getQuizzes();はListに挿入したクイズインスタンスを返します。

package

1 2import java.io.IOException; 3 4import javax.servlet.ServletException; 5import javax.servlet.annotation.WebServlet; 6import javax.servlet.http.HttpServlet; 7import javax.servlet.http.HttpServletRequest; 8import javax.servlet.http.HttpServletResponse; 9 10import model.ReturnQuizzes; 11@WebServlet("/Ajax") 12public class Ajax extends HttpServlet { 13 private static final long serialVersionUID = 1L; 14 15 protected void doPost(HttpServletRequest request, 16 HttpServletResponse response) 17 throws ServletException, IOException { 18 19 request.setCharacterEncoding("utf-8"); 20 21 String action = request.getParameter("action"); 22 System.out.println(action); 23 24 if(action == "getQuizzes") { 25 ReturnQuizzes.getQuizzes(); 26 } 27 } 28 29}

DBに接続し値を取得するJavaQuizDaoクラスを使って値をリターンします。

Java

1package model; 2 3import java.util.List; 4 5import dao.JavaQuizDao; 6 7public class ReturnQuizzes { 8 9 public static List<Quiz> getQuizzes() { 10 JavaQuizDao jqDao = new JavaQuizDao(); 11 List<Quiz> quizzes = jqDao.getQuizzes(); 12 return quizzes; 13 } 14 15 public static void main(String[] args) { 16 //DBから値が取れているか確認 17 JavaQuizDao jqDao = new JavaQuizDao(); 18 System.out.println(ReturnQuizzes.getQuizzes()); 19 System.out.println(jqDao.getQuizzes()); 20 } 21} 22

一部抜粋ではありますが、DBに接続し値(クイズ)を取ってきます。(処理が成功することは確認済みです)

Java

1while (rs.next()) { 2 while (rs.next()) { 3 quizzes.add(new Quiz(rs.getInt("question_id"), rs.getString("question"), rs.getString("answer1"), 4 rs.getString("answer2"), rs.getString("answer3"), rs.getString("answer4"), 5 rs.getString("correct_answer"))); 6 } 7 } 8: 9: 10: 11 12return quizzes;//リターンする

問題★
これを実行(JSPをサーバーで実行)するとjQueryのエラーで、RangeError: Maximum call stack size exceeded.が表示されますがJavaのエラーは何も表示されません。どこが間違っているでしょうか。このAjaxへの通信もWEBサイト見ながら我流で組み合わせながら作ったので上手く行きません。

jspのdoneで値を受け取る時はServlet側で単にリターンするだけで良いのでしょうか。JSON型にしていないのが問題でしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

サーブレットから何もレスポンスしていないので動かないのではないでしょうか。

ReturnQuizzes.getQuizzes(); の内容をレスポンスするのであれば、

java

1response.setContentType("application/json; charset=UTF-8"); 2PrintWriter out = response.getWriter();

などで出力用のストリームから出力するのが良いでしょう。

投稿2019/03/12 16:05

A-pZ

総合スコア12011

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

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

Chandler_Bing

2019/03/13 11:49

ありがとうございます。PHPではよくAjaxを使いWEBサイトを作成していたのですが、Javaでは初めてです。検索をかけるとSpring Bootというフレームワークを知ったのですが、Ajax等の処理はSpring Bootで行うべきなのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問