现在加入我有login.jsp、welcome.jsp个页面,a.jsp中有一个表单
<form name="info" action="ValidateServlet" method="post">
   <h1>用户登陆</h1>
   <hr/>
   <table border="0">
<tr>
<td class="td1">用户名:</td>
<td class="td2"><input class="input" type="text" name="userName"></td>
</tr>
<tr>
<tr>
<td class="td1">密&nbsp;&nbsp;码:</td>
<td class="td2"><input class="input" type="password" name="userPwd"></td>
</tr>
<tr>
<tr>
<td colspan="2" style="text-align:center"><input type="submit" value="确定" name="btnSubmmit"></td>
</tr>
</table>
   </form>
然后有一个servlet叫做ValidateServlet.java,通过从数据库中读取 数据来验证用户是否存在,在doPost()方法中有如下代码:
                  String name=request.getParameter("userName");
         String password=request.getParameter("userPwd");
        
         request.setAttribute("pageNow", "1"); 
         if(ubc.checkUser(name,password)){//红色代码为验证的方法,这里省略了
         request.getRequestDispatcher("PageServlet").forward(request,response);
         }
         else{
         request.getRequestDispatcher("login.jsp").forward(request,response);
         }
处理完后跳转到另一个servlet (PageServlet.java)中再进行其他处理,最后跳转到welcome.jsp中去。我搞不明白的是以下两点:
1、通过表单提交的数据(例如上面的userName)和通过request.setAttribute("pageNow", "1"); 设置的PageNow的生存范围有什么不同,当在多个页面之间传递时会不会有什么变化或者消失?2、request.getRequestDispatcher("PageServlet").forward(request,response);和response.sendRedirect("PageServlet")有什么不同,该如何选择?以及通过这两中方法传递的Request中的数据的生存期有何区别(例如通过表单提交的userName分别用以上两种方法传递会有什么区别,通过request.setAttribute()传递的数据又有何区别?不知道我的问题是否描述清楚,请各位高手赐教

解决方案 »

  1.   

    这个问题还真是没想过啊,
    第一个问题:想了一下,表单提交数据形式的话,提交到哪个页面对哪个页面可见,这不就是request属性范围所指的本页发出请求到另一个jsp页面,随后此属性就消失,是一样范围的?
    第二个问题:request.getRequestDispatcher("PageServlet").forward(request,response);和response.sendRedirect("PageServlet")有什么不同,该如何选择?前者是是服务器端跳转,后者是客户端跳转,区别就是前者可以保存request属性,而后者不能(从一个页面跳到第三个页面,超过了request属性范围,不能保存request属性),
    第三个问题:通过表单提交的userName分别用以上两种方法传递会有什么区别,通过request.setAttribute()传递的数据又有何区别?
    不知道,说不清楚
      

  2.   

    我来解释一下,希望对你有帮助!
    request.setAttribute("pageNow", "1"); 这个是在request的范畴里才有效,而request是服务器端才存在的东西,也就是java里才有的。
    OK
    forward 这个是服务器端的跳转,也就是客户端根本不知道这个动作,也就是从一个java程序,转到了另一个java程序,所以此时request会被作为参数传递过去。sendRedirect 这个是客户端的跳转,服务器端会发送一个跳转的代码和url给浏览器,浏览器会重新请求指定的URL,所以此时,request已经无效了。当然,此时session还是生效的。