我需要对来自Web表单的servlet1中的数字进行一些验证。该过程需要看起来像:
1.) User sends two numbers (t1 and t2) to servlet1 from a web form
2.) Servlet 1 validates the numbers by checking: if (t2-t1)>2 , then t2 = t1 + 2
3.) The validated numbers are actually sent directly back to the jsp
4.) The end user's browser calls a different servlet2 with the output from this servlet1.
5.) The end user might repeat this process many times, producing many iterations of customized output
从我的研究中,我认为这意味着:
a.) setting attributes in servlet1 for t1 and t2 which are sent back to the user's browser with the results of the validation, so that
b.) numbers with a valid difference (<=2) can then be sent into servlet2.
我的问题与如何管理参数和属性之间的差异有关。我认为数据在html输入文本框中作为参数开始。我在文本框中有jstl代码以确保有有效数据。但我的jstl只适用于参数。在最终用户首次使用Web表单之后,我认为所有后续迭代都将使用属性而不是参数。任何人都可以告诉我如何重新编写将管理属性和参数值的代码,以便数据始终是它应该是什么?
到目前为止,我有一个带有html表单的jsp,其中包含具有以下格式的输入字段:
<input type="text" name="t1" value="${empty param.t1 ? '-1' : param.t1}" size="15" />
<input type="text" name="t2" value="${empty param.t2 ? '1' : param.t2}" size="15" />
上面的jsp是servlet1指定的请求调度程序,其doPost方法包括如下内容:
String t1 = request.getParameter("t1");
String t2 = request.getParameter("t2");
if(((double)t2-(double)t1)>2){
t2 = String.valueOf((double)t1 + 2);
}
request.setAttribute("t1", t1);
request.setAttribute("t2", t2);
如何更改此代码以使用属性维护正确的数据值?
现在没关系,我还需要检查输入是否实际上是一个数字等等。
答案 0 :(得分:1)
如果您希望浏览器向Servlet2
发出请求,您可以执行此操作
String t1 = request.getParameter("t1");
String t2 = request.getParameter("t2");
if(((double)t2-(double)t1)>2){
t2 = String.valueOf((double)t1 + 2);
}
response.sendRedirect(servlet2URL+"?t1="+t1+"&t2="+t2);
如果Servlet1
可以直接拨打Servlet2
。
对于此Servlet2
,需要使用getAttribute
而不是getParameter
,因为它们可能是不同的值。
String t1 = request.getParameter("t1");
String t2 = request.getParameter("t2");
if(((double)t2-(double)t1)>2){
t2 = String.valueOf((double)t1 + 2);
}
request.setAttribute("t1", t1);
request.setAttribute("t2", t2);
RequestDispatcher requestDispatcher = request.getRequestDispatcher(servlet2URL);
requestDispatcher.forward(request,response);
选项3调度包含对servlet 2的调用的jsp
String t1 = request.getParameter("t1");
String t2 = request.getParameter("t2");
if(((double)t2-(double)t1)>2){
t2 = String.valueOf((double)t1 + 2);
}
request.setAttribute("t1", t1);
request.setAttribute("t2", t2);
getServletContext().getRequestDispatcher("foo.jsp").forward
(req, res);
在foo.jsp
中<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
t1 = <c:out value="${t1}"/>
t2 = <c:out value="${t1}"/>
<img src="url-pattern-for-servlet2">
...