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

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

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

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Java

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

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Apache Tomcat

Apache TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

1回答

1494閲覧

HTTPステータス 500 - Internal Server Error が解決できない

Mequitazine

総合スコア8

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Java

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

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Apache Tomcat

Apache TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2021/12/20 12:16

編集2022/01/12 10:55

サーブレットを用いて、画面の遷移や値の受け渡しをしているのですが、その際にこのエラーが出てしまい先に進むことができず、行き詰ってしまったので質問を投稿させていただきました。
イメージ説明

サーブレットのソースファイルをコンパイルした際には、エラーは発生しておらずクラスファイルの作成もできています。

コードなどが必要でしたら、ご指摘下さい。

java

1public class Account{ 2 private String name; //口座名 3 private int balance; //口座の残高 4 5 public Account(String myName){ //口座名 6 name = myName; 7 balance = 0; 8 } 9 10 public int deposit(int amount){ //預金額 11 if(amount <= 0) 12 return -3; 13 else 14 balance += amount; 15 return 0; 16 } 17 18 public int withdraw(int amount){ //出金額 19 if(amount <= 0) 20 return -3; 21 else if(amount > balance) 22 return -1; 23 else 24 balance -= amount; 25 return 0; 26 } 27 28 public int showBalance(){ //残高照会 29 return balance; 30 } 31} 32

java

1import java.io.IOException; 2import java.io.PrintWriter; 3import javax.servlet.ServletException; 4import javax.servlet.http.HttpServlet; 5import javax.servlet.http.HttpServletRequest; 6import javax.servlet.http.HttpServletResponse; 7 8public class BankServlet extends HttpServlet { 9 private ExtendedBank bank; /* 口座の管理をするオブジェクト */ 10 public BankServlet() { /* bankを初期化する */ 11 bank = new ExtendedBank(); 12 } 13 14 public void doGet(HttpServletRequest request, HttpServletResponse response) 15 throws IOException, ServletException { 16 String b_name = request.getParameter("name"); 17 int result = bank.open(b_name); 18 response.setContentType("text/html; charset=UTF-8"); 19 PrintWriter pw = response.getWriter(); 20 /* 口座開設処理 */ 21 if(result == 0) { /* 口座開設成功のHTML生成*/ 22 23 pw.println( 24 "<!DOCTYPE html>" 25 +"<html>" 26 +"<head>" 27 +"<meta charset=\"UTF-8\">" 28 +"</head>" 29 +"<body>" 30 +"<div class=\"main\">" 31 +"<h1>口座開設成功</h1>" 32 +"<h2>+ b_name +様の口座を開設致しました!</h2>" 33 +"</div>" 34 +"<a class=\"success\" href=\"index.html\">メインメニューに戻る</a>" 35 +"</body>" 36 +"</html>"); 37 38 } else { /*口座開設失敗のHTML生成 */ 39 40 pw.println( 41 "<!DOCTYPE html>" 42 +"<html>" 43 +"<head>" 44 +"<meta charset=\"UTF-8\">" 45 +"</head>" 46 +"<body>" 47 +"<div class=\"main\">" 48 +"<h1>口座開設失敗</h1>" 49 +"<h2>+ b_name +様の口座は既に存在しております。</h2>" 50 +"</div>" 51 +"<a class=\"success\" href=\"index.html\">メインメニューに戻る</a>" 52 +"</body>" 53 +"</html>"); 54 } 55 } 56}

java

1import java.util.Hashtable; 2 3public class ExtendedBank{ 4 private Hashtable<String,Account>customer; // 口座リスト 5 private int balance; // 残高格納用 6 7 public ExtendedBank(){ // 口座リスト初期化 8 customer = new Hashtable<String,Account>(); 9 } 10 11 public int open(String name){ // 口座開設 12 Account myaccount = customer.get(name); 13 14 if(customer.get(name) != null) return -7; 15 else{ 16 customer.put(name,new Account(name)); 17 return 0; 18 } 19 } 20 21 public int close(String name){ // 口座解約 22 Account myaccount = customer.get(name); 23 24 if(customer.get(name) != null){ 25 if(myaccount.showBalance() == 0){ 26 customer.remove(name); 27 return 0; 28 }else return -1; 29 }else return -7; 30 } 31 32 33 public int withdraw(String name,int amount){ // 引き出し 34 Account myaccount = customer.get(name); 35 36 if(customer.get(name) != null){ 37 if(amount <= 0) 38 return -3; 39 else if(amount > balance) 40 return -1; 41 else{ 42 balance -= amount; 43 return 0; 44 } 45 }else return -7; 46 } 47 48 49 public int deposit(String name,int amount){ // 預金 50 Account myaccount = customer.get(name); 51 if(customer.get(name) == null) 52 return -7; 53 else if(amount <= 0) 54 return -3; 55 else{ 56 balance += amount; 57 return 0; 58 } 59 } 60 61 62 public int showBalance(String name){ // 残高照会 63 Account myaccount = customer.get(name); 64 if(customer.get(name) != null) return myaccount.showBalance(); 65 else return -7; 66 } 67 68 // ExtendedBank要素 69 // 預金 70 public int deposit(String name,String amount){ // name:口座名 d_amount:預金額 71 int result; 72 73 try{ 74 result = Integer.parseInt(amount); 75 }catch(NumberFormatException e){ 76 if(this.showBalance(name) == -7) 77 return -7; 78 else 79 return -4; 80 } 81 82 result = Integer.parseInt(amount); 83 if(result <= 0) 84 return -3; 85 else{ 86 balance += result; 87 return 0; 88 } 89 } 90 91 // 引き出し 92 public int withdraw(String name,String amount){ // name:口座名 w_amount:引出額 93 int result; 94 95 try{ 96 result = Integer.parseInt(amount); 97 }catch(NumberFormatException e){ 98 if(this.showBalance(name) == -7) 99 return -7; 100 else 101 return -4; 102 } 103 104 result = Integer.parseInt(amount); 105 if(result <= 0) 106 return -3; 107 else if(result > balance) 108 return -1; 109 else{ 110 balance -= result; 111 return 0; 112 } 113 } 114} 115

java

1import java.io.IOException; 2import java.io.PrintWriter; 3import javax.servlet.ServletException; 4import javax.servlet.http.HttpServlet; 5import javax.servlet.http.HttpServletRequest; 6import javax.servlet.http.HttpServletResponse; 7 8public class OpenServlet extends HttpServlet{ 9 public void doGet(HttpServletRequest request, HttpServletResponse response) 10 throws IOException, ServletException { 11 12 response.setContentType("text/html; charset=UTF-8"); 13 PrintWriter pw = response.getWriter(); 14 15 pw.println( 16 "<!DOCTYPE html>" 17 +"<html>" 18 +"<head>" 19 +"<meta charset=\"utf-8\">" 20 +"</head>" 21 +"<body>" 22 +"<div class=\"main\">" 23 +"<h1>口座開設</h1>" 24 +"<form action=\"bank\" method=\"GET\">" 25 +"<input type=\"hidden\" name=\"command\" value=\"open\">" 26 +"<div class=\"input\">" 27 +"<label for=\"account\">口座名</label>" 28 +"<input type=\"text\" name=\"name\" placeholder=\"入力された口座名\">" 29 +"<input type=\"submit\" value = \"確認\">" 30 +"</div>" 31 +"</form>" 32 +"<a class=\"cancel\" href=\"index.html\">キャンセル</a>" 33 +"</div>" 34 +"</body>" 35 +"</html>"); 36 } 37} 38

html

1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>口座操作画面</title> 6 </head> 7 8 <body> 9 <center> 10 <div id="top-main"> 11 <h1>いらっしゃいませ</h1> 12 <h2>操作をお選び下さい</h2> 13 </div> 14 <!-- 選択 --> 15 <nav class="menu"> 16 <ul> 17 <li class="menu_item"><a href="open">口座開設</a></li> 18 <li class="menu_item"><a href="close">口座解約</a></li> 19 <li class="menu_item"><a href="deposit">お預入れ</a></li> 20 <li class="menu_item"><a href="withdraw">お引出し</a></li> 21 <li class="menu_item"><a href="balance">残高照会</a></li> 22 </ul> 23 </nav> 24 </center> 25 </body> 26</html>

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

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

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

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

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

m.ts10806

2021/12/20 12:21 編集

コードは必須です。コンパイル時にチェックしてくれるのはJavaとしての構文の是非だけでExceptionは実行時にようやく出るものなので、これだけで他者が応えられることはないです。 ただ、「注意」に次のアクションが書いてありますが、その行動は取ったのでしょうか。
Mequitazine

2021/12/20 13:26

ご指摘ありがとうございます。コードを追加いたしました。 注意のアクションなのですが、ログがどこにあるのかがわからず見れておりません。
momodx

2021/12/20 14:39

> コードを追加いたしました。 手元で動かしてみた感じでは、NullPointerException は起きないようでしたが・・・ どのような操作で再現できるかを教えていただけたら、試してみます。 が、その前に、一度ビルドし直し+デプロイし直しを試してみると良いかもしれません。
Mequitazine

2021/12/20 14:51

ビルドし直ししてみましたが、画像と同じログが出てきました。 デプロイし直しは、学校の演習で行っているサイトでこれを動かしているのですがリディプロイをかけても失敗してしまいできませんでした。 >どのような操作で再現できるか htmlで作成したページからサーブレットで作成したページに飛ぼうとする際に起きてしまいます。 htmlのコードも追記いたします。
momodx

2021/12/20 15:34

> リディプロイをかけても失敗してしまいできませんでした 「手元の PC でコーディング&ビルド → 学校のサーバにデプロイして動作確認」という流れで進めているのであれば、デプロイができないのはプログラムを動かせないのと同義です。まずは最優先でこの問題を解決しなければお話になりません。 > htmlで作成したページからサーブレットで作成したページに飛ぼうとする際に起きてしまいます 念のための確認ですが、それは、「口座開設」のサーブレットですよね?
Mequitazine

2021/12/20 15:54 編集

リディプロイについては、先生にメールをしたので返信待ちです。 先ほど、追記したhtmlが口座の操作選択で口座開設をクリックすると、サーブレットに記述したページが出るという流れを想定しています。
momodx

2021/12/20 16:10 編集

index.html ⇔ OpenServlet → BankServlet → index.html 手元の環境で動かしてみている限りでは、ここの画面遷移自体に問題は無いようです。 ※ 他のサーブレットも動かしてみた場合にどうなるのかは分かりません ※ ついでに、ソースコードの中身まで熟読したわけでもありません いずれにせよ、デプロイの件を解決するのが先決だと思います。 ついでなので、ログの確認方法も先生に聞いてみてください。エラーの原因は、ほとんどの場合、ソースコードからではなくログから判明するものです。
jimbe

2021/12/20 16:21

手元に開発環境があるのでしたら、そこに実行環境も作って試せば良いのではないでしょうか。
momodx

2021/12/20 16:32

web.xml が間違っていて、「index.html → BankServlet」になってるとかかな。(独り言です)
Mequitazine

2021/12/21 01:30

問題なく動作しているようであるならば、サーブレットのサーバ自体の問題である可能性が高そうではあるので先生に聞いてみます。 手元に実行環境を作って試してみるのも、やってみます。
guest

回答1

0

自己解決

解決しました!
web-xmlを書き直したところ問題なく動作いたしました。

投稿2021/12/22 05:59

Mequitazine

総合スコア8

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問