Jsp使用来自servlet的消息和有效的URL进行登录

时间:2014-10-18 13:02:28

标签: jsp url servlets

我想要一个显示错误消息的登录表单(例如"错误的用户/密码 - 再试一次")。

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?

2 个答案:

答案 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。