Struts Абсолютное значение uri: http://struts.apache.org/tags-bean не может быть разрешено ни в файле web.xml, ни в файлах jar, развернутых с помощью этого приложения. - PullRequest
0 голосов
/ 04 ноября 2018

Использование Servlet 3.0, Maven 4.0, JDK 8 с соответствием 1.8. Я не знаю, связана ли проблема с тем, что Eclipse не может правильно построить проект на основе библиотек, или это tomcat. Это может быть проблема с разрешением, несмотря на то, что я запускаю tomcat и eclipse от имени пользователя root, но кто знает. На данный момент у меня заканчиваются идеи.

Импортированные библиотеки

Индекс.jsp

    <%@ page language="java" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type">
<title>Page d'Acceuil</title>
</head>
<body>
    <html:form action="/ajouter">
        <table border="1">
            <caption>Gestion des etudiants STRUTS 1</caption>
            <tr>
                <td>Nom:<input type="text" name="nom"/></td>
                <td>Prenom:<input type="text" name="prenom"/></td>
                <td>Cin:<input type="text" name="cin" /></td>
            </tr>
        <tr>
            <td><input type="submit" value="Recherche Etudiant" onclick="recherche()"/></td>
            <td><input type="submit" value="Ajouter Etudiant" onclick="ajout()"/></td>
            <td><input type="submit" value="Supprimer Etudiant" onclick="sup()"/></td>
        </tr>
    </table>
    </html:form>
</body>
        <script type="text/javascript">
            function ajout(){
                this.document.forms[0].action="ajouter.do";
                this.document.forms[0].submit();
            }
            function recherche(){
                this.document.forms[0].action="rechercher.do";
                this.document.forms[0].submit();
            }
            function sup(){
                this.document.forms[0].action="supprimer.do";
                this.document.forms[0].submit();
            }
        </script>
</html>

Мои запросы index.jsp приводят либо к этой ошибке:

    Type Exception Report

Message The absolute uri: http://struts.apache.org/tags-bean cannot be resolved in either web.xml or the jar files deployed with this application

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

org.apache.jasper.JasperException: The absolute uri: http://struts.apache.org/tags-bean cannot be resolved in either web.xml or the jar files deployed with this application
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:55)
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:277)
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:75)
    org.apache.jasper.compiler.TagLibraryInfoImpl.generateTldResourcePath(TagLibraryInfoImpl.java:250)
    org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:125)
    org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:421)
    org.apache.jasper.compiler.Parser.parseDirective(Parser.java:479)
    org.apache.jasper.compiler.Parser.parseElements(Parser.java:1435)
    org.apache.jasper.compiler.Parser.parse(Parser.java:139)
    org.apache.jasper.compiler.ParserController.doParse(ParserController.java:227)
    org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:201)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:358)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:338)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:325)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:580)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:363)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Или вот этот:

    Type Exception Report

Message java.lang.ClassNotFoundException: org.apache.jsp.index_jsp

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
    org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:176)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Root Cause

java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
    java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:131)
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:62)
    org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:171)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Note The full stack trace of the root cause is available in the server logs.

Мой web.xml выглядит следующим образом, как вы можете видеть, даже если я, возможно, не должен добавлять эти теги туда, поскольку я использую сервлет 3.0, я все равно объявляю их на всякий случай.

    <?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Etudiant</display-name>

  <!-- Servlet controleur de Struts -->
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <!-- Mapping des url avec la servlet -->
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

  <!-- page d'accueil de l'application -->
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

  <jsp-config>
  <taglib>
     <taglib-uri>
      http://struts.apache.org/tags-bean
     </taglib-uri>
     <taglib-location>
      /WEB-INF/struts-bean.tld
     </taglib-location>
</taglib>
<taglib>
     <taglib-uri>
      http://struts.apache.org/tags-html
     </taglib-uri>
     <taglib-location>
      /WEB-INF/struts-html.tld
     </taglib-location>
</taglib>
<taglib>
     <taglib-uri>
      http://struts.apache.org/tags-logic
     </taglib-uri>
     <taglib-location>
      /WEB-INF/struts-logic.tld
     </taglib-location>
</taglib>
  </jsp-config>
</web-app>

Моя сборка развертывания и путь сборки java также правильно обновлены, чтобы включить эти библиотеки, но, похоже, все это не решает проблему.

Если у вас есть идея, я с удовольствием изучу ее.

1 Ответ

0 голосов
/ 05 ноября 2018

РЕШЕНИЕ:

Мне удалось решить эту проблему, выполнив следующие действия:

1) Удалите все слова. и распорки банок из lib.

2) Преобразовать проект в естественную природу

3) Добавьте следующие зависимости в файл pom.xml

 <dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.struts/struts-core -->
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts-core</artifactId>
        <version>1.3.10</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.struts/struts-taglib -->
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts-taglib</artifactId>
        <version>1.3.10</version>
    </dependency>
</dependencies>

4) Используйте соответствующую конфигурацию Struts dtd в заголовке struts-config, для меня это было следующим, так как я использовал Struts 1.3:

    <!DOCTYPE struts-config PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
   "http://struts.apache.org/dtds/struts-config_1_3.dtd">

5) Убедитесь в правильности синтаксиса скобок (-ов) действия (-ов):

<action path="/ajouter" input="/index.jsp" name="myFormBean"
         type="org.your.pckg.src.MyServletAction">
            <forward name="success" path="/redirection_page.jsp" />
        </action>

И это, в общем-то, вам также может понадобиться изменить соответствие Java, так как мне пришлось понизить его с 1,8 до 1,7, чтобы оно заработало.

В конечном итоге это не отвечает на вопрос, почему предыдущие страницы ошибок отображались, несмотря на тот факт, что все библиотеки были, по-видимому, хорошо импортированы и объявлены. Я подозреваю, что корень проблемы заключается в проблеме совместимости между tomcat или eclipse и используемые jar-файлы, предотвращающие доступ компилятора к tld-файлам и их чтение. В любом случае, кажется, что через это видно, что сервер не может развернуть tlds, причина этого еще не определена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...