jstl中的http请求属性和参数,带有servlet

时间:2013-08-20 21:40:24

标签: java jsp servlets jstl

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

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

现在没关系,我还需要检查输入是否实际上是一个数字等等。

1 个答案:

答案 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">
...