0

我需要对从 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);  

如何更改此代码以使用属性维护正确的数据值?

暂时不要介意我还需要检查输入是否实际上是数字等。

4

1 回答 1

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 调度 jsp,包括对 servlet 2 的调用

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">
...
于 2013-08-20T23:38:58.800 回答