简体   繁体   English

在Apache Tomcat上部署WAR文件-不起作用

[英]Deploying WAR file on Apache Tomcat - Not working

I implemented an API in Java using Eclipse and exported it in the form of a war file. 我使用Eclipse在Java中实现了一个API,并以war文件的形式将其导出。 It is working fine on the system I developed it on. 在我开发的系统上,它运行良好。

This is the web.xml 这是web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Favorite-API</display-name>
  <servlet>
    <servlet-name>Favorite-API</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>favorite.api</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Favorite-API</servlet-name>
    <url-pattern>/rest-videos/*</url-pattern>
  </servlet-mapping>
</web-app>

Now I want to deploy the API on another system. 现在,我想在另一个系统上部署API。 Hence I took the war file and deployed it on the Apache Tomcat server of the other machine, following the steps given here . 因此,按照此处给出的步骤,我取出了war文件并将其部署在另一台机器的Apache Tomcat服务器上。

But on running the API I am getting the following error: 但是在运行API时,出现以下错误:

HTTP Status 500 -   
________________________________


type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: Servlet.init() for servlet Favorite-API threw exception
  org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
  org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
  org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
  org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
  org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
  org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
  org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
  java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
  java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
  java.lang.Thread.run(Unknown Source)


root cause 

java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor
  com.sun.jersey.api.core.ScanningResourceConfig.init(ScanningResourceConfig.java:79)
  com.sun.jersey.api.core.PackagesResourceConfig.init(PackagesResourceConfig.java:104)
  com.sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.java:78)
  com.sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.java:89)
  com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:696)
  com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:674)
  com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:205)
  com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:376)
  com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:559)
  javax.servlet.GenericServlet.init(GenericServlet.java:160)
  org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
  org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
  org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
  org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
  org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
  org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
  org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
  java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
  java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
  java.lang.Thread.run(Unknown Source)


root cause 

java.lang.ClassNotFoundException: org.objectweb.asm.ClassVisitor
  org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)
  org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
  com.sun.jersey.api.core.ScanningResourceConfig.init(ScanningResourceConfig.java:79)
  com.sun.jersey.api.core.PackagesResourceConfig.init(PackagesResourceConfig.java:104)
  com.sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.java:78)
  com.sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.java:89)
  com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:696)
  com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:674)
  com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:205)
  com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:376)
  com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:559)
  javax.servlet.GenericServlet.init(GenericServlet.java:160)
  org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
  org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
  org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
  org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
  org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
  org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
  org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
  java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
  java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
  java.lang.Thread.run(Unknown Source)


note The full stack trace of the root cause is available in the Apache Tomcat/7.0.27 logs.

What is going wrong? 怎么了? Any help please. 请帮忙。

You might have some dependencies missing in your class path. 您的类路径中可能缺少一些依赖项。

java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor

Assume your development tomcat has this class/package but not in the tomcat which you are trying to deploy the war. 假设您的开发tomcat具有此类/程序包,但不在您尝试部署战争的tomcat中。

class def not found for servlet means something servlet api that is regularly available to tomcat is now missing for some reason. 找不到servlet的class def意味着tomcat经常可以使用的servlet api由于某种原因现在丢失了。 Possibly the jar file in tomcat's lib folder (maybe other jar files in the tomcat lib folder) have become corrupted or removed. 可能是tomcat的lib文件夹中的jar文件(可能是tomcat lib文件夹中的其他jar文件)已损坏或被删除。 Both have happened to me at times, bad virtual machine to work on, failed disk, or a maven based build process that would deploy additional api to the lib folder and delete things in there before copying the new lib files. 有时,这两种情况都发生在我身上,虚拟机无法正常工作,磁盘出现故障,或者基于Maven的构建过程会在复制新的lib文件之前将其他api部署到lib文件夹并删除其中的内容。

似乎您在$ TOMCAT_HOME / lib目录中缺少ObjectWeb ASM工件。

It sounds like the tomcat use does not have permissions to unpack the WAR file into relevant directories, which means the application itself cannot find required classes. 听起来像使用tomcat没有权限将WAR文件解压缩到相关目录中,这意味着应用程序本身无法找到所需的类。

Ensure that Tomcat can write to the temp, work and webapps folder, and their subdirectories. 确保Tomcat可以写入temp,work和webapps文件夹及其子目录。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM