细说Servlet之 详解HttpServletRequest对象

HttpServletRequest对象代表客户端的请求,当客户端通过http协议访问服务器时,http请求头中的所有信息都封装在这个对象中,可以通过HttpServletRequest的方法获得信息。



获得客户机信息常用方法


补充:服务器端口号不变,而客户机的端口号随机,过了长连接的30秒后随机产生。


HttpServletRequest常用方法:


1.获得客户机请求头:

getHeader()                  通过消息头获取信息

getHeaders()                

getHeaderNames()      返回所有消息头的名字,返回Enumeration<String>



2.获得客户机请求参数: 

getParameter()                                   根据名字获取值

getParameterValues()                       得到根据名字返回多个值,返回String数组,常用于复选框

getParameterNames()                       得到所有请求参数的名字


3.请求转发:指一个web资源受到客户端请求后,通知服务器去调用另一个web资源进行处理。


request对象同时也是一个域对象,开发人员通过request对象带给其它web资源处理。

forward(request,response)详解:把request和response对象传递给下一个Servlet,因为两个Servlet用的是同一个                    请求和响应对象,所以能共享数据。


setAttribute()存放一个属性到请求对象里,request的attribute在一次http请求中有效,只要没回到浏览              器就算一次请求。



注意:

1.转向是在web服务器发生的,使用forward()不能转发到该web应用外的url。

2.因为forward()是发生在web服务器,所以两个Servlet使用同一个request和response对象。

3.使用sendRedirect()方法不能通过setAttribute()把属性传递给下一个Servlet,因为重定向后就不在一次请求中。



面试题:

sendRedirect()和forward()的区别是什么?

答:1.实际发生的位置不一样。

sendRedirect()发生在浏览器

forward()发生在web服务器

  2.用法不一样

request.getRequestDispatcher("/资源url").forward(request,response)

response.sendRedirect("/web应用/资源url")  需要加上应用名,因为是在浏览器端进行定位



3.能够去的url范围不一样

sendRedirect()能够去任何url

    forward()只能去当web应用的资源



什么是一次http请求?

答:只要没有停止,也没有回到浏览器重定向,就算走了100个Servlet,只要没有回到浏览器(重定向会回到浏览器再次请求),就还算一次http请求。



http请求时序图




















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值