【问题标题】:Error 404: The requested resource is not available using HelloWorld servlet [duplicate]错误 404:使用 HelloWorld servlet 请求的资源不可用 [重复]
【发布时间】:2013-10-13 01:00:44
【问题描述】:

我正在编写一个 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,并且已经阅读了类似的问题,其中的回答是指更改 web.xml 中的 invoker servlet-mapping 部分。这部分在我的里面其实是没有的,我添加的时候还是出现了同样的问题。

【问题讨论】:

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


【解决方案1】:

试试这个(如果是 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 是应用程序的上下文名称

【讨论】:

【解决方案2】:

您肯定需要将您的 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>

【讨论】:

    【解决方案3】:

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

    【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

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

        只能在项目名称前加上 1 个斜线来调用 Servlet。

        【讨论】:

          【解决方案7】:

          我的问题出在web.xml 文件中。在一个&lt;servlet-mapping&gt;&lt;url-pattern&gt;里面有一个错误:我忘了在url前加/。

          【讨论】:

            猜你喜欢
            • 2021-06-21
            • 2015-05-13
            • 2021-01-06
            • 1970-01-01
            • 1970-01-01
            • 2013-06-02
            • 2020-04-29
            • 2016-09-18
            • 1970-01-01
            相关资源
            最近更新 更多