解剖request

[size=medium] request的生命周期很短,只活动于浏览器向服务器的一次请求中,当请求执行完,当前对象也将被销毁掉。[/size]
[size=medium] request经常用来获取浏览器页面上输入的表格信息——用户名、密码诸如此类也可以在servlet中setAttribute("索引名","索引值")来存储一对object类型的键值对,通过forward或include方法实现请求跳转,区别只是前者不将response中的输出流信息输出,后者则进行输出。[color=red]由于跳转还是在同一个请求中进行的,request对象并未被销毁,所以能从跳转到的页面中得到键值对中的值。[/color][/size]
/**
* HelloServlet中的请求处理方法
*/
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.service(req, resp);
resp.setContentType("text/html;charset=gbk");
resp.setCharacterEncoding("gbk");
req.setCharacterEncoding("gbk");
//得到用户发送请求时输入的参数
String username = req.getParameter("username");
req.setAttribute("username", username);
req.getRequestDispatcher("redirect.jsp").forward(req, resp);
//resp.sendRedirect("redirect.jsp");
}

[img]http://dl.iteye.com/upload/attachment/527882/b02b2bc5-9cf9-3749-9320-6a7851cfafa7.png[/img]
[size=medium] [color=red]登录界面:当点击登录按钮时,请求被服务器接收,servlet进行处理,将username保存,然后跳转到redirect.jsp中。[/color][/size]
[img]http://dl.iteye.com/upload/attachment/527884/cd86d76c-c232-3ef7-9378-dcf1e94e40aa.png[/img]
[size=medium] [color=red] 跳转界面:跳转到redirect.jsp中,并在页面上显示出了用户名,值得注意的一点,地址栏并没有指向redirect.jsp,间接的证明所有操作都在一个请求中。[/color][/size]
[img]http://dl.iteye.com/upload/attachment/527886/a368117a-54bb-33c6-945f-f27eb38f8e5c.png[/img]
[size=medium] [color=red] firebug:很明显,服务器只收到一个采用post方法的请求。[/color][/size]
[size=medium] 至于request的生命周期是否只在一个请求中,并没有得到验证。那么如果在两个请求中完成上面的操作,是不是还会得到username呢?[/size]
/**
* HelloServlet中的请求处理方法
*/
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.service(req, resp);
resp.setContentType("text/html;charset=gbk");
resp.setCharacterEncoding("gbk");
req.setCharacterEncoding("gbk");
//得到用户发送请求时输入的参数
String username = req.getParameter("username");
req.setAttribute("username", username);
//req.getRequestDispatcher("redirect.jsp").forward(req, resp);
//重定向
resp.sendRedirect("redirect.jsp");
}

[img]http://dl.iteye.com/upload/attachment/527896/d51ee299-6ba7-33f0-a88f-99f9ae9958ea.png[/img]
[img]http://dl.iteye.com/upload/attachment/527898/5f1ccd60-80fb-302a-be60-8bc1ac2d5b36.png[/img]
[size=medium][color=red] 1、用户名显示为"null",说明request的生命周期是一次请求;2、地址栏指向了redirect.jsp;3、firebug中显示出了两次请求,一次是我指定的"post",另一次应该是默认的"get",response将重定向的信息返回给浏览器,浏览器再进行第二次请求,此时第一个request对象被销毁,所以再也得不到它携带的信息了。[/color][/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值