Проблемный JSTL-импорт: java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.views.users_jsp. Как это исправить?

Рейтинг: 0Ответов: 0Опубликовано: 14.03.2023

При попытке запустить сервер (использую Tomcat 10) вижу такое сообщение об ошибке:

java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.views.users_jsp

Вот скриншот:

скриншот ошибки

Комментируя различные участки обозначенного JSP-файла, я понял, что Tomcat'у не нравится мой JSTL-импорт: если его убрать (и связанные с этим импортом участки кода), то вью отображается. Импорт я не писал вручную, его добавила среда разработки. Мне сложно понять, что с этим импортом не то.

В моём pom-файле есть несколько зависимостей, связанных с сервлетами, а именно такие:

    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>6.0.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>jakarta.servlet.jsp.jstl</groupId>
        <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
        <version>3.0.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>jakarta.servlet.jsp</groupId>
        <artifactId>jakarta.servlet.jsp-api</artifactId>
        <version>3.1.1</version>
        <scope>provided</scope>
    </dependency>
    
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>jakarta.servlet.jsp.jstl</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
    </dependency>

Это наверняка избыточный набор. Импорт, судя по всему, зависит только от "рыбной" зависимости. То, что их столько, отражает мои попытки решить проблему самостоятельно, экспериментируя с pom'ом (в том числе следуя различным рекомендациям на StackOverflow)

Возможно, ошибка как-то связана с этим покраснением (а может, нет):

введите сюда описание изображения

введите сюда описание изображения

Мне удалось избавиться от него добавив второй импорт из пакета Спринга вот так:

как мне удалось избавиться от импорта из пакета спринга

Но ошибка выше всё равно вылазит.

Вот вью целиком. Теги на закрытие проверял:

<%@ taglib prefix="j" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="t" uri="http://www.springframework.org/tags" %>

<%-- Эти закомментированные строчки – это то, что я пробовал добавлять в код --%>
<%--<%@ page contentType="text/html;charset=UTF-8" language="java" %>--%>
<%--<%@ taglib prefix="j" uri="http://java.sun.com/jstl/core" %>--%>
<%--<!DOCTYPE html>--%>

<html>
<body>
<h2>Users:</h2>
<table>
    <thead>
    <tr>
        <th scope="col">Name</th>
        <th scope="col">Last name</th>
        <th scope="col">Age</th>
        <th scope="col">Email</th>
        <th scope="col">Operations</th>
    </tr>
    </thead>
    <tbody>
    <j:forEach var="user" items="${userList}">

        <t:url var="updateButton" value="/updateUser">
            <t:param name="userId" value="${user.id}"/>
        </t:url>
        <t:url var="deleteButton" value="/deleteUser">
            <t:param name="userId" value="${user.id}"/>
        </t:url>
        <tr>
            <td>${user.name}</td>
            <td>${user.lastName}</td>
            <td>${user.age}</td>
            <td>${user.email}</td>
            <td>
                <input type="button" value="Update" onclick="window.location.href='${updateButton}'"/>
                <input type="button" value="Delete" onclick="window.location.href='${deleteButton}'"/>
            </td>
        </tr>
    </j:forEach>
    </tbody>
</table>
<input type="button" value="Add" onclick="window.location.href = '/add'"/>
</body>
</html>

Я изучил первую страницу поисковой выдачи Гугла по запросу:

org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.views"

(с и без добавления слова "glassfish"). Это значит, что я был и на этой странице тоже. Не помогло.

Не знаю, принято ли тут давать ссылки на репо, но могу дать, если надо

Скажите, пожалуйста, как мне решить эту проблему?

Ответы

Ответов пока нет.