0

我不是一个经验丰富的 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();

    }
}
4

1 回答 1

0

在找到答案之前,我似乎已经放弃了一步。

此调试输出行

Path=/mytest/                     //this is context path

持有解释。上下文路径不应以尾随结尾/ 这也是#部署战争结束时签名的原因(似乎文件名中不支持的符号转换为#)。但是,我不确定为什么/不忽略尾随。在我看来,它就像一个缺陷。

所以我更改了tomcat7-maven-plugin配置,替换/mytest//mytest

<configuration>
    <url>http://localhost:8080/manager/text</url>
    <server>tomcat7</server>
    <path>/mytest</path>
</configuration>

它解决了映射问题。

现在打印上下文路径导致

Path=/mytest                     //this is context path

感谢@BalusC,我知道如何处理405配置更改后收到的内容。

于 2013-10-10T15:15:52.723 回答