我想要一个显示错误消息的登录表单(例如"错误的用户/密码 - 再试一次")。
LoginHandler.java:
@WebServlet("/login")
public class LoginHandler extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
//...
if (userInvalid()) {
request.setAttribute("error", "Wrong user/password - try again");
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
}
//...
}
的index.jsp:
<p><% out.println(request.getAttribute("error")); %></p>
<form action="/login" method="post" enctype="application/x-www-form-urlencoded">
...
一切正常,但我不喜欢网址http://&lt;服务器&gt;:8080 / login我在request.getRequestDispatcher("/index.jsp").forward(request, response);
发送请求后得到了。当您输入时,它不是可以在我的设置中在浏览器中显示的URL。
有没有办法可以使用会话变量和像这样的URL发送错误消息到index.jsp whitout http://&lt;服务器&gt;:8080 / index.jsp?
答案 0 :(得分:1)
您可以使用response.sendRedirect
代替转发来显示正确的网址。这是示例代码。这可能不是一个好方法,但你可以使用它。
在servlet中
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
resp.sendRedirect("login.jsp?errorMsg=Ivalid usernam or password");
}
在login.jsp
中 <%= request.getParameter("errorMsg") %>
答案 1 :(得分:1)
如果我正确理解您的问题,您将在浏览器中获得servlet的地址。如果您导航到此地址,则会收到错误消息?如果是这种情况,你可以&#34; redispatch&#34;在doGet方法中:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
在这种情况下,servlet应该转发到jsp。