我正在上JSP课,我有一个任务......我们必须编写一个JSP页面,它接受用户输入,验证输入,然后将其转发到不同的网站。更准确地说,我们被要求实施Amtrak网站的FareFinder功能的基本版本。
此任务有两个主要目的:
(a)编写作为中间件执行的JSP;
(b)编写验证表格数据的JSP。
我对进行验证的原则有一般性的疑问。目前我有一个JSP,它有一个表单和一个提交按钮。当用户单击提交按钮时,我将它们转发到Validate.jsp。然后Validate.jsp将验证数据,如果输入正常,它将自动将请求重定向到Amtrak网站,并填写所有参数。
FareFinder.jsp - > Validate.jsp - >特拉克
(单击文件名以查看我在牧场中的所有代码)
简而言之,我正在做的主要事情FareFinder.jsp:
<FORM METHOD=POST ACTION="Validate.jsp">
<!-- all the input fields are up here -->
<P><INPUT TYPE=SUBMIT></P>
</FORM>
我在Validate.jsp中做的主要事情:
<%@ page import="java.util.*" import="java.io.*"%>
<%
// retreive all the parameters
String origin = request.getParameter("_origin");
String depmonthyear = request.getParameter("_depmonthyear");
String depday = request.getParameter("_depday");
String dephourmin = request.getParameter("_dephourmin");
String destination = request.getParameter("_destination");
String retmonthyear = request.getParameter("_retmonthyear");
String retday = request.getParameter("_retday");
String rethourmin = request.getParameter("_rethourmin");
String adults = request.getParameter("_adults");
String children = request.getParameter("_children");
String infants = request.getParameter("_infants");
String searchBy = request.getParameter("_searchBy");
// validate the data
// redirect to Amtrak or back to FareFinder.jsp
%>
我有几个问题:
如何从Validate.jsp返回FareFinder.jsp并反映验证页面中发现的错误?
一旦发现错误,我是否会将响应重定向回FareFinder.jsp?
我怎么能将错误传回FareFinder.jsp?
通用答案也可以,但我以我的代码为例。
注意:验证必须在服务器端执行,我不能使用javascript。
答案 0 :(得分:9)
好的,根据评论,Servlet也会被覆盖。现在,创建一个并实现doPost()
,如下所示(半伪):
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Map<String, String> errors = new HashMap<String, String>();
String origin = request.getParameter("origin");
if (origin does not validate) {
errors.put("origin", "Put error message here.");
}
// Repeat for all parameters.
if (errors.isEmpty()) {
// No errors, redirect to Amtrak.
response.sendRedirect("http://amtrak.com");
} else {
// Put errors in request scope and forward back to JSP.
request.setAttribute("errors", errors);
request.getRequestDispatcher("FareFinder.jsp").forward(request, response);
}
}
在web.xml
url-pattern
/validateFare
{{}}}上将此servlet映射到http://example.com/context/validateFare
,以便您可以<form action="validateFare" method="post">
<label for="origin">Origin</label>
<input id="origin" name="origin" value="${param.origin}">
<span class="error">${errors.origin}</span>
<!-- Repeat other fields here. -->
</form>
调用它。
现在在JSP中执行以下操作:
action
您看到表单${param.origin}
已经指向servlet。输入值中的request.getParameter("origin")
将通过在引擎盖下执行${errors.origin}
来保留提交的值。 pageContext.findAttribute("errors").get("origin")
将通过大致执行{{1}}来显示任何相关的错误消息。
这必须让你开始:)祝你好运。