我不是一个经验丰富的 j2ee 开发人员,所以如果我遗漏了一些完全基本或明显的东西,请提前原谅。
我正在使用 Tomcat 7。项目使用tomcat7-maven-plugin
插件和redeploy
目标部署到 Tomcat 实例pom.xml
。构建工作没有错误,唯一奇怪的是它在名称#
末尾添加了符号.war
,例如mytest#.war
.
Servlet 代码非常简单:它只打印调试信息并在 GET 请求中以字符串响应。
初始化部分工作正常。它打印以下映射信息(我猜它是正确的):
Path=/mytest/ //this is context path
StupidServlet[/stupid] //this line and following ones are registrations
jsp[*.jsp, *.jspx]
default[/]
但是,当我尝试请求时http://localhost:8080/mytest/stupid
,它会显示来自 tomcat 的 404 消息。Index.jsp 也是 404,并且 root 返回了一些无效的重定向(至少 firefox 告诉了这一点)。
我的web.xml
文件取自这里的一些答案,以对应 Servlet 3.0 标准:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"/>
小服务程序代码:
@WebServlet(name = "StupidServlet", loadOnStartup = 1, urlPatterns = {"/stupid"})
public class StupidServlet extends javax.servlet.http.HttpServlet {
@Override
public void init() throws ServletException {
super.init();
System.out.print("This is STUPID INIT FROM SERVLET!!!!");
Map servlets = getServletContext().getServletRegistrations();
System.out.println("\n===REGISTRATIONS==="+getServletContext().getServletContextName());
System.out.println("Path="+getServletContext().getContextPath());
for(String key:servlets.keySet()){
ServletRegistration servlet = servlets.get(key);
System.out.println(""+key+servlet.getMappings());
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("STUPID REQUEST IS DONE");
super.doGet(req, resp);
resp.getOutputStream().println("My name is Stupid Servlet");
resp.flushBuffer();
}
}