【发布时间】:2010-09-08 05:31:16
【问题描述】:
我写了一个名为 login.jsp (tomcat6) 的页面,它有一个登录表单(用户名、密码等)。
我已经映射了表单操作和 servlet,因此表单提交导致调用登录 servlet。
1. login.jsp 有一个调用 servlet 的表单。
<form name="login_form" action="servlet/login" method="POST">
2。部署描述符 (web.xml) 中的 servlet 映射
<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 的代码 sn-p
String address = "home.jsp"
if(hasError) {
address = "register.jsp"
}
RequestDispatcher dispatcher = request.getRequestDispatcher(address);
dispatcher.forward(request, response);
问题:
它适用于第一个请求。
为登录表单提供无效凭据(错误的用户名或密码)。
hasError 标志设置为 true 并将我重定向回登录页面(URL 从 localhost:8080/login.jsp 更改为 localhost:8080/servlet/login )
到目前为止我很开心,但在接下来的事情之后就不开心了。
- 再次提供无效凭据以登录表单。
结果:
现在我得到 HTTP 404 并且 URL 是:localhost:8080/servlet/servlet/login (带有额外的“servlet”)
我正在寻找的解决方案是在由于登录失败而重定向用户时重定向到原始登录页面。是否可以重定向到 login.jsp 或在 URL 中没有额外的“servlet”文本导致 404?
注意:我阅读的在线教程提到不包括像我在<url-pattern>/servlet/login</url-pattern> 那样在 url 映射中包含“servlet”,但是由于需要区分 php 和其他东西,我有 jsp 主机强迫我这样做(mount 指令) . :(
更新:
我在网上找到了这个,还没有测试,但会更新......
response.sendRedirect(LOGIN_PAGE);
解决方案
sendRedirect 方法不是我想要的。我需要通过调度程序转发请求/响应,但 sendRedirect 仅将响应作为参数。
原始问题的诀窍是按照建议的形式使用绝对路径。 我的解决方法是:
(login.jsp)
<%
String path = request.getContextPath();
%>
<form name="login_form" action="<%= path %>/servlet/login" method="POST">
【问题讨论】: