我写了一个名为login.jsp(tomcat6)的页面,它有一个登录表单(用户名,密码等)。如何防止重定向后重复的URL连接?
我已经映射表单动作和servlet,因此表单提交导致调用登录servlet。
1. login.jsp具有调用servlet的形式。在部署描述符
<form name="login_form" action="servlet/login" method="POST">
2. servlet映射(web.xml)中
<servlet>
<servlet-name>ServletLogin</servlet-name>
<servlet-class>com.masatosan.loginservlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletLogin</servlet-name>
<url-pattern>/servlet/login</url-pattern>
</servlet-mapping>
所以,从jsp页面中,当用户点击登录按钮时,servlet(LoginServlet.class )负责登录业务。
当登录由于密码不匹配等原因失败时,servlet会将用户重定向回登录页面。从LoginServlet.class
代码片段
String address = "home.jsp"
if(hasError) {
address = "register.jsp"
}
RequestDispatcher dispatcher = request.getRequestDispatcher(address);
dispatcher.forward(request, response);
问题:
它的伟大工程的第一个请求。
提供登录表单无效的凭据(不正确的用户名或密码)。
hasError标志被设置为true并重定向我回到登录页面(使用URL从本地主机改变:8080/login.jsp的到本地主机:8080/servlet的/登录)
到目前为止我很高兴,但不是在接下来的事情之后。
- 提供无效的凭证以再次登录表单。
结果:
现在,我得到HTTP 404网址是:本地主机:8080/servlet的/的servlet /登录 (额外 “的servlet”)
的解决方案我我寻找的是重定向到原来的登录页面,当我重定向用户由于登录失败。是否有可能重定向到login.jsp或没有额外的“servlet”文本的URL导致404?
注意:我阅读的在线教程中提到在URL映射中没有包含“servlet”,就像我做过<url-pattern>/servlet/login</url-pattern>
,但由于要求区分php和其他东西,jsp主机强制我这样做(挂载指令)。 :(
UPDATE:
我发现这个在网络上,还没有测试,但将更新...
response.sendRedirect(LOGIN_PAGE);
解决方案
的方法的sendRedirect是不是我想要的。我需要通过调度器转发请求/响应,但sendRedirect仅将响应作为参数。
原始问题的诀窍是在建议的窗体中使用绝对路径。 我修复它的工作是:
(login.jsp)
<%
String path = request.getContextPath();
%>
<form name="login_form" action="<%= path %>/servlet/login" method="POST">
谢谢你的提示! – 2010-09-08 07:28:09