我正在编写一个 Java Servlet,并且正在努力让一个简单的
HelloWorld
示例正常工作。
错误 404:使用
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,并且我已经阅读过类似的问题,其答复涉及更改
servlet-mapping
中的 web.xml
部分。我的这个部分其实不存在,当我添加它时,仍然出现同样的问题。
试试这个(如果是 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
是您的应用程序的上下文名称
您肯定需要将您的 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>
如果使用 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 的教程。
这可能是由于您在 WEB-INF 而不是 WebContent 文件夹中创建了 .jsp 或 .html 文件。
解决方案:只需将 WEB-INF 文件夹中的文件替换到 Webcontent 文件夹中,然后尝试执行相同的操作 - 您将获得适当的输出
对于那些在 Java EE 7 和动态 Web 模块 3.x 中遇到“请求的资源不可用”问题的人,也许这会有所帮助:Eclipse 中的“创建 Servlet”向导(在 Mars 中测试)不会创建 @ servlet 类的 Path 注释,但我必须包含它才能成功访问公开的公共方法。
您必须在操作属性中使用 ../../projectName/Filename.jsp。或href
../ = 包含当前文件夹 simple(demo.project.filename.jsp)
Servlet 只能通过项目名称前加 1 个斜杠来调用..
我的问题在
web.xml
文件中。在其中一个<servlet-mapping>
中,<url-pattern>
内部出现错误:我忘记在网址前添加/
。