关于Request的用法疑问

jiangtianyin 2010-04-20 11:46:34
现在加入我有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">密  码:</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()传递的数据又有何区别?

不知道我的问题是否描述清楚,请各位高手赐教
...全文
496 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
老紫竹 2010-04-21
  • 打赏
  • 举报
回复
我来解释一下,希望对你有帮助!
request.setAttribute("pageNow", "1");

这个是在request的范畴里才有效,而request是服务器端才存在的东西,也就是java里才有的。
OK
forward 这个是服务器端的跳转,也就是客户端根本不知道这个动作,也就是从一个java程序,转到了另一个java程序,所以此时request会被作为参数传递过去。

sendRedirect 这个是客户端的跳转,服务器端会发送一个跳转的代码和url给浏览器,浏览器会重新请求指定的URL,所以此时,request已经无效了。

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

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧