从更高目录中的servlet转发到子文件夹中的jsp

时间:2009-11-18 17:18:42

标签: jsp servlets forwarding

我有

root/logged/form.jsp
root/servlet
root/logged/form.jsp

我有jsp页面logged/form.jsp,它将表单提交给servlet action="../update"。现在我想添加一些参数来请求并将其转发到logged/form.jsp,但它不起作用并仅在根上下文中向我显示form.jsp root/servlet。请帮助我将我的请求转发到哪个网址。我不能使用sendRedirect来保留请求对象。

我在我的servlet中试过了前进(logged/form.jsp)和前进(/logged/form.jsp)和前进(/form.jsp

3 个答案:

答案 0 :(得分:0)

尝试始终使用绝对路径(以/开头),这些路径被解释为相对于上下文根。

答案 1 :(得分:0)

/logged/form.jsp应该是正确的。我建议阅读appserver日志。很有可能内部有IllegalStateException: response already committed

等等,您的实际问题是您想要更改访问者在地址栏中看到的URL吗?

如果是这样,那么不,前进是不可能的。然后,我建议从另一方面解决问题。只需在form.jsp文件夹中“隐藏”/WEB-INF,并始终使用servlet来获取/发布表单。

伪:

protected void doGet(request, response) {
    request.getRequestDispatcher("/WEB-INF/logged/form.jsp").forward(request, response);
}

protected void doPost(request, response) {
    doYourSubmitThingHere();
    request.getRequestDispatcher("/WEB-INF/logged/form.jsp").forward(request, response);
}

将此servlet映射到url-pattern /logged/form,将<form method="post" action="/servlet">替换为<form method="post" action="/logged/form">,然后您可以http://example.com/logged/form使用/调用它。

您还可以通过采用页面控制器模式更进一步,并使用HttpServletRequest#getPathInfo()来获取请求路径(以及JSP文件的路径),这样您就不需要为新的servlet创建新的servlet了。每个JSP。

答案 2 :(得分:0)

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