request
代表http请求的对象,使用HttpServletRequest接口进行。
继承结构
HttpServletRequest继承了ServletRequest,这个接口增加了更多和http协议相关的方法。
常见的调用的一些方法
获取客户端的信息
req.getRequestURL()获取客户端的请求地址
req.getRequestURI()获取客户端的想要请求的资源
req.getQueryString()获取请求行中的请求参数
req.getRemoteAddr()获取客户端的ip地址
req.getMethod()获取客户端的请求方式,一共有7种,常用的get/post.
req.getContextPath()获取当前web应用的虚拟目录名称(注意在写路径是应在需要写web应用的地方通过getContextPaht()方法动态获取,而不是写出固定的路径)
获取请求参数
req.getParameter(String name)
req.getParameterValues(String name) 返回string[] 通过name获取多个CheckBox的值
req.getParameterMap()返回Map<String,String[]> -----key:name,value:多个值
req.getParameterNames()获得所有name
request请求的forward和relocation的区别
forward请求转发:实现资源在一次请求链上的跳转,浏览器的地址栏并不会发生改变;
relocation请求重定向:302+重定向地址:已经不是一次请求了,可能两次甚至更多在不同的虚拟主机之间或者web应用之间的跳转,明显地地址栏的地址会发生改变。
注意,转发前,如果在响应response的缓冲区里写入了数据但是还没有打给浏览器,那转发时这些数据会被清空;如果打给了浏览器,那就相当于此时完成了一次请求响应的过程,再转发将会报错。
request作为域对象的用处
域对象:具有可见性的对象,可以利用自身的map来实现资源共享,就比如request就可以转发,刚好可以当做一个域对象。
request域对象生命周期:一次请求和响应的整个过程中
作用范围:整个请求链上
主要功能:资源共享
来看一下request作为域对象实现资源共享的api
req.setAttribute(String name,Object valueObj)
req.getAttribute(String name)
req.removeAttribute(String name)
req.getAttributeNames()