servlet,jsp和用户从表单反馈

时间:2010-07-17 10:19:16

标签: javascript jsp servlets

我一直在思考如何实施以下方案。任何指导都将非常感谢。

我有一个用户填写的表单。使用jquery,它会在发送到服务器之前尽可能验证。单击提交按钮时,表单将发送到servlet。

然后servlet将检查数据库,如果一切正常,将添加它将相关信息发送到jsp,然后显示一个新页面。 我似乎可以确定的部分是servlet是否发现错误。在这种情况下出现错误,应该向用户弹出一条消息,页面不应该更改。我知道这可能是不可能的。

如果不可能,那么在提交表单以及如何使用servlet和jsp实现它之后,是否有任何关于提供用户反馈的良好Web设计指南。

由于

亚历

2 个答案:

答案 0 :(得分:1)

您基本上需要将请求返回(转发)到具有表单的同一JSP页面。您可以使用${param}重新显示原始输入。您可以在servlet中使用request.setAttribute()在请求范围中设置一些数据,然后您可以在JSP页面中显示这些数据。

这是一个表示登录表单的JSP页面的启动示例:

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

...

    <label for="username">Username</label>
    <input type="text" id="username" name="username" value="${fn:escapeXml(param.username)}">
    <br>
    <label for="password">Password</label>
    <input type="password" id="password" name="password" value="${fn:escapeXml(param.password)}">
    <br>
    <span class="error">${error}</span>

(重新显示用户控制的输入时,fn:escapeXml必须阻止XSS attacks

在对请求进行后处理的servlet中,您可以大致按如下方式处理登录:

String username = request.getParameter("username");
String password = request.getParameter("password");
User user = userDAO.find(username, password);
if (user != null) {
    request.getSession().setAttribute("user", user); // User found, login it.
    response.sendRedirect("home"); // Redirect to home page.
} else {
    request.setAttribute("error", "Unknown username/password, please try again"); // Set message which you display in ${error}
    request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response); // Redisplay the same JSP page.
}

请注意,上面的示例显示了嵌入在同一页面上的错误,并且没有显示警报,因为警报是糟糕的用户体验。如果你真的坚持要显示警告,那么你可以抓住JSTL c:if标签来有条件地打印警报:

<c:if test="${not empty error}">
    <script>alert('${error}');</script>
</c:if>

同样,这不是正常做法。

另见:

答案 1 :(得分:0)