无法运行带有tomcat容器的form.html页面 - 404 HTTP状态?

时间:2013-09-12 18:49:34

标签: tomcat http-status-code-404

我尝试研究Web服务器编程的基础 我在Ubuntu 12.04上安装了tomcat 7(当我输入myIp:8080时,一切正常我真的看到了正确的tomcat页面)。

创建了简单的结构:

apache-tomcat-7.0.42/webapps =>下这里创建了Beer-v1 progect =>进入此文件夹WEB-INF文件夹和form.html

form.html代码:

<html>
    <body>
        <h1 align=”center”>Beer Selection Page</h1>
        <form method=”POST” 
            action=”SelectBeer.do”>
            Select beer characteristics<p>
            Color:
            <select name=”color” size=”1”>  
                <option value=”light”> light </option>
                <option value=”amber”> amber </option>
                <option value=”brown”> brown </option>
                <option value=”dark”> dark </option>
            </select>
            <br><br>
            <center>
                <input type=”SUBMIT”>
            </center>
        </form>
    </body>
</html>

进入 WEB-INF web.xml

web.xml代码:

<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/web-app_2_4.xsd”
    version=”2.4”>
    <servlet>
        <servlet-name>Ch3 Beer</servlet-name>
        <servlet-class>com.example.web.BeerSelect</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Ch3 Beer</servlet-name>
        <url-pattern>/SelectBeer.do</url-pattern>
    </servlet-mapping>
</web-app>

当我将bin/startup.sh运行到apache-tomcat-7.0.42文件夹时,我会看到下一个输出:

root@nazar-desctop:/usr/local/tomcat/apache-tomcat-7.0.42# bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat/apache-tomcat-7.0.42
Using CATALINA_HOME:   /usr/local/tomcat/apache-tomcat-7.0.42
Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-7.0.42/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/apache-tomcat-7.0.42/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-7.0.42/bin/tomcat-juli.jar

在浏览器http://localhost:8080/Beer-v1/form.html输入后 - 我看到:
  HTTP状态404 - /Beer-v1/form.html

我无法弄清楚出了什么问题。

更新

catalina.out的内容 - 您可以看到here
localhost.2013-09-12.log

Sep 12, 2013 9:17:26 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
Sep 12, 2013 9:17:26 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
Sep 12, 2013 9:17:27 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@d47feb3')
Sep 12, 2013 9:17:34 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
Sep 12, 2013 9:17:34 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
Sep 12, 2013 9:17:35 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@27c76b8d')
Sep 12, 2013 9:17:35 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextDestroyed()
Sep 12, 2013 9:17:35 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextDestroyed()
Sep 12, 2013 9:21:12 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
Sep 12, 2013 9:21:12 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
Sep 12, 2013 9:21:14 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@41fb43a2')
Sep 12, 2013 9:21:17 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextDestroyed()
Sep 12, 2013 9:21:17 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextDestroyed()
Sep 12, 2013 9:30:38 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
Sep 12, 2013 9:30:38 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
Sep 12, 2013 9:30:38 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@30ce9337')
Sep 12, 2013 9:30:39 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextDestroyed()
Sep 12, 2013 9:30:39 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextDestroyed()
Sep 12, 2013 9:44:30 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
Sep 12, 2013 9:44:30 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
Sep 12, 2013 9:44:30 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@357c4ab7')
Sep 12, 2013 9:44:31 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextDestroyed()
Sep 12, 2013 9:44:31 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextDestroyed()

如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

catalina.out的这一部分引起了我的注意:

INFO: Deploying web application directory /usr/local/tomcat/apache-tomcat-7.0.42/webapps/Beer-v1
Sep 12, 2013 9:17:27 PM org.apache.tomcat.util.digester.Digester fatalError
SEVERE: Parse Fatal Error at line 1 column 16: Open quote is expected for attribute "{1}" associated with an  element type  "xmlns".
org.xml.sax.SAXParseException; systemId: jndi:/localhost/Beer-v1/WEB-INF/web.xml; lineNumber: 1; columnNumber: 16; Open quote is expected for attribute "{1}" associated with an  element type  "xmlns".

web.xml的第1行第16列对应xmlns=之后的双引号:

 <web-app xmlns=”http://java.sun.com/xml/ns/j2ee”

但后来我注意到web.xml中的双引号看起来不像标准的双引号。查看"之间的区别?所以我的猜测是Tomcat无法解析web.xml,因为你没有使用标准的双引号,而是一个看起来像它的不同字符,但Tomcat没有将其解释为分隔符。尝试用标准双引号替换它们。

答案 1 :(得分:0)

也许您可以通过配置context来实现。 不鼓励这样做,但您可以尝试在conf/server.xml中添加以下内容,只是为了试一试:

<Context path="Beer-v1" docBase="webapps/Beer-v1" crossContext="true"
    debug="0" reloadable="false">
</Context>

修改

正如David Levesque在他的回答中所写,你的web.xml中存在一些不正确的字符(问题似乎已在那里修复)和你的html文件。关于这一点,我不确定带有Ch3 Beer等空格的servlet名称是否合法(但是再一次它不应该在HTML页面中出现问题)。

另请注意,您的servlet-name值不一致。它们应该是相同的,以便链接类和URL映射。

我已经使用您的新web.xml文件进行了测试,并且没有修改conf / server.xml文件,并且显示了html文件(由于您的特殊而导致其缺陷)。我认为正如大卫所写,还有一些无效的角色。

答案 2 :(得分:-1)

原因

Tomcat服务器(或容器)2.2或更高版本遵循任何Web应用程序存档的特定标准格式。

HTML和JSP页面必须位于文档根目录中,或者更具体地说是ROOT文件夹。

这里的原因很简单。我们正在让客户端浏览器轻松找到该文件。 WEB_INF是包含所有类的文件夹。除非您在浏览器中指定了正确的路径,否则它还可以包含任何类型的文件。

解 现在来寻找适合我的解决方案。

  1. 我创建了你所遵循的相同层次结构。它是beer / WEB_INF并在其中创建了form.html。
  2. 我将整个目录放在ROOT文件夹中。
  3. 我打开了浏览器,输入了/beerV1/WEB-INF/form.html,然后就可以了。