我正在尝试运行的简单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 {
}
}
答案 0 :(得分:8)
已编译的Hello.class
文件应位于文件夹
webapps/ServletTest/WEB-INF/classes/Main
因为它被声明在包Main
中。
此外,您可以在/logs/catalina.out
或/logs/catalina.log
中查看Tomcat的启动日志,具体取决于。
此外,Suresh在评论中是正确的,使用<servlet>
声明或@WebServlet
。不要同时使用它们。
答案 1 :(得分:2)
尝试删除web.xml。 对于Tomcat 7 +
,注释@WebServlet("/Hello")
就足够了
答案 2 :(得分:1)
如果根文件夹没有适当的权限,您将面临此问题。因此,请检查根文件夹属性并删除只读权限,并在安全选项卡中将用户添加到完全访问权限。