我的学习之路_第三十二章_HttpServletRequest
HttpServletRequest
取得请求行的信息:
返回值 : String getMethod() 请求方式
返回值 : String getRequestURI()请求目标
返回值 : String getProtocol() 使用协议
取得请求头的信息:
返回值 : String getHeader(String name)
传一个请求头的key值,返回一个请求头的value值
返回值 : String getHeaderNames(String name)
取得所有请求头的名字,封装在枚举集合中
获取得到的对象,有连个方法,hasMoreElement() 判断集合中是否存在下一个元素, nextElement() 取得下一个元素(请求头的名字)
取得请求体的信息(重要)
返回值 : String getParameter(String name)
返回值 : String[] getParameterValues(String name)
取得提交的内容中一个名对个值得参数
返回值 : Enumeration<String> getParameterNames()
返回值 : Map<String,String[]> getParameterMap()
获取所以得请求体中所有的参数,将参数封装到Map集合中,其中key是提交的name,字符串数据是值.
注意前面两个方法是给程序员用的,后面两个方法给框架用(通用代码)(BeanUtils工具类)
设置字符集
setCharacterEncoding("UTF-8") :只能解决POST方式提交的参数中的中文乱码问题
内部转发
getRequestDispatcher("WebPath").forward(req,resp)
注意:目标页面是从服务器内部转跳到过去的,所以没有产生新的请求和响应,所以目录页面使用和当前页面相同的请求和响应对象.所以
才能实现连个页面之间使用Request域传递数据.
域对象:生命周期是请求到达服务器时产生,响应发回给浏览器后就销毁的.
重定向和内部转发的区别:
重定向:先由浏览器发送请求到服务器,服务器发回指令,要求浏览器发送请求到指定的URL.
实际上浏览器发了两个请求,所以浏览器的地址栏上是第二个页面的地址
所以此时按F5刷新页面,则提交到第二个页面的请求
因为到第二个页面是新的请求,所以第一个页面和第二个页面之间想要传递数据,不能用Request域.
内部转发:由浏览器发送请求道服务器,服务器内部把此请求转到第二个页面中,第二个页面运行结果后,把最终的页面结果
响应给浏览器. 所以浏览器中的地址栏是没有变化的,还是第一个页面的地址,但浏览器中显示的页面内容是第二个页面的内容.
因为第一个页面和第二个页面使用的都是访问第一个页面的请求和响应对象,所以在传递数据时,可以使用Request域.
优先使用内部转发,只有第一个页面是表单提交,且第二个页面有需要刷新的需求时,才使用重定向.(需要显示一次性的数据时,
所以必须用Request域来在两个页面之间传递数据,所以必须内部转发)
BeanUtils工具类
popuplate(Object bean , Map)
日期转换: 1,创建一个日期转换器对象 2.设置转换器的格式 3.注册转换器(告诉BeanUtils工具,在把字符串转成什么类型时使用此转换器)