【问题标题】:How to run an app in Tomcat?如何在 Tomcat 中运行应用程序?
【发布时间】:2010-06-15 09:17:29
【问题描述】:

我已经把我的项目放在了 tomcat_home/webapps/ 目录下。结构是:project_name/WEB-INF/classes。在 WEB-INF 我放了我的 web.xml 描述符。问题是当我尝试运行应用程序时,它找不到文件。错误是:

The requested resource () is not available.

我的 web.xml 内容是:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

    version="2.4">
<servlet>
   <servlet-name>Chapter1 Servlet</servlet-name>
   <servlet-class>Ch1Servlet</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>Chapter1 Servlet</servlet-name>
   <servlet-url>/Serv1</servlet-url> 
</servlet-mapping>
</web-app>

我也重新启动了服务器,但它不想工作。 有什么建议吗?

【问题讨论】:

  • 您是否从tomcat日志中检查过应用程序是否成功部署?您可以从 servlet 名称中删除空格然后重新检查吗?

标签: java tomcat


【解决方案1】:

您的 servlet 是否有命名空间。在标签中,您需要完全限定 Ch1Servlet 类,即 my.code.Ch1Servlet

---阅读cmets后补充-----

好的,试试这个。为你的 webapp 创建一个上下文。创建一个名为 project_name.xml 的文件并将以下内容放入其中:

<Context path="/Serv1" docBase="webapps/project_name" 
         reloadable="true" debug="0" privileged="true">
</Context>

现在把xml文件放到webapps目录下。

如果您要部署 WAR,请将 docBase 替换为“webapps/project_name.war”

【讨论】:

  • 它在默认的命名空间中
  • 这还不够——servlet 有包吗?如果是这样,包的完整路径应该在 servlet 名称之前,正如 Adrian 所说的那样。
  • 这没关系,如果你不把你的servlet放到一个包中,tomcat会在它认为是当前目录的地方寻找它。将其放入一个包中,并从 servlet-class 标记中引用该包。
  • 无论我做什么,它都不起作用。我打包了,重新编译...不成功
  • 您是在尝试访问 servlet 的构造函数还是 init 中的资源。如果是,它们是否被它们所在的包引用?
【解决方案2】:

你需要扔掉你所有的东西,重新开始并非常仔细地完成这个:

http://tomcat.apache.org/tomcat-6.0-doc/appdev/index.html

到目前为止你学到了什么?

  1. 您的 servlet .class 需要在一个包中。如果您的课程是 Bar.jar,顶部带有 package com.foo;,您应该会看到 WEB-INF/classes/com.foo.Bar.class
  2. 将您的应用打包到名为 MyApp 的 WAR 中,并将其放入 /webapps 以进行部署。
  3. 如果将 com.foo.Bar 映射到 /Bar,则 URL 必须是 http://localhost:8080/MyApp/Bar

强迫人们提出建议,并重复“它不起作用”,不会让你到达你需要的地方。

【讨论】:

    【解决方案3】:

    如果您使用的是 Tomcat 附带的默认 server.xml,则无需更改它即可让您的 Web 应用程序运行。您是否尝试过从以下 URL 访问它:http://localhost:8080/project_name/

    【讨论】:

      【解决方案4】:

      看起来你需要将你的 servlet 放在一个包中,例如 com.me.Ch1Servlet。然后将 servlet-class 声明更改为 &lt;servlet-class&gt;com.me.Ch1Servlet&lt;/servlet-class&gt;

      【讨论】:

      • 在阿德里安的帖子之后我也这样做了,但也没有用
      【解决方案5】:

      http://localhost:8080/Serv1 在 URL 中没有 webapp 名称怎么样?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-23
        • 2016-04-27
        • 2017-01-04
        • 1970-01-01
        • 2012-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多