一、HttpServletRequest共享数据
● HttpServletRequest不仅可以获取一些列数据,还能通过属性共享、传递一些数据,比如运用在请求转发和请求包含中
● 相关方法
1、void setAttribute(String name,Object obj) ,用于定义一个属性,其中name是属性的名称,obj是属性值,如果原先已经存在相同名称的属性,则会将原来的属性删除再添加该属性,如果obj为null则会删除删除指定名称的属性
2、Object getAttribute(String name) ,根据属性名获取属性值
3、void removeAttribute(String name) ,删除指定名称的属性
4、Enumeration getAttributeNames() ,返回一个包含所有属性名的Enumeration对象
● 需要注意同一个请求中的数据才能共享、传递
二、请求转发和请求包含
请求转发
● Servlet之间可以相互跳转,如果某个Servlet的功能不能处理客户端的请求则可以使用跳转的方式将请求传递给另一个Servlet,由另一个Servlet完成并响应给客户端
● 相关方法
1. RequestDispatcher getRequestDispatcher(String path) ,该方法由
HttpServletRequest提供,用于获取一个封装了某条路径所指定资源的
RequestDispatcher对象,路径必须以斜杠/开头,即该路径就是需要转发到的某个
Servlet的路径
2. void forward(ServletRequest req,ServletResponse resp) ,该方法由
RequestDispatcher提供,用于将请求转发给另一个Web资源,如某个Servlet
请求包含
● 某个Servlet不能完全处理一个请求时可以将另一个Servlet“包含”进来,实现功能合并然后响应给客户端,这时浏览器的地址栏不会发送改变,被包含的Servlet的响应头会丢失,因为是由第一个Servlet做出响应的
● 相关方法
1. RequestDispatcher getRequestDispatcher(String path) ,该方法根请求转发的
相同,路径是需要包含的哪个Servlet的路径
2. void include(ServletRequest req,ServletResponse resp) ,该方法由
RequestDispatcher提供,用于实现包含另一个Servlet的功能
三、获取流对象
● BufferedReader getReader() ,该方法获取一个字符输入缓冲流
● ServletInputStream getInputStream() ,该方法获取一个字节输入流
● 注意这两个方法读取的数据来自请求体,所以使用GET方式获取不到数据,而POST方法可以
四、中文乱码问题
● 在网页的表单中如果需要提交的数据存在中文时可能会出现乱码的情况
● HttpServletRequest提供了 void setCharacterEncoding(String name) 方法用于设置Request对象的解码方式
● GET方式提交的请求不会出现乱码的问题,但是POST方式存在乱码问题