失败 - 在上下文路径上部署应用程序/但上下文无法启动

时间:2015-02-02 15:45:53

标签: java tomcat web-applications

我在2个独立的网络应用程序中工作,后面和前面的应用程序。 有趣的是,当我运行后端时,我没有任何问题。但在前端我得到以下错误:

I have the following error in Netbeans 

NetBeans: Deploying on Apache Tomcat or TomEE
    profile mode: false
    debug mode: false
    force redeploy: true
Undeploying ...
undeploy?path=/
OK - Undeployed application at context path /
In-place deployment at D:\WebDevel\WebStore\WebFrontE\target\Web-1.0-SNAPSHOT
Deployment is in progress...
deploy?config=file%3A%2FC%3A%2FUsers%7E1%2FAppData%2FLocal%2FTemp%2Fcontext7815575477480252472.xml&path=/
FAIL - Deployed application at context path / but context failed to start

两者都在同一个Tomcat上运行。我的同事有相同的代码,它工作正常:-s

18 个答案:

答案 0 :(得分:3)

对于部署在服务器上的每个应用程序,

Context Path(或)Context Root必须是唯一的。

因此,您无法将具有相同上下文根的两个应用程序部署到同一服务器。对于您的两个应用程序,上下文路径似乎都是/

检查server.xml以查看它们具有的上下文路径。如果它们不是唯一的,那么更改它们以解决问题。

但是如果你想为两个应用程序提供相同的上下文根,那么你需要将它们部署在两个不同的服务器上。

了解更多信息: Tomcat Context paths configuration

答案 1 :(得分:1)

由于语法错误,我在使用 Java Web 时遇到此错误:

我的 Servlet 代码应该是这样的:

@WebServlet(name = "EleicaoServlet", urlPatterns = {"/EleicaoServlet", "/main", "/insert", "/edit", "/delete", "/update"})

但是我忘记在“/update”中输入“/”

@WebServlet(name = "EleicaoServlet", urlPatterns = {"/EleicaoServlet", "/main", "/insert", "/edit", "/delete", "update"})

我遇到了这个错误。

因此,如果以上都不起作用,您可能想检查您的代码,它可能是这样的愚蠢。

答案 2 :(得分:1)

我遇到了这个问题,经过许多无法解决的链接,找到了这个解决方案。编辑Tomee服务器上的server.xml,为appBase提供完全限定的路径:

<Host name="localhost"  appBase="C:\apache\apache-tomee-7.0.2-plume\webapps"
                  unpackWARs="true" autoDeploy="true">

答案 3 :(得分:1)

如果您的上下文未能很好地启动,则会出现以下错误。 实例:您有调用方法的上下文侦听器,并且该方法不存在。

答案 4 :(得分:1)

在尝试从jenkins到外部VM部署Spring Boot Web应用程序时,出现了以下相同错误。 在查看了tomcat日志后,我发现这是Java版本错误。我没有安装我的Spring Boot应用程序支持的正确的Java版本。 我安装了openjdk 8,并从vm中删除了java7,此问题已解决。

以下错误背后的实际原因可能很多。因此,请检查您的tomcat /logs/catalina.out目录中的确切错误。在詹金斯构建日志中,它没有给出实际错误。

失败-部署在上下文路径[/ webapp]但上下文的应用程序

https://www.youtube.com/watch?v=1jsKGhXmm4c

答案 5 :(得分:1)

我可能会迟到一些,但是会说这可能是由于Tomcat 8中工厂名称的更改所致。所以请执行以下步骤:

1)首先,查看您是否正在使用Tomcat 8或更高版本。

2)如果是,并且tomcat无法部署您的应用程序。在Debug模式下运行该应用程序,然后在Tomcat窗口中查看堆栈跟踪(底部。与Tomcat.log不同)。向下滚动窗口,查看是否可以找到这样的异常:
     原因:java.lang.NoClassDefFoundError:无法初始化类org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory

3)如果看到类似上面的内容,请打开META-INF / context.xml并在资源标签中替换或添加factory属性,方法是: factory =“ org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory”

4)重新启动tomcat并重新部署。

答案 6 :(得分:0)

我在netbeans上解决此类问题也遇到了麻烦。我整天都在摆脱这个问题。已经尝试了许多解决方案,但是直到我尝试删除项目的“目标”文件夹并没有解决任何问题之前,什么都没有发生!希望能帮助到你! :)

答案 7 :(得分:0)

这有点晚了,但对于任何可能面临同样错误的人来说。

对我来说,这个错误是由我的 servlet 中的错误语法引起的。

@WebServlet(urlPatterns = {"/x/login", "/x/register", "/x/logout", "x/createrestaurant"})

它看起来像上面那样,我得到了同样的错误。一段时间后,尝试部署在不同的服务器上(从 Tomcat 到 Glassfish),Glassfish 给了我更好的日志,我意识到语法应该是这样的

@WebServlet(urlPatterns = {"/x/login", "/x/register", "/x/logout", "/x/createrestaurant"}).

注意 x/createrestaurant 之前的 /

答案 8 :(得分:0)

我正面临着这个问题,在尝试了其他一些建议之后,以下事情对我来说很完美。

删除以下文件:

public class Library {

  public static void main(String [] args) {
    List<Book> library = new ArrayList<>();
    library.add(new Book("9780593098240", "Children of Dune"));
    library.add(new Book("9780593098233", "Dune Messiah"));
    library.add(new Book("9780441172719", "Dune"));
    // Just to show the sorting, based on multiple attributes.
    Collections.sort(library);
    System.out.println("Books in library: " + Arrays.toString(library.toArray()));

    // You would obviously have some code for entering a book here, but easier to just create the object for an example. 
    Book newBook = new Book("9780593098240", "Children of Dune");
    for (Book bookInLibrary : library) {
        if (bookInLibrary.compareTo(newBook) == 0) {
            System.out.println("We already have that book in the library.");
            break;
        }
    }
  }
}

答案 9 :(得分:0)

这可能有很多原因,但就我个人而言,最常见的是web.xml文件servlet声明。当我在Mac和Linux上交叉开发项目时,由于空间或换行问题,我发现文件在两个平台上的行为有所不同。当servlet数量超过20时,我花了几个小时才发现。最终,我缩小到奇怪的只有一个控制器类声明,发现语法绝对是完美的。它使我感到震惊,所以我认为我应该在删除旧的和BAM之后重写声明!它可以立即在Mac上运行。奇怪。

答案 10 :(得分:0)

我几次遇到这个问题,我尝试了以下步骤,它确实有效..

1。备份当前项目(出于安全考虑)。

2。。找到您的项目文件夹位置(通常在名为 NetBeansProjects MyDocuments Documents 文件夹中找到)

3。。打开项目文件夹,并删除项目文件夹中名为 target 的文件夹

4。。关闭NetBeans,然后重新打开它并运行项目。

你很好。

如果上述方法无效,请尝试从“ Tomcat 9.0 \ conf \ Catalina \ localhost ”文件夹中删除 xml文件

答案 11 :(得分:0)

一次遇到相同的问题。在一种情况下,这是由具有多种方法且路线相同的控制器引起的,例如

@RestController
public class UsersController
{   
    @Autowired
    UsersInterface userInterface;

    @RequestMapping(value = "/get", method = RequestMethod.GET)
    public String test()
    {
        return "Users";
    }

    @RequestMapping(value = "/get", method = RequestMethod.GET)
    public List<user> getUsers()
    {
        List<User> users = userInterface.getUsers();
        return users;
    }
}

如您所见,控制器有2个方法定义了两个get路由,因此Spring无法解析该方法来运行.../users/get路由。

删除get路由之一,并将其​​更改为其他路由。

我可能来不及回答,但将来可能会帮助其他人。

答案 12 :(得分:0)

在我的情况下,我删除了在web.xml中添加的一些配置标签,尝试配置strut软件包。我也分别删除了该软件包,我重新启动了服务器,运行了项目,并且工作了。

答案 13 :(得分:0)

我的问题是web.xml中的语法错误,我没有关闭元素

tomcat窗口(NetBeans)出现了明显的错误消息,感谢阿拉法特

  

2018年9月1日17:34:38.641严重[http-nio-8080-exec-5] org.apache.tomcat.util.digester.Digester.fatalError在第50行第11列解析致命错误:元素类型“参数值”必须以匹配的结束标记“”结尾。

答案 14 :(得分:0)

我通过在根文件夹

中为Apache Server Foundation的用户提供安全权限来解决相同的问题

答案 15 :(得分:0)

我遇到了同样的问题,但我只使用了maven(没有IDE)。我的tomcat版本是tomcat7 7.0.70-1和jdk8(在pom.xml中:<java.version>1.8</java.version>)结果是tomcat7 incompatible和java 8,所以,我更改了java.version in pom.xml上的<java.version>1.7</java.version>,这就是解决方案!

答案 16 :(得分:0)

&#39;在上下文路径中未部署的应用程序&#39;由于在将项目从一个系统复制到另一个系统时丢失了一些文件而发生此错误。 同时确保应该复制所有文件。如果发生错误,请重新复制项目并导入它。 它可能有用......

答案 17 :(得分:-2)

我遇到了同样的问题,我通过从IDE停止tomcat并运行Web应用程序解决了该问题,该应用程序会自动启动tomcat。(这在Netbeans IDE中有效)。只需停止Tomcat,然后重新启动并重新部署Web应用程序即可。