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

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

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

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

Java

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Eclipse

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

servlet

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

Q&A

解決済

1回答

1791閲覧

Java Servlet & Jsp ログイン証認 "HTTPステータス 500 – Internal Server Error"が出て困っています。お力をお貸しください!!

RYU

総合スコア13

JSP

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

Java

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Eclipse

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

servlet

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

0グッド

1クリップ

投稿2022/07/19 14:44

編集2022/07/20 23:01

前提

現在、簡易的なログイン証認機能の実装をしているのですが、サーバーで実行した際に”HTTPステータス 500 – Internal Server Error”が出てしまい困っています。
色々と試しましたが、自分では解決できないと判断し、質問させて頂くことにしました。
ご教授頂ければ幸いです。宜しくお願いします。

試したこと

・クラスパスにあるJarファイルを除去。libフォルダに直接配置。(ネットで調べた出てきた解決策)
・ファイル名、ファイル構造の見直し。

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

コンソール
イメージ説明

ブラウザ
イメージ説明

該当のソースコード

index.jsp

Java

1<%@ page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J"%> 2<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3<html> 4<head> 5<title>ログイン画面</title> 6</head> 7<body> 8<form action="certification" method="post"> 9<table> 10<tr> 11<td >メール</td> 12<td><input type="text" name="mail" maxlength="256"/></td> 13</tr> 14<tr> 15<td>パスワード</td> 16<td><input type="password" name="password" maxlength="32"/></td> 17</tr> 18<tr> 19<td> 20<input type="submit" name="submit" value="ログイン"/> 21</td> 22</tr> 23</table> 24<p> 25<c:if test="${!empty errorMessages}"> 26<font color="red">名前かパスワードが違います。<br>再度入力して下さい。</font> 27</c:if> 28</form> 29</body> 30</html>

LoginServlet.java

Java

1package servlet; 2 3import java.io.IOException; 4import java.sql.Connection; 5import java.sql.DriverManager; 6import java.sql.PreparedStatement; 7import java.sql.ResultSet; 8import java.sql.SQLException; 9import java.util.ArrayList; 10import java.util.List; 11 12import javax.servlet.ServletException; 13import javax.servlet.annotation.WebServlet; 14import javax.servlet.http.HttpServlet; 15import javax.servlet.http.HttpServletRequest; 16import javax.servlet.http.HttpServletResponse; 17 18import beans.LoginBean; 19 20@WebServlet(urlPatterns = {"/certification"}) 21public class LoginServlet extends HttpServlet{ 22 private static final long serialVersionUID = 1L; 23 @Override 24 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { 25 try { 26 String sql = "SELECT name FROM imada.login WHERE mail = ? AND password = ?"; 27 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/imada?serverTimezone=Asia/Tokyo","root","***"); --パスワードはあえて伏せています。 28 PreparedStatement ps = connection.prepareStatement(sql); 29 LoginBean bean = new LoginBean(); 30 bean.setMail(request.getParameter("mail")); 31 bean.setPassword(request.getParameter("password")); 32 ps.setString(1,bean.getMail()); 33 ps.setString(2,bean.getPassword()); 34 ResultSet rs = ps.executeQuery(); 35 List<LoginBean> user = toUserList(rs); 36 if (user.isEmpty() == true) { 37 List<String> messages = new ArrayList<String>(); 38 messages.add("ログインに失敗しました。"); 39 request.setAttribute("errorMessages", messages); 40 getServletContext().getRequestDispatcher("/index.jsp").forward(request,response); 41 } else if (2 <= user.size()) { 42 throw new IllegalStateException("2 <= userList.size()"); 43 } else { 44 request.getSession().setAttribute("login", user.get(0)); 45 getServletContext().getRequestDispatcher("/certification.jsp").forward(request,response); 46 } 47 rs.close(); 48 ps.close(); 49 connection.close(); 50 51 } catch (Exception e) { 52 e.printStackTrace(); 53 } 54 } 55 private List<LoginBean> toUserList(ResultSet rs) throws SQLException{ 56 List<LoginBean> ret = new ArrayList<LoginBean>(); 57 try { 58 while (rs.next()) { 59 String name = rs.getString("name"); 60 LoginBean user = new LoginBean(); 61 user.setName(name); 62 ret.add(user); 63 } 64 } catch (Exception e) { 65 e.printStackTrace(); 66 } 67 return ret; 68 } 69} 70

LogoutServlet.java

Java

1package servlet; 2 3import java.io.IOException; 4 5import javax.servlet.ServletException; 6import javax.servlet.annotation.WebServlet; 7import javax.servlet.http.HttpServlet; 8import javax.servlet.http.HttpServletRequest; 9import javax.servlet.http.HttpServletResponse; 10 11@WebServlet(urlPatterns = {"/logout"}) 12public class LogoutServlet extends HttpServlet{ 13 private static final long serialVersionUID = 1L; 14 @Override 15 protected void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException { try{ 16 request.getSession().invalidate(); 17 }catch(Exception e){ 18 throw new ServletException(e); 19 } 20 getServletContext().getRequestDispatcher("/index.jsp").forward(request,response); 21 } 22 23}

certification.java

Java

1<%@ page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J"%> 2<html> 3<head> 4<title>認証画面</title> 5</head> 6<body> 7<table> 8<tr> 9<td> 10ようこそ${login.name}さん。 11</td> 12</tr> 13<tr> 14<td> 15<form action="logout" method="post"> 16<input type="submit" name="submit" value="ログアウト"/> 17</form> 18</td> 19</tr> 20</table> 21</body> 22</html>

LoginBean.java

Java

1package beans; 2public class LoginBean{ 3 private String mail; 4 private String password; 5 private String name; 6 public void setMail(String mail){ 7 this.mail = mail; 8 } 9 public String getMail(){ 10 return mail; 11 } 12 public void setPassword(String password){ 13 this.password = password; 14 } 15 public String getPassword(){ 16 return password; 17 } 18 public void setName(String name){ 19 this.name = name; 20 } 21 public String getName(){ 22 return name; 23 } 24}

web.xml

<?xml version="1.0" encoding="Windows-31J"?> <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee_9.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" version="5.0"> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>servlet.LoginServlet</servlet-class> </servlet> <servlet> <servlet-name>LogoutServlet</servlet-name> <servlet-class>servlet.LogoutServlet</servlet-class> </servlet> <servlet> <servlet-name>LoginBean</servlet-name> <servlet-class>beans.LoginBean</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/servlet/LoginServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>LogoutServlet</servlet-name> <url-pattern>/servlet/LogoutServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>LoginBean</servlet-name> <url-pattern>/beans/LoginBean</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>

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

Windows - 10
Microsoft Edge - 103.0.1264.62
Java - 17
Tomcat - 9
MySQL -8.0
mysql-connector-java - 8.0.29


現在のファイル構造
イメージ説明

ビルドパス
イメージ説明

環境変数
イメージ説明

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

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

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

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

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

K_3578

2022/07/20 01:51

NoClassDefFoundErrorなんだからファイル名が誤ってるかファイルがそもそもないのでは
RYU

2022/07/20 02:00

そうですよね、自分ではどのファイル名が間違っているのか、何のファイルが足りないのかがいまいちわからなくて、、、 もう少し調べてみます。アドバイスありがとうございます。
dodox86

2022/07/20 02:24

> 色々と試しましたが、 具体的に何を試しましたか? 回答やコメントが重複することもあり、そんな場合は無駄な時間を過ごすことになるので、きちんと説明しましょう。 私の方では精査はしていませんがエラーの内容として以下の質問内容とかぶるようです。こちらが参考になりませんか。 [JSTLを用いたjspで起こるエラーを解決したい] https://teratail.com/questions/350891
RYU

2022/07/20 02:57

はい、投稿の方に追記しようと思います。 URLありがとうございます。確認してみます。
guest

回答1

0

ベストアンサー

エラー解析

java.lang.NoClassDefFoundError: jakarta/servlet/jsp/tagext/TagLibraryValidator
上記から読み解くと必要なライブラリがクラスパスに通っていないようです。

エラー原因

index.jsp

1<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

解決方法

  1. https://tomcat.apache.org/download-taglibs.cgi
    • 上記から、taglibs-standard-impl-1.2.5.jartaglibs-standard-spec-1.2.5.jarをダウンロード
  2. 動的Webプロジェクトのsrc/main/webapp/WEB-INF/libtaglibs-standard-impl-1.2.5.jartaglibs-standard-spec-1.2.5.jarを配置。

イメージ説明
イメージ説明
3. サーバー再起動。

タグライブラリ読み動作確認サンプル

NewFile.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<c:if test="true"/> 5<!DOCTYPE html> 6<html> 7<head> 8<meta charset="UTF-8"> 9<title>Insert title here</title> 10</head> 11<body> 12 <div>hello world!</div> 13</body> 14</html>

以上で解決できないでしょうか?

投稿2022/07/20 05:13

編集2022/07/20 08:08
umed0025

総合スコア851

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

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

RYU

2022/07/20 06:35

ご丁寧にありがとうございます! 頂いたリンクからtaglibsのjarファイルをダウンロードしlibフォルダー内に追加で配置し、同様にビルドパスにも追加しましたが、変わらずHTTPステータス500エラーがでてしまいます。 また、新しい”警告”も出てしまいました。 下に貼っておきます。↓ "c:if" (org.apache.taglibs.standard.tag.rt.core.IfTag) のタグ・ハンドラー・クラスが Java ビルド・パスで見つかりませんでした。" index.jsp /LoginTest/Webcontent 行25 JSP問題
umed0025

2022/07/20 07:06

`taglibs-standard-spec-1.2.5.jar`が抜けてました。追加してみていただけますか?
RYU

2022/07/20 09:08 編集

`taglibs-standard-spec-1.2.5.jar`も同様に追加しましたが、変わりませんでした。 ”現在のファイル構造”の項目に新しく写真を追加したのですが、このように現在5つのJarファイルをlibフォルダ内とビルドパスのクラスパス内に配置している状態なのですが、これで合っていますでしょうか?
umed0025

2022/07/20 08:05

画面ショットを更新しました。 ・jakarta.servlet.jsp.stl-2.0.0.jar ・jakarta.servlet.jsp.stl-api-2.0.0.jar ・servlet-api.jar 上記をいれずに動作することを確認してます。なんだろう?
RYU

2022/07/20 09:14

・jakarta.servlet.jsp.stl-2.0.0.jar ・jakarta.servlet.jsp.stl-api-2.0.0.jar ・servlet-api.jar この3つのJarファイルをlibフォルダとビルドパスの両方から削除したところ、無事に動きました! なぜこの3つのJarファイルがなくても動くのですか?ご教授頂けますと幸いです。
umed0025

2022/07/20 10:20

JavaServer PagesをJSPと統一して記述する。 ・jakarta.servlet.jsp.stl-2.0.0.jar ・jakarta.servlet.jsp.stl-api-2.0.0.jar については、JSP3.0が必要なためTomcat9では動作するかどうかわからない状態。 taglibs-standard-impl-1.2.5.jarとtaglibs-standard-spec-1.2.5.jarはJSP2.1系以降対応。 ・https://jakarta.ee/specifications/tags/2.0/jakarta-tags-spec-2.0.html#container-requirement ・ここに、JSP3.0が必要と記述されている。 ・https://tomcat.apache.org/taglibs/standard/ ・JSP2.1以降に対応したタグライブラリはここに記述されている。 ・https://tomcat.apache.org/whichversion.html ・Tomcat9のJSP Specは2.3 ・servlet-api.jar についてはサーバーライブラリに含まれているので不要。
RYU

2022/07/20 14:01

なるほど、そうなんですね。大変勉強になりました! この度は本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.53%

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

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

質問する

関連した質問