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请求时序图