【问题标题】:Tomcat6 + Ubuntu + ServletTomcat6 + Ubuntu + Servlet
【发布时间】:2009-11-18 01:05:00
【问题描述】:

我正在尝试制作 servlet。

我已经在 ubuntu 上安装了带有管理示例和文档的 tomcat6。我能够运行提供的示例。但是当我尝试制作自己的servlet时它不起作用。

我做了以下步骤

在根目录下我创建文件夹

-ROOT
----myapp
------WEB-INF
---------classes

我制作了两个文件,一个是 index.html,其中有一个按钮和表单上的操作来调用 servlet。其次是 .java 文件。我编译了 .java 文件并且 .class 完成了。所以现在树看起来像

-ROOT
----myapp
------index.html
------WEB-INF
---------classes
-----------TestServ.java
-----------TestServ.class

现在我使用http://localhost:8080/myapp在浏览器中打开它

它显示带有按钮的 index.html 页面。但是当我点击按钮时,它会说

错误 404: http://localhost:8080/myapp/TestServ没找到!!

我不知道我哪里出错了。我也设置了 CATALINA_HOME。但是这个问题仍然存在。

【问题讨论】:

    标签: java ubuntu tomcat6


    【解决方案1】:

    需要在WEB-INF目录下创建web.xml,并在web.xml中定义servlet映射,以便将myapp/TestServ URL转发给TestServ servlet类。

    Here 是一个描述 web.xml 的页面,其中包含您需要设置的示例和元素。对于您的班级,这些元素可能看起来像这样:

    <servlet>
        <servlet-name>testServ</servlet-name>
        <servlet-class>TestServ</servlet-class>
    </servlet>
    
    <servlet-mapping>
         <!-- For any URL starting with /content/, the rewriter servlet will be called -->
         <servlet-name>testServ</servlet-name>
         <url-pattern>/TestServ</url-pattern>
    </servlet-mapping> 
    

    【讨论】:

      【解决方案2】:

      您不应该在 ROOT 下部署任何代码。

      默认包中不应包含任何 Java 类。尝试将您的 TestServ.java 放入一个包中。

      您的部署不应包含任何 .java 文件。

      您必须在 web.xml 中正确注册您的 servlet。包含到特定 URL 的映射。

      最好的办法是创建一个名为 myapp.war 的 WAR 文件,其中包括 WEB-INF/classes 和 WEB-INF/lib 以及适合您情况的 web.xml。将其放入 Tomcat /webapps 并启动容器。如果您已正确注册您的 servlet,您应该可以通过 http://localhost:8080/myapp/TestServ 访问它。

      我会仔细阅读deployment docs

      【讨论】:

      • +1 提到无包 servlet 是失败的。但是应该提到它们可能在某些环境中工作,但你不应该依赖它。总是把类放在包中,只是因为你不能以通常的 Java 方式从其他类访问无包类
      • 您的应用不是 ROOT - 应该有自己的上下文。这很容易做到,为什么不呢?
      猜你喜欢
      • 1970-01-01
      • 2014-01-03
      • 2012-04-12
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 2013-12-13
      • 2011-06-15
      • 1970-01-01
      相关资源
      最近更新 更多