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

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

新規登録して質問してみよう
ただいま回答率
87.20%
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コンテナです。

解決済

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

Mequitazine
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コンテナです。

1回答

0評価

0クリップ

212閲覧

投稿2021/12/20 12:16

編集2022/01/12 10:55

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

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

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

java

public class Account{ private String name; //口座名 private int balance; //口座の残高 public Account(String myName){ //口座名 name = myName; balance = 0; } public int deposit(int amount){ //預金額 if(amount <= 0) return -3; else balance += amount; return 0; } public int withdraw(int amount){ //出金額 if(amount <= 0) return -3; else if(amount > balance) return -1; else balance -= amount; return 0; } public int showBalance(){ //残高照会 return balance; } }

java

import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class BankServlet extends HttpServlet { private ExtendedBank bank; /* 口座の管理をするオブジェクト */ public BankServlet() { /* bankを初期化する */ bank = new ExtendedBank(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String b_name = request.getParameter("name"); int result = bank.open(b_name); response.setContentType("text/html; charset=UTF-8"); PrintWriter pw = response.getWriter(); /* 口座開設処理 */ if(result == 0) { /* 口座開設成功のHTML生成*/ pw.println( "<!DOCTYPE html>" +"<html>" +"<head>" +"<meta charset=\"UTF-8\">" +"</head>" +"<body>" +"<div class=\"main\">" +"<h1>口座開設成功</h1>" +"<h2>+ b_name +様の口座を開設致しました!</h2>" +"</div>" +"<a class=\"success\" href=\"index.html\">メインメニューに戻る</a>" +"</body>" +"</html>"); } else { /*口座開設失敗のHTML生成 */ pw.println( "<!DOCTYPE html>" +"<html>" +"<head>" +"<meta charset=\"UTF-8\">" +"</head>" +"<body>" +"<div class=\"main\">" +"<h1>口座開設失敗</h1>" +"<h2>+ b_name +様の口座は既に存在しております。</h2>" +"</div>" +"<a class=\"success\" href=\"index.html\">メインメニューに戻る</a>" +"</body>" +"</html>"); } } }

java

import java.util.Hashtable; public class ExtendedBank{ private Hashtable<String,Account>customer; // 口座リスト private int balance; // 残高格納用 public ExtendedBank(){ // 口座リスト初期化 customer = new Hashtable<String,Account>(); } public int open(String name){ // 口座開設 Account myaccount = customer.get(name); if(customer.get(name) != null) return -7; else{ customer.put(name,new Account(name)); return 0; } } public int close(String name){ // 口座解約 Account myaccount = customer.get(name); if(customer.get(name) != null){ if(myaccount.showBalance() == 0){ customer.remove(name); return 0; }else return -1; }else return -7; } public int withdraw(String name,int amount){ // 引き出し Account myaccount = customer.get(name); if(customer.get(name) != null){ if(amount <= 0) return -3; else if(amount > balance) return -1; else{ balance -= amount; return 0; } }else return -7; } public int deposit(String name,int amount){ // 預金 Account myaccount = customer.get(name); if(customer.get(name) == null) return -7; else if(amount <= 0) return -3; else{ balance += amount; return 0; } } public int showBalance(String name){ // 残高照会 Account myaccount = customer.get(name); if(customer.get(name) != null) return myaccount.showBalance(); else return -7; } // ExtendedBank要素 // 預金 public int deposit(String name,String amount){ // name:口座名 d_amount:預金額 int result; try{ result = Integer.parseInt(amount); }catch(NumberFormatException e){ if(this.showBalance(name) == -7) return -7; else return -4; } result = Integer.parseInt(amount); if(result <= 0) return -3; else{ balance += result; return 0; } } // 引き出し public int withdraw(String name,String amount){ // name:口座名 w_amount:引出額 int result; try{ result = Integer.parseInt(amount); }catch(NumberFormatException e){ if(this.showBalance(name) == -7) return -7; else return -4; } result = Integer.parseInt(amount); if(result <= 0) return -3; else if(result > balance) return -1; else{ balance -= result; return 0; } } }

java

import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class OpenServlet extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html; charset=UTF-8"); PrintWriter pw = response.getWriter(); pw.println( "<!DOCTYPE html>" +"<html>" +"<head>" +"<meta charset=\"utf-8\">" +"</head>" +"<body>" +"<div class=\"main\">" +"<h1>口座開設</h1>" +"<form action=\"bank\" method=\"GET\">" +"<input type=\"hidden\" name=\"command\" value=\"open\">" +"<div class=\"input\">" +"<label for=\"account\">口座名</label>" +"<input type=\"text\" name=\"name\" placeholder=\"入力された口座名\">" +"<input type=\"submit\" value = \"確認\">" +"</div>" +"</form>" +"<a class=\"cancel\" href=\"index.html\">キャンセル</a>" +"</div>" +"</body>" +"</html>"); } }

html

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>口座操作画面</title> </head> <body> <center> <div id="top-main"> <h1>いらっしゃいませ</h1> <h2>操作をお選び下さい</h2> </div> <!-- 選択 --> <nav class="menu"> <ul> <li class="menu_item"><a href="open">口座開設</a></li> <li class="menu_item"><a href="close">口座解約</a></li> <li class="menu_item"><a href="deposit">お預入れ</a></li> <li class="menu_item"><a href="withdraw">お引出し</a></li> <li class="menu_item"><a href="balance">残高照会</a></li> </ul> </nav> </center> </body> </html>

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

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コンテナです。