Java servlet应用程序不工作,尽管tomcat工作正常

Java servlet应用程序不工作,尽管tomcat工作正常,java,tomcat,servlets,Java,Tomcat,Servlets,我已经在ubuntu的Tomcat目录下安装了ApacheTomcat。我通过导出为单个会话设置了CATALINA\u HOME环境变量。然后我从命令行通过$CATALINA\u HOME/bin/startup.sh启动了tomcat。一切都很顺利。我看到了tomcat官方页面,并假设服务器安装正确。然后,我创建了一个webb应用程序,其中包含一个servlet $CATALINA_HOME/webaps/apress/ 目录 import java.io.*; import javax.

我已经在ubuntu的Tomcat目录下安装了ApacheTomcat。我通过导出为单个会话设置了
CATALINA\u HOME
环境变量。然后我从命令行通过
$CATALINA\u HOME/bin/startup.sh
启动了tomcat。一切都很顺利。我看到了tomcat官方页面,并假设服务器安装正确。然后,我创建了一个webb应用程序,其中包含一个servlet

$CATALINA_HOME/webaps/apress/ 
目录

import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
public class HelloWorldServlet extends HttpServlet
{
    public void doGet(HttpServletRequest request,
          HttpServletResponse response)
          throws IOException, ServletException
    {
        response.setContentType("text/html");
        PrintWriter out=response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>hello, world</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1> hello world</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}
编译成功,类文件被放入应用程序根目录的classes子目录中

然后我编辑了web.xml文件

<?xml version ="1.0" encoding ="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns.xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http:/java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
    <display-name>Chapter 2</display-name>
    <description> Apress demo</description>
    <servlet>
        <servlet-name>helloworld</servlet-name>
        <servlet-class>HelloWorldServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>helloworld</servlet-name>
        <url-pattern>/hello.html</url-pattern>
    </servlet-mapping>
</web-app>

我收到Http状态404消息。我做错了什么?

我建议您首先尝试在Netbeans或Eclipse等IDE中构建应用程序,然后研究自动生成的配置文件

我建议您首先尝试在Netbeans或Eclipse等IDE中构建应用程序,然后研究自动生成的配置文件

查看tomcat目录,其中有一个日志目录。阻止雄猫。删除所有日志文件,重新启动tomcat并点击该URL。检查日志(主要是访问日志和catalina.out)。首先查找其中的错误

您可能还想考虑使用@ Webservlet而不是编辑Web.xml,Tomcat的现代版本可以识别用这个注释的类并自动登记为servlet。

@WebServlet(name="HelloWorld", urlPatterns={"/hello.html"})
public class HelloWorldServlet extends HttpServlet {

}

另外,您是如何将这个servlet部署为WAR文件的?

在您的tomcat目录中有一个logs目录。阻止雄猫。删除所有日志文件,重新启动tomcat并点击该URL。检查日志(主要是访问日志和catalina.out)。首先查找其中的错误

您可能还想考虑使用@ Webservlet而不是编辑Web.xml,Tomcat的现代版本可以识别用这个注释的类并自动登记为servlet。

@WebServlet(name="HelloWorld", urlPatterns={"/hello.html"})
public class HelloWorldServlet extends HttpServlet {

}

另外,您如何将这个servlet部署为WAR文件?

两种可能的情况。根据您编写的内容,您创建应用程序的目录是:

$CATALINA_HOME/webaps/apress/
应该是

$CATALINA_HOME/webapps/apress/
但我想这只是一个打字机

第二件事是,您应该复制编译后的文件

HelloWorldServlet.class 


目录,或直接将java文件编译到此目录中

两种可能的情况。根据您编写的内容,您创建应用程序的目录是:

$CATALINA_HOME/webaps/apress/
应该是

$CATALINA_HOME/webapps/apress/
但我想这只是一个打字机

第二件事是,您应该复制编译后的文件

HelloWorldServlet.class 


目录,或者直接将java文件编译到这个目录中

我查找了目录,有一堆文件,我删除了所有文件,并查看了catalina.out的内部,但什么都不懂,但我猜是有错误的。你能帮我吗?发布文件的内容(它不应该太大,因为你刚刚重新启动它,只运行了一个url)。还有,您是如何将.class文件放入tomcat的?您是在创建WAR文件还是手动将其复制到classes目录?严重:第19行第4列出现解析致命错误:元素类型“servlet class”必须由匹配的结束标记“”终止。org.xml.sax.SAXParseException;systemId:jndi:/localhost/apress/WEB-INF/WEB.xml;行号:19;列数:4;元素类型“servlet class”必须由匹配的结束标记“”终止。我编辑了web.xml,但出现了错误kepps。该错误表示web.xml有xml错误。转到第4列,确保open XML标记有一个匹配且拼写正确的close标记。我查找了目录,有一堆文件,我删除了所有文件,并查看了catalina.out的内部,但什么都不懂,但我猜是有错误的。你能帮我吗?发布文件的内容(它不应该太大,因为你刚刚重新启动它,只运行了一个url)。还有,您是如何将.class文件放入tomcat的?您是在创建WAR文件还是手动将其复制到classes目录?严重:第19行第4列出现解析致命错误:元素类型“servlet class”必须由匹配的结束标记“”终止。org.xml.sax.SAXParseException;systemId:jndi:/localhost/apress/WEB-INF/WEB.xml;行号:19;列数:4;元素类型“servlet class”必须由匹配的结束标记“”终止。我编辑了web.xml,但出现了错误kepps。该错误表示web.xml有xml错误。转到like 19第4列,确保OpenXML标记具有匹配且拼写正确的close标记。您能键入“echo$CATALINA_HOME”并将结果放在这里吗?另外,你能给我们看看你在Tomcat和Catalina Home下的目录布局吗?你能键入“echo$Catalina_Home”并把结果放在这里吗?另外,你能给我们展示一下你在Tomcat和Catalina Home下的目录布局吗?是的,你对webapps的理解是正确的,我把.class文件编译成了classes目录。根据你写的,你把它编译成了HelloWorldServlet.java目录下的/classes。根据一些人的要求,你应该在CATALINA_Home下发布你的目录结构是的,你对webapps的看法是正确的,我将.class文件编译成classes目录根据你所写的,你将它编译成了HelloWorldServlet.java目录下的/classes。根据一些人的要求,你应该把你的董事会结构张贴在卡塔琳娜·欧的家里