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

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

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

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

Webサーバー

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

Eclipse

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

Q&A

3回答

3037閲覧

Javaで動的webプロジェクトの作成をしていたところ、HTTPステータス 500 – Internal Server Errorが出てしまい解決できない

mayuphoo

総合スコア13

Java

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

Webサーバー

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

Eclipse

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

0グッド

0クリップ

投稿2021/06/10 06:08

編集2021/06/10 06:14

前提・実現したいこと

現在Eclipceを用いて、簡単な、Javaの動的Webアプリケーションを作っています。
具体的には、HTMLの画面に氏名と年齢を入力してリクエストすると、レスポンスとして入力した名前と年齢が、文字列となり帰ってくるという仕組みのものを作成しています。

エラーの原因となっているのは、Jspファイル内のキャストをしている部分で、HTML画面で名前と年齢を入力してServletにリクエストを行ったところで500エラーになってしまいます。
何回見直してみても、どう記述すればエラーが解消されるのかがわからず、困っています‥。

どなたか、ご教授いただけると幸いです。
宜しくお願いいたします。

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

HTTPステータス 500 – Internal Server Error タイプ 例外報告 メッセージ JSPのクラスをコンパイルできません: 説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。 例外 org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: JSPファイル: [/output.jsp] の中の[12]行目でエラーが発生しました Human cannot be resolved to a type 9: <body> 10: 11: <% 12: Human human; 13: human = (Human)request.getAttribute("human"); 14: %> 15: JSPファイル: [/output.jsp] の中の[13]行目でエラーが発生しました Human cannot be resolved to a type 10: 11: <% 12: Human human; 13: human = (Human)request.getAttribute("human"); 14: %> 15: 16: <p>入力された情報は以下です</p> Stacktrace: org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103) org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:213) org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:482) org.apache.jasper.compiler.Compiler.compile(Compiler.java:392) org.apache.jasper.compiler.Compiler.compile(Compiler.java:362) org.apache.jasper.compiler.Compiler.compile(Compiler.java:346) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:605) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:400) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:378) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:326) javax.servlet.http.HttpServlet.service(HttpServlet.java:733) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) InputServlet.doPost(InputServlet.java:29) javax.servlet.http.HttpServlet.service(HttpServlet.java:652) javax.servlet.http.HttpServlet.service(HttpServlet.java:733) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

該当のソースコード

#####input.html(名前と年齢の入力画面)

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <p>名前と年齢を入力してください</p> <form action="InputServlet" method="post"> <input type="text" name="name"><br> <input type="text" name="age"><br> <input type="submit" value="送信"> </form> </body> </html>

#####Human.java(人間クラス)

public class Human { private String name; private int age; public Human(String name, int age) { this.name = name; this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } }

#####input.servlet.java(サーブレット)

import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/InputServlet") public class InputServlet extends HttpServlet { protected void doPost( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); String age = request.getParameter("age"); int Age = Integer.parseInt(age); Human human = new Human(name, Age); //モデルがかかわる処理はここだけ。 request.setAttribute("human", human); RequestDispatcher rd = request.getRequestDispatcher("output.jsp"); rd.forward(request, response); } }

#####output.jsp(エラー発生ファイル)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% Human human; human = (Human)request.getAttribute("human"); %> <p>入力された情報は以下です</p> <p>名前:<%= human.getName() %></p> <p>年齢:<%= human.getAge() %></p> </body> </html>

試したこと

・構文間違いとスペルミスがないかの確認。
・サーバーの再起動

補足情報(FW/ツールのバージョンなど)

・実行したURLは↓以下です。

http://localhost:8080/DatebaseSample/InputServlet

・テキストエディタはEclipceを使用しています。
・サーバーはApache Tomcat/9.0.44 を使用しています。

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

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

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

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

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

guest

回答3

0

JSPファイルである「output.jsp」中のコードでHumanクラスを利用しようとするものの、Humanクラスが属するパッケージはoutput.jspが属するものとは違う為に未定義のクラス扱いとなってしまい、JSPファイルのコンパイルに失敗しているのがエラーの原因です。

現状、Human.java のソースファイルではパッケージ名が指定されていないようです。そうだとHumanクラスはデフォルトパッケージ(無名パッケージ / Unnamed package)になってしまい、output.jspでimportしようにもできなくなります。ですのでまず、Human.java ではパッケージの宣言をします。

Java

1package tq343278; 2 3public class Human { 4 private String name 5... 6}

で、output.jspでは冒頭でimportするようにします。

JSP

1<%@ page import="tq343278.*" %> 2...

InputServlet.java でも必要であればimportするか、Humanクラスと同じパッケージに属するように修正してください。

ちなみにouput.jspファイルがコンパイルされて実行されるとき、そのパッケージ名を含めた完全修飾クラス名は、「org.apache.jsp.output_jsp」となります。JSP内ではパッケージ名は以下のコードで確認できます。

JSP

1<%=this.getClass().getPackage().getName()%> 2

投稿2021/06/10 08:21

dodox86

総合スコア9256

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

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

0

エラーメッセージちゃんと読めばわかると思いますが・・・。

Human cannot be resolved to a type

ってことなんで「Humanを型に解決出来ません」って言ってます。
そりゃ、output.jspで

JSP

1<% 2 Human human; 3 human = (Human)request.getAttribute("human"); 4 %>

何の脈絡もなくこう書かれていたら
このHumanって奴誰なんだよって事になりますよね。

一応、パッケージ名含めた完全修飾名で記述すれば使えますが、

JSP

1<% 2 パッケージ名.Human human; 3 human = (パッケージ名.Human)request.getAttribute("human"); 4 %>

冗長にも程があるのでインポート宣言しましょう。それでクラス名だけで記述できるようになります。


というかそもそも実行前にEclipseがエラー吐いて怒りそうな気がしますが・・・。

投稿2021/06/10 06:44

編集2021/06/10 07:53
K_3578

総合スコア1282

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

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

K_3578

2021/06/10 08:39 編集

個人的にはスクリプトレットがJSP上で使われてるだけでアレルギー反応起こしてます。
guest

0

Humanクラスをimportしないといけないのでは。

投稿2021/06/10 06:25

m.ts10806

総合スコア80875

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問