我一直在思考如何实施以下方案。任何指导都将非常感谢。
我有一个用户填写的表单。使用jquery,它会在发送到服务器之前尽可能验证。单击提交按钮时,表单将发送到servlet。
然后servlet将检查数据库,如果一切正常,将添加它将相关信息发送到jsp,然后显示一个新页面。 我似乎可以确定的部分是servlet是否发现错误。在这种情况下出现错误,应该向用户弹出一条消息,页面不应该更改。我知道这可能是不可能的。
如果不可能,那么在提交表单以及如何使用servlet和jsp实现它之后,是否有任何关于提供用户反馈的良好Web设计指南。
由于
亚历
答案 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)
您可以使用RequestDispatcher的include()/ forward()方法。
很少有例子希望这会有所帮助。 http://www.java2s.com/Tutorial/Java/0400__Servlet/0280__RequestDispatcher.htm http://www.tutorialsto.com/index.php/software/vc/i-finally-realized-the-mvc-with-requestdispatcher.html http://www.jguru.com/faq/view.jsp?EID=492819