1

在我的 web.xml 中,我设置了一个像

<servlet>
    <servlet-name>forward</servlet-name>
    <servlet-class>test.Forward</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>forward</servlet-name>
    <url-pattern>/f/*</url-pattern>
</servlet-mapping>

test.Forward#doGet被实现为

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    req.getRequestDispatcher("target.jsp").forward(req, resp);
}

访问localhost:8080/project/f/anypath时,由于堆栈溢出错误,服务器崩溃。

似乎对/f/target.jspRequestDispatcher#forward设置了另一个请求,然后再次调用,然后再次调用。我不知何故误解了我认为它只是渲染一个页面。test.Forward#doGetRequestDispatcher#forward

那么,有没有只渲染 JSP 的方法呢?

4

1 回答 1

1

您的 servlet 路径是 /f/*,并且您正在重定向到该路径上的文件,很可能是无意的:

/f/target.jsp

结果,这将创建一个无限循环,因为您的 servlet 不断地一次又一次地调用自己。

如果您想重定向到 JSP,我假设它位于另一个文件夹中,例如 /jsp/target.jsp 位置?如果是这样,请确保包含完整路径:

req.getRequestDispatcher("/jsp/target.jsp").forward(req, resp);

当您省略 时/,请求将相对于当前 requestURI 进行转发。

于 2012-05-18T04:11:27.473 回答