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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

API

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

Q&A

解決済

1回答

1415閲覧

年齢計算をするAPIを作成、利用するプログラム(非同期)

sad

総合スコア16

Java

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

API

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

0グッド

0クリップ

投稿2020/08/26 05:33

編集2020/08/26 08:22

現在作成している標記のプログラムがうまく動作しません。
ところどころおかしい所(mapperが二か所ある、誤入力エラー処理をしていない等)があるかとは思いますが、とりあえず動作する状況までもっていきたいです。

・ここが原因だと思うよ
・このようにしたら確認できるんじゃないか
・このサイト見たらいいよ
等、どうか知恵をお貸しください。


考えている流れ↓
0. 生年月日を8桁入力(例)20200826)して計算ボタンをクリック
0. servletに接続(パラメータに生年月日)
0. パラメータから年月日を取得しNenreiに引数として渡す
0. 引数をもとに計算した値をreturn
0. jspのタグに反映

NenreiJSP

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>Insert title here</title> 8</head> 9<body> 10<input type="text" id="year"><br> 11<input type="button" id="button" value="計算"><br> 12<input type="text" id="age"> 13<script type="text/javascript" src="Nenrei.js"></script> 14<script type="text/javascript"> 15</script> 16</body> 17</html>

Nenrei

1 2$(function() { 3 4 $('#button').click(function() { 5 $.getJSON('/ApiTest/NenreiServlet?', 6 { 7 year: $('#year').val() 8 } 9 ) 10 11 .done(function(data) { 12 if (data.results) { 13 var result = data.results[0]; 14 $('#age').val(result."age"); 15 } 16 }); 17 }); 18}); 19

Nenrei

1package Test; 2 3import java.util.Calendar; 4 5import com.fasterxml.jackson.core.JsonProcessingException; 6import com.fasterxml.jackson.databind.ObjectMapper; 7 8public class Nenrei { 9 public String AGE(String year, String month, String day) throws JsonProcessingException { 10 11 int Year = Integer.parseInt(year); 12 int Month = InteNger.parseInt(month); 13 int Day = Integer.parseInt(day); 14 15 //現在の年月日 16 Calendar calendar = Calendar.getInstance(); 17 int yearToday = calendar.get(Calendar.YEAR); 18 int monthToday = calendar.get(Calendar.MONTH); 19 int dayToday = calendar.get(Calendar.DAY_OF_MONTH); 20 21 //年齢を計算 22 int age; 23 age = yearToday - Year; 24 if (monthToday < Month) { 25 --age; 26 } else if (monthToday == Month) { 27 if (dayToday < Day) { 28 29 --age; 30 } 31 } 32 33 ObjectMapper mapper = new ObjectMapper(); 34 String json = mapper.writeValueAsString(age); 35 36 return json; 37 } 38} 39

NenreiServlet

1package Test; 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 com.fasterxml.jackson.databind.ObjectMapper; 13 14@WebServlet("/NenreiServlet") 15public class NenreiServlet extends HttpServlet { 16 private static final long serialVersionUID = 1L; 17 18 public void doGet(HttpServletRequest request, HttpServletResponse response) 19 throws ServletException, IOException{ 20 21 String Year = request.getParameter("year"); 22 23 String year = Year.substring(0,4); 24 String month = Year.substring(4,6); 25 String day = Year.substring(6); 26 27 Nenrei nenrei = new Nenrei(); 28 String age = nenrei.AGE(year, month, day); 29 30 JSON Json = new JSON(); 31 Json.age = age; 32 33 ObjectMapper mapper = new ObjectMapper(); 34 String json = mapper.writeValueAsString(Json); 35 36 response.setContentType("application/json"); 37 response.setHeader("Cache-Control", "nocache"); 38 response.setCharacterEncoding("utf-8"); 39 40 // JSONを戻す 41 PrintWriter out = response.getWriter(); 42 out.print(json); 43 44 } 45} 46

JSON

1package Test; 2 3public class JSON { 4 public String age; 5 6 @Override 7 public String toString() { 8 return "JSON [age=" + age +"]"; 9 } 10} 11

追記
jspを実行し、生年月日を入力、計算ボタンをクリックしても処理が進みません。
eclipse,tomcatを使用しているのですが、デバックモードで実行しても処理が動いていないので何も確認できていません。デバッグタグには<終了しました>とだけあります。

追記
javascriptが現在↓このようになっています。相変わらず動作はしません。

Nenrei

1 2 3 document.getElementById("button").click(function() { 4 var request = new XMLHttpRequest(); 5 6 var year = document.getElementById("year"); 7 request.open('GET','http://localhost:8080/ApiTest/NenreiServlet?year=' + year); 8 request.responseType = 'json'; 9 10 request.onload = function (){ 11 var data = this.response; 12 console.log(data); 13 } 14 request.send(); 15 }); 16

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

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

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

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

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

nekoniki

2020/08/26 05:36

うまく動作しないとはどういった状態でしょうか? そもそもコンパイルが通らない等ならそのエラー内容を、動作はするが意図しない挙動ならその旨(計算結果が違う、特定の値がnullやundefiendになる等)を添えて質問いただくとより回答が得られると思います。
maisumakun

2020/08/26 05:37 編集

わざわざ通信を行って非同期で実装するのがいちばんの無駄だと思うのですが、このような構成を取ることにどのようなメリットがあるのでしょうか?
sad

2020/08/26 05:58

>maisumakunさん 現在学習を始めたばかりの身で、無駄な動きやこうすれば簡単等の考え方をするほどの知識がありません。その状況ではありますがwebAPIがどのように出来ていて、どのように利用するのかという大まかな流れを理解するためにこのプログラムを作っています。実務とは全く関係ない、自分の理解を深めるためのものです。 この遠回りなものでも動くようになれば、そこから「ここが無駄だ」「ここはこうできる」といった部分を学習できるようになります。メリットは自分のためになる、です。
maisumakun

2020/08/26 05:59

「WebAPIの学習目的」だったのですね、了解しました。
sad

2020/08/26 06:02

はい。どうか手助けをお願い致します。
guest

回答1

0

自己解決

jsをこのようにすることでServletと値の受け渡しが無事できました。

Nenrei

1 2 3 function get(){ 4 var year = document.getElementById("year").value; 5console.log("1"); 6 xhr = new XMLHttpRequest(); 7console.log("2"); 8 xhr.onload = setResponseText; 9console.log("3"); 10 xhr.open("GET", "/ApiTest/NenreiServlet?year=" + year,true); 11console.log("4"); 12 xhr.send(); 13console.log(xhr.responseText); 14} 15 16function setResponseText(){ 17 var obj = JSON.parse(xhr.responseText); 18 var age = obj.age; 19 document.getElementById("age").value = age; 20 console.log("5"); 21}

console.logは動きの確認です。

投稿2020/08/27 08:45

sad

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問