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

Tom*_*dad 27 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");
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在运行Tomcat v7.0,并且已经阅读了类似的问题,响应涉及更改invoker servlet-mapping部分web.xml,本节实际上并不存在,当我添加它时仍然会出现同样的问题.

小智 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");
  }
}
Run Code Online (Sandbox Code Playgroud)

现在到达servlet http://127.0.0.1:8080/yourapp/hello

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


Pet*_*sik 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
Run Code Online (Sandbox Code Playgroud)

然后你可以去,然后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>
Run Code Online (Sandbox Code Playgroud)


Rom*_*n C 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();
  }
}
Run Code Online (Sandbox Code Playgroud)

自从servlet 3.0起

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

阅读Java Servlets教程.