使用符合规范1.8的Servlet 3.0,Maven 4.0,JDK 8。 我不知道问题是由于Eclipse无法正确针对库构建项目,还是由于tomcat。尽管我以root身份同时运行tomcat和eclipse,但这可能是一个权限问题,但是谁知道呢。在这一点上,我开始耗尽想法。
index.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如下,您可以看到,即使自从我使用servlet 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构建路径也已正确更新,以包括那些库,但是这些似乎都不能解决问题。
如果您有任何想法,我很乐意调查一下。
答案 0 :(得分:0)
解决方案:
我已经按照以下步骤设法解决了这个问题:
1)删除所有顶级域名。并从lib中撑起罐子。
2)将项目转换为maven性质
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-config标头中使用相应的struts配置dtd,因为我使用的是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或tomcat之间的兼容性问题。 eclipse和使用的struts jar,阻止编译器访问tld文件并读取它们。 无论如何,这似乎似乎很清楚,这是服务器无法部署tlds的原因,尚待确定。
答案 1 :(得分:0)
我遇到了相同的错误,因为我分别添加的jar文件和另外在pom.xml中调用的jar文件之间发生冲突。确保以单一方式仅依靠一个罐子。我只通过Maven(pom.xml)添加了jar Maven Dependency jars