虽然tomcat工作正常,但servlet应用程序不起作用

时间:2016-10-31 11:32:27

标签: java tomcat servlets

我在tomcat目录下的ubuntu上安装了Apache Tomcat。我通过导出为单个会话设置CATALINA_HOME环境变量。然后我从命令行通过$CATALINA_HOME/bin/startup.sh启动了tomcat。一切都运作良好。我看到tomcat官方页面并假设服务器安装正确。然后我在

下创建了一个带有单个servlet的webb应用程序
$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>");
    }
}

然后我编译了文件

javac -cp HelloWorldServlet.java -d ./classes -cp $CATALINA_HOME/bin/servlet-api.jar

编译成功,类文件被放入应用程序根目录的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>

然后我重启了Tomcat。但是当我尝试通过

访问时
http://localhost:8080/apress/hello.html

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在tomcat目录中查看一个logs目录。停止tomcat。删除所有日志文件并重新启动tomcat并点击该URL。检查日志(主要是访问日志和catalina.out)。首先在那里寻找错误。

您可能还想考虑使用@WebServlet而不是编辑web.xml,现代版本的tomcat可以识别用它注释的类,并自动将它们注册为servlet。

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

}

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

答案 2 :(得分:0)

两件事可能。根据您所写的内容,您创建应用程序的目录是:

$CATALINA_HOME/webaps/apress/

它应该是

$CATALINA_HOME/webapps/apress/

但我想这只是一种打字。

第二件事是你应该复制已编译的文件

HelloWorldServlet.class 

apress/WEB-INF/classes

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