Tomcat 7.0:所请求的资源(Servlet)不可用。

3
我正在试图从HTML操作表单执行Servlet并收到以下错误消息:
HTTP状态404 - /WSE_Web/QueryServlet 类型:状态报告 消息:/WSE_Web/QueryServlet 描述:所请求的资源(/WSE_Web/QueryServlet)不可用。
我查看了这里的几个问题和教程,但是找不到我缺少什么(也不太熟悉Servlet和Web编程)。 我使用带有Tomcat 7.0.12的Eclipse。
我的Action表单: enter image description here
我的Servlet类:
package servlet;

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

@WebServlet("/QueryServlet")
public class QueryServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.println("Hello World"); 
    }
}

我的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" metadata-complete="true" version="3.0">
  <display-name>WSE_Web</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
</web-app>

项目结构: enter image description here

尝试将动作更改为带斜杠的/QueryServlet - RealSkeptic
请查看 https://dev59.com/ZWw15IYBdhLWcg3wkMjz。 - rickz
不确定在同一个 web.xml 文件中引用 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd 和 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd 是否正确。这样做是否正确?据我所知,您需要坚持使用 3.0 版本,以便 Tomcat 知道并处理您的注释。 - blurfus
2个回答

0
如果您的应用程序上下文是/WSE_Web,则您的应用程序是正确的,并且应该正常工作。
但是,如果/WSE_Web不是您的应用程序上下文,请将url-pattern更改为:
@WebServlet("/WSE_Web/QueryServlet")

为确保您可以使用web.xml文件:

<web-app>
    ...
    <servlet>
        <servlet-name>QueryServlet</servlet-name>
        <servlet-class>servlet.QueryServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>QueryServlet</servlet-name>
        <url-pattern>/QueryServlet</url-pattern>
    </servlet-mapping>
</web-app>

我的HTML页面正在http://localhost:8080/WSE_Web/上运行,当点击操作表单时,我会访问http://localhost:8080/WSE_Web/QueryServlet,所以一切应该都没问题。 - Frank Wittich
@FrankWittich:你试过使用/WSE_Web/QueryServlet而不是/QueryServlet吗? - Ali Sepehri.Kh
是的,不幸的是没有帮助。结果始终如一。 - Frank Wittich
@FrankWittich:尝试使用web.xml方式。我已经编辑了我的答案。 - Ali Sepehri.Kh
我不确定是什么改变了,但现在它可以工作了。非常感谢! :) - Frank Wittich
@FrankWittich:是的,你的代码应该可以工作。我很高兴你的问题得到了解决 :) - Ali Sepehri.Kh

0

请确保您有正确的HTML:

<input type='text' name='query' size='96'/><!-- your missing the `/` at the end -->
<input type='submit' name='subButton' value='Search!'/><!-- your missing the `/` at the end -->

还要将方法值改为get,因为您只覆盖了doGet()

<form method='get' action='QueryServlet'>
...
</form>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接