尝试运行Servlet时出现HTTP状态404错误

3

我有一个问题,我试图运行我的简单servlet,名为Hello.java。我在eclipse中创建了它,然后将文件放置在webapps/ServletTest/WEB-INF/classes文件夹中并编译它,在同一文件夹中创建了Hello.class文件。然后我修改了我的web.xml文件以映射servlet,并尝试通过以下地址运行它

http://localhost:8080/ServletTest/Hello

然而,这不起作用,会出现以下错误
HTTP状态404 -
类型状态报告
消息
说明 请求的资源不可用。Apache Tomcat / 7.0.42
web.xml文件中的映射如下:
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>Main.Hello</servlet-class>
</servlet>  

<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping> 

Servlet的代码:

package Main;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Hello")
public class Hello extends HttpServlet {
private static final long serialVersionUID = 1L;
public Hello() {
super();
 }

protected void doGet(HttpServletRequest request, HttpServletResponse                   

response)  throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    response.setContentType("text/html");
    String path = request.getContextPath();
    String ip = request.getRemoteAddr();
    out.print("<html>" +
    "<title>Hello</title>" +
            "Hello World"+ "<br>" +
    "Your ip is: " + ip + "<br>" +
    "Your path is: " + path
    + "</html>");       
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)   

throws     ServletException, IOException {

}

}

为什么你要同时使用两种方式或者URL映射? - Suresh Atta
我尝试从web.xml中删除映射,但没有成功。我该如何使用这个映射:@WebServlet("/Hello")? - Darbininkai Broliai
1
@DarbininkaiBroliai,你需要在web.xml中声明你的应用程序正在使用Servlet 3.0。 - Sotirios Delimanolis
2
Delimanolis是正确的,作为一个新手,坚持使用web.xml几天是有益的,这样可以对其有更深入的理解。 :) 这是我的个人建议。 - Suresh Atta
3个回答

9
编译后的Hello.class文件应该在文件夹中。
webapps/ServletTest/WEB-INF/classes/Main

因为它被声明为Main包中的一部分。

此外,您可以在/logs/catalina.out/logs/catalina.log中查看Tomcat的启动日志,具体取决于情况。


另外,Suresh在评论中是正确的,请使用<servlet>声明或@WebServlet。不要同时使用两者。


2

尝试删除web.xml文件。 对于Tomcat 7+来说,注释@WebServlet("/Hello")就足够了。


你可以两者都保留。只需从web.xml中删除条目并使用注释即可。 - Sorter

1
如果根文件夹没有适当的权限,你将会遇到这个问题。请检查根文件夹属性,并在安全选项卡中移除只读权限并添加用户完全访问权限。

这应该是注释。 - ketan
权限问题。 - Ganesh Jogam

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