28

我正在编写一个 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这部分实际上在我的中不存在,当我添加它时,仍然出现同样的问题。

4

7 回答 7

24

试试这个(如果是 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

其中 8080 是默认的 Tomcat 端口,并且yourapp是您的应用程序的上下文名称

于 2013-10-06T11:16:52.943 回答
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>
于 2013-10-06T11:17:00.767 回答
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 Servlets教程。

于 2013-10-06T11:27:23.523 回答
2

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

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

于 2017-07-24T18:29:32.783 回答
0

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

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

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

于 2016-02-15T10:03:27.050 回答
0

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

于 2016-01-17T15:15:25.767 回答
0

我的问题在web.xml文件中。其中一个<servlet-mapping>里面有一个错误<url-pattern>:我忘了/在url之前添加。

于 2018-02-10T12:52:56.993 回答