错误500 - 内部服务器错误java.lang.NoClassDefFoundError:javax / servlet / jsp / jstl / core / Config

问题描述 投票:5回答:4

我在weblogic server中部署war文件时遇到以下错误。我使用Maven创建了这个。

java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
at org.springframework.web.servlet.support.JstlUtils.exposeLocalizationContext(JstlUtils.java:97)
at org.springframework.web.servlet.view.JstlView.exposeHelpers(JstlView.java:135)
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:211)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:264)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:184)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3750)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3714)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2283)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2182)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1491)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:252)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

我有lib中的jstl-1.2和weblogic中的jstl-1.2。但是获得相同的异常。

我也尝试从war lib文件夹中删除jstl-1.2。即使获得相同的异常。

可能是什么原因?

这是我的pom

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>se.jo.joassivosWebApp</groupId>
  <artifactId>MApp</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>MApp Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>

 <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.4</version>
</dependency>


<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>jstl</artifactId>
	<version>1.2</version>
</dependency>

 <dependency>
	<groupId>antlr</groupId>
	<artifactId>antlr</artifactId>
	<version>2.7.7</version>
</dependency>

 <dependency>
	<groupId>commons-collections</groupId>
	<artifactId>commons-collections</artifactId>
	<version>3.2</version>
</dependency>
<dependency>
	<groupId>commons-logging</groupId>
	<artifactId>commons-logging</artifactId>
	<version>1.1.1</version>
</dependency>
<dependency>
	<groupId>dom4j</groupId>
	<artifactId>dom4j</artifactId>
	<version>1.6.1</version>
</dependency>

<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate</artifactId>
	<version>3.2.6.ga</version>
</dependency>
<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-annotations</artifactId>
	<version>3.3.0.ga</version>
</dependency>
<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-commons-annotations</artifactId>
	<version>3.3.0.ga</version>
</dependency>

<dependency>
	<groupId>org.codehaus.jackson</groupId>
	<artifactId>jackson-mapper-asl</artifactId>
	<version>1.6.3</version>
</dependency>

<dependency>
	<groupId>javax.transaction</groupId>
	<artifactId>jta</artifactId>
	<version>1.1</version>
</dependency>
<dependency>
	<groupId>log4j</groupId>
	<artifactId>log4j</artifactId>
	<version>1.2.12</version>
</dependency>

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-orm</artifactId>
	<version>3.1.0.RELEASE</version>
</dependency>

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>3.1.0.RELEASE</version>
</dependency>
 <dependency>
       <groupId>com.oracle</groupId>
       <artifactId>ojdbc14</artifactId>
      <version>10.2.0.2.0</version>
</dependency>
 
  </dependencies>
<!--   <build>
    <finalName>MApp</finalName>
  </build> -->
  
<build>
        <finalName>MApp</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.0</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.1.1</version>
                <configuration>
                    <warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory>
                    <packagingExcludes>WEB-INF/lib/xercesImpl-2.0.2.jar,WEB-INF/lib/xml-apis-1.0.b2.jar</packagingExcludes>
                    
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.17</version>
                <configuration>
                    <argLine>-XX:-UseSplitVerifier</argLine>
                </configuration>
            </plugin>
        </plugins>
        
    </build>
 
  
</project>

这是我的war lib文件夹

enter image description here

enter image description here

java maven jsp servlets weblogic
4个回答
8
投票

在Weblogic,Websphere或JBoss或任何其他EJB容器上将pom.xml中servlet-api的maven中的依赖范围设置为“provided”。为jstl依赖做同样的事情。 ****它们已经作为应用程序服务器的一部分。绝对没有理由将servlet包装在你的jar中。****

确保它们不在war lib文件夹中。如果他们仍然需要检查传递依赖性。您可以通过从命令行执行“mvn dependency:tree"”找到它们。

在Tomcat或Jetty或其他servlet容器上。 jstl不是提供的库,因此您需要将其作为WAR-archive内部的一部分部署在WEB-INF / lib中。这可以说如果你使用maven,依赖的范围应该设置为“compile”。


0
投票

java.lang.NoClassDefFoundError:当类加载器尝试在运行时动态加载类时,没有.class文件时会引发此错误。当类文件也存在时,也会引发此异常。那种情况是,

  • 在初始化静态变量时。
  • 初始化静态块时引发异常。

在您的情况下,在'servlet-api'和'jstl'中声明'provided'。如果没有任何问题,请为大多数依赖项声明相同的内容。当您在POM.XML中声明特定依赖项时,您应该验证其他依赖项是否与它兼容。


0
投票

问题出在weblogic.xml上。我没有添加weblogic.xml.After添加带有prefer-web-inf-classes标签的weblogic.xml。现在应用程序工作正常。我添加了基于spring和hibernate的weblogic.xml和prefer- web-inf-classes标签。


-1
投票

基本上它是从jstl jar寻找核心taglib。尝试在下面添加到您的pom或替换现有的jstl依赖项:

<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>           
</dependency> You can also add <version>4.0.0-b01</version> if it needs.
Hope this helps. 
© www.soinside.com 2019 - 2024. All rights reserved.