我有
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
)
答案 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);