使用 HelloWorld servlet 无法使用所请求的资源[重复]

问题描述 投票:0回答:7

我正在编写一个 Java Servlet,并且正在努力让一个简单的

HelloWorld
示例正常工作。

错误 404:使用

HelloWorld
servlet

所请求的资源不可用

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,并且我已经阅读过类似的问题,其答复涉及更改

servlet-mapping
中的
web.xml
部分。我的这个部分其实不存在,当我添加它时,仍然出现同样的问题。

java tomcat servlets http-status-code-404
7个回答
25
投票

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

package crunch;

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

@WebServlet(name="hello",urlPatterns={"/hello"}) // added this line

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
是您的应用程序的上下文名称


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>

7
投票

如果使用 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 Servlet 的教程。


2
投票

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

解决方案:只需将 WEB-INF 文件夹中的文件替换到 Webcontent 文件夹中,然后尝试执行相同的操作 - 您将获得适当的输出


0
投票

对于那些在 Java EE 7 和动态 Web 模块 3.x 中遇到“请求的资源不可用”问题的人,也许这会有所帮助:Eclipse 中的“创建 Servlet”向导(在 Mars 中测试)不会创建 @ servlet 类的 Path 注释,但我必须包含它才能成功访问公开的公共方法。


0
投票

您必须在操作属性中使用 ../../projectName/Filename.jsp。或href

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

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


0
投票

我的问题在

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

© www.soinside.com 2019 - 2024. All rights reserved.