Tomcat Servlet:错误404 - 请求的资源不可用

时间:2013-10-06 11:06:51

标签: tomcat servlets http-status-code-404

我是编写Java Servlet的新手,我正在努力让一个简单的HelloWorld示例正常工作。

HelloWorld.java类是:

package crunch;

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

public class HelloWorld extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    out.println("Hello World");
  }
}

我正在运行Tomcat v7.0,并且已经阅读了类似的问题,回复指的是更改了invoker中的servlet-mapping web.xml部分,此部分实际上并不存在我的,当我添加它时仍然会出现同样的问题。

7 个答案:

答案 0 :(得分:21)

试试这个(如果是Java EE V6)

package crunch;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
@WebServlet(name="hello",urlPatterns={"/hello"})
public class HelloWorld extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    out.println("Hello World");
  }
}

现在通过http://127.0.0.1:8080/yourapp/hello

到达servlet

其中8080​​是默认的tomcat端口,yourapp是applciation的上下文名称

答案 1 :(得分:11)

您肯定需要将servlet映射到某个URL。如果您使用Java EE 6(这至少意味着Servlet API 3.0),那么您可以注释您的servlet,如

@WebServlet(name="helloServlet", urlPatterns={"/hello"})
public class HelloWorld extends HttpServlet {
     //rest of the class

然后你可以转到localhost:8080/yourApp/hello并显示值。如果你不能使用Servlet 3.0 API,你需要将这个servlet注册到web.xml文件中,如

<servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>crunch.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

答案 2 :(得分:6)

如果使用Java EE 7

,编写Java servlet很容易
@WebServlet("/hello-world")
public class HelloWorld extends HttpServlet {
  @Override
  public void doGet(HttpServletRequest request, 
                  HttpServletResponse response) {
   response.setContentType("text/html");
   PrintWriter out = response.getWriter();
   out.println("Hello World");
   out.flush();
  }
}

自servlet 3.0起

  

好消息是不再需要部署描述符!

阅读Java Servlets的教程。

答案 3 :(得分:2)

这可能是由于你在 WEB-INF 而不是 WebContent 文件夹中创建了.jsp或.html文件。

解决方案:只需将WEB-INF文件夹中的文件替换为Webcontent文件夹并尝试执行相同的操作 - 您将获得相应的输出

答案 4 :(得分:0)

对于那些坚持使用&#34;请求的资源不可用&#34;在Java EE 7和动态Web模块3.x中,这可能会有所帮助:&#34; Create Servlet&#34; Eclipse中的向导(在Mars中测试)不会为servlet类创建 @Path 注释,但我必须包含它才能成功访问公开的方法。

答案 5 :(得分:0)

您必须在动作attr中使用../../projectName/Filename.jsp。或者href

../ =包含当前文件夹simple(demo.project.filename.jsp)

Servlet只能通过1斜杠调用项目名称来调用..

答案 6 :(得分:-1)

我的问题出在web.xml文件中。在一个<servlet-mapping>中,<url-pattern>内部出现错误:我忘记在网址前添加/