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

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

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

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

Java

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

Eclipse

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

Tomcat

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

0回答

2508閲覧

JSPでJSTLを使用するとエラーが発生。

shin_15

総合スコア0

JSP

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

Java

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

Eclipse

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

Tomcat

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/09/16 01:16

編集2021/09/16 01:20

前提・実現したいこと

当方は初心者です。
時間があまりなく、
完全に行き詰ったので、ここに記載しました。

todoのwebアプリを作成してまして
javaでmysplからデータを取り出してMemberのリストに入れて
そのデータをjspで受け取って表示したいです。
デバッグしてjava側でlistに想定通りのデータが入っていることは確認できてますが
jspで受け取って表示がうまくいかないです。

jspの<c:forEach var="member" items="${members}">で
不明なタグ (c:forEach) です。と警告が出ていたので
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>を追加し

下記をlibに設置したところブラウザ上でエラーが発生しました。
jakarta.servlet.jsp.jstl-api-2.0.0.jar
jakarta.servlet.jsp.jstl-2.0.0.jar

現在jspの<c:forEach var="member" items="${members}">で以下の警告が出ています。
A problem was encountered using TagExtraInfo class org.apache.taglibs.standard.tei.ForEachTEI for

ずっと調査してますが進まないので、解決方法を教えていただけると幸いです。

環境は
eclipse 4.20.0
tomcat10
java16
動的webプロジェクト

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

イメージ説明

ブラウザ画面(文字数制限のため減らしてます。)

### 該当のソースコード HTTPステータス 500 – Internal Server Error タイプ 例外報告 メッセージ java.lang.NoClassDefFoundError: jakarta.servlet.jsp.tagext.TagLibraryValidator 説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。 例外 jakarta.servlet.ServletException: java.lang.NoClassDefFoundError: jakarta.servlet.jsp.tagext.TagLibraryValidator org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333) jakarta.servlet.http.HttpServlet.service(HttpServlet.java:777) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) info.searchman.HelloWorld.doGet(HelloWorld.java:51) jakarta.servlet.http.HttpServlet.service(HttpServlet.java:668) jakarta.servlet.http.HttpServlet.service(HttpServlet.java:777) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 根本原因 java.lang.NoClassDefFoundError: jakarta.servlet.jsp.tagext.TagLibraryValidator java.base/java.lang.VMAccess.findClassOrNull(Native Method) java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:1105) java.base/java.lang.VMAccess.findClassOrNull(Native Method) java.base/java.lang.Access.findBootstrapClassOrNull(Access.java:184) java.base/jdk.internal.loader.ClassLoaders$BootClassLoader.loadClassOrNull(ClassLoaders.java:135) java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:881) java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:857) java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:820) java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:1111) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1354) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 根本原因 java.lang.ClassNotFoundException: jakarta.servlet.jsp.tagext.TagLibraryValidator java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:1107) java.base/java.lang.VMAccess.findClassOrNull(Native Method) java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:1105) java.base/java.lang.VMAccess.findClassOrNull(Native Method) java.base/java.lang.Access.findBootstrapClassOrNull(Access.java:184) java.base/jdk.internal.loader.ClassLoaders$BootClassLoader.loadClassOrNull(ClassLoaders.java:135) java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:881) java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:857) java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:820) java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:1111) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1354) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1252) org.apache.jasper.compiler.TagLibraryInfoImpl.createValidator(TagLibraryInfoImpl.java:355)

・Member.java

package bean; public class Member { public String id; private String name; private String priority; private String Deadline; private String created; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPriority() { return priority; } public void setPriority(String priority) { this.id = priority; } public String getDeadlined() { return Deadline; } public void setDeadline(String Deadline) { this.id = Deadline; } public String getCreated() { return created; } public void setCreated(String created) { this.id = created; } public Member(String id, String name, String priority, String Deadline, String created) { this.id = id; this.name = name; this.priority = priority; this.Deadline = Deadline; this.created = created; } public Member() { // TODO 自動生成されたコンストラクター・スタブ } }

・TODO.java

package info.searchman; import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import bean.Member; import jakarta.annotation.Resource; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @Resource(name="jdbc/todo") public class TODO extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { try { // List を生成 List<Member> list = new ArrayList<Member>(); Context context = new InitialContext(); DataSource ds = (DataSource)context.lookup("java:comp/env/jbdc/todo"); Connection con = ds.getConnection(); // データベースへ SQL 文を発行 Statement stmt = con.createStatement(); String sql = "SELECT * from todo.tasks"; ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { String id = rs.getString("id"); String name = rs.getString("name"); String priority = rs.getString("priority"); String Deadline = rs.getString("Deadline"); String created = rs.getString("created"); list.add(new Member(id,name,priority,Deadline,created)); } request.setAttribute("members", list); getServletContext().getRequestDispatcher("/WEB-INF/todo.jsp").forward(request, response); rs.close(); stmt.close(); } catch (SQLException e) { e.printStackTrace(); } catch (NamingException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } finally { System.out.println("配列の出力を終了しました"); } } }

・todo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.ArrayList" %> <%@ page import="bean.Member" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>TODOアプリ</title> </head> <link rel="stylesheet" href="main.css"> <body> <label class="todo_label1" for="todo_label1">ToDo一覧</label> <body> <br> 優先度: <select> <option>低</option> <option selected>中</option> <option>高</option> </select> <label>期限: <input type="date"> ~ <input type="date"></label> <button id="serch" type="button" class="button-search" id="button-search">検索</button> <a href="http://localhost:8080/TODO_web/src/main/webapp/registor.html" class="button-register" id ="registor">新規登録</a> <table class="tbl-r01"> <tr> <th>優先度</th> <th>登録日</th> <th>ToDo</th> <th>期限</th> <th></th> <th></th> </tr> <c:forEach var="member" items="${members}"> <tr> <td>${member.id }</td> <td>${member.name}</td> <td>${member.priority }</td> <td>${member.Deadline }</td> <td>${member.created }</td> </tr> </c:forEach> </table> </body> </html>

web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" 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>todo</servlet-name> <servlet-class>info.searchman.TODO</servlet-class> </servlet> <servlet-mapping> <servlet-name> todo </servlet-name> <url-pattern> /servlet/todo </url-pattern> </servlet-mapping> <display-name>MySQL DataSource Example</display-name> <resource-ref> <description>MySQL Datasource example</description> <res-ref-name>jdbc/todo</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> </web-app> context.xml
<Context> <Resource name="jbdc/todo" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="admin" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/todo"/> </Context> ```

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問