2015-09-05 65 views
1

我是servlets新手。我已经在Ubuntu14.04上安装了Tomcat7,并且服务运行良好。但它给servlet(http://localhost:8080/hello/HelloServlet)提供404(未找到)错误。应用程序中的html运行良好。 Tomcat管理工具也是如此。Ubuntu14.04的Tomcat7可以正常工作,但servlet的404错误

任何想法我做错了什么?

Tomcat的webapps结构: 的/ var/lib中/ tomcat7/web应用

webapps 
|-- ROOT 
    |-- hello 
    | |-- index.html 
    | `-- WEB-INF 
    |  |-- classes 
    |  | |-- HelloServlet.class 
    |  | `-- HelloServlet.java 
    |  |-- lib 
    |  `-- web.xml 
    |-- index.html 
    `-- META-INF 
     `-- context.xml 

的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<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/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    version="2.5"> 
<servlet> 
    <servlet-name>HelloServlet</servlet-name> 
    <servlet-class>HelloServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>HelloServlet</servlet-name> 
    <url-pattern>/HelloServlet</url-pattern> 
</servlet-mapping> 
</web-app> 

HelloServlet.java:

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import javax.servlet.annotation.WebServlet; 

@WebServlet(name="HelloServlet", urlPatterns={"/HelloServlet"}) 

public class HelloServlet extends HttpServlet{ 
    private String message; 
    public void init() throws ServletException{ 
     message = "Hello World"; 
    } 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     out.println("<h1>" + message + "</h1>"); 
    } 
    public void destroy(){ 

    } 
} 
+1

您试图访问哪个网址? – Garry

+0

您是否尝试过:http:// /hello/HelloServlet? – Lexandro

+0

http:// localhost:8080/hello/HelloServlet给出了404错误。对不起,我错过了这个问题中的重要部分。 – sariDon

回答

0

最后我得到它运行:)

这是创建问题的目录结构。应用程序目录应该位于'webapps/ROOT'目录之外。具体而言,只是把应用程序目录直属“的webapps”(似乎是Tomcat7和Ubuntu 14.04LTS具体情况)

校正结构:

webapps 
|-- ROOT 
`-- hello 
    |-- index.html 
    `-- WEB-INF 
     |-- classes 
     | |-- HelloServlet.class 
     | `-- HelloServlet.java 
     |-- lib 
     `-- web.xml 

以前的结构(有误差) :

webapps 
|-- ROOT 
    |-- hello 
    | |-- index.html 
    | `-- WEB-INF 
    |  |-- classes 
    |  | |-- HelloServlet.class 
    |  | `-- HelloServlet.java 
    |  |-- lib 
    |  `-- web.xml 
    |-- index.html 
    `-- META-INF 
     `-- context.xml 
0

Java源文件不应位于/ WEB-INF文件夹中。 Servlet是一个普通的java文件,应该位于/ src/...文件夹中。另外,一旦你将类注解为@WebServlet,你可以移除web.xml文件(尽管它有很多其他的用法,为了简化,可以忽略它用于'servlet-mapping')。

├───build 
│ └───classes 
│  └───pkg 
│    HelloServlet.class 
│ 
├───src 
│ └───pkg 
│   HelloServlet.java 
│ 
└───WebContent 
    ├───META-INF 
    │  MANIFEST.MF 
    │ 
    └───WEB-INF 
     └───lib 
+0

更改目录结构将无济于事。删除java文件后,404仍然存在。这是一个简单的'hello'程序来运行。所以主要是我不打算创建软件包。现在我正在使用一个简单的文本编辑器。一旦运行,我将转到IDE并使用包装和其他高级方法。 – sariDon

+0

包名称的存在,只是因为我试图编译和运行...后,它为我工作,我显示我的目录结构。在Win7上测试。 – chenchuk

+0

谢谢你的努力。 – sariDon

0

您的java类文件位置错误,请将您的java类文件更改为src文件夹。

+0

事实并非如此。请阅读官方Tomcat文档(https://tomcat.apache.org/tomcat-7.0-doc/appdev/deployment.html),其中明确指出:/ WEB-INF/classes/- 此目录包含任何Java类文件(和相关资源),包括未组合到JAR文件中的servlet和非servlet类。 – sariDon