request对象
我们知道浏览器从服务器获取数据的时候需要向浏览器发送请求,当客户端向服务器发送请求的时候,服务器端会创建一个request对象,其中封装了和请求相关的一些内容,比如涉及到的数据。
常用方法
- String getParameter(String name)
该方法的作用是根据表单名称获取提交数据。 - void setCharacterEncoding(String charset)
该方法是指定请求的编码方式。
当我们获取提交过来的数据时,如果数据时英文的时候不会出现什么问题,如果数据时中文的话就有可能出现乱码问题,因为客服端和服务器端的编码方式是不一样的。
对于tomcat 8以上的版本,它自动解决了get请求方式下的乱码问题,但是对于post请求没有解决,需要我们手动解决,这就用到了该方法,使用方法是:
request.setCharacterEncoding("utf-8");
需要注意的是我们一般在最开始就进行编码方式的设置,否则先进行取数据操作再设置编码方式就不管用了,因为数据已经取出来了,除非再次获取数据。
转发
我们在编写web项目的时候经常会用到转发的功能,所谓的转发就是将该请求转给另一个servlet做处理,或者是抓到另一个页面显示最终的结果。
转发的作用是在服务器端将请求发送给服务器端的其他资源,以共同完成一次请求的处理,因为转发实际上相当于将用户的请求进行一下转接,因此request对象没有改变,实现方法如下:
request.getRequestDispatcher("/地址").forward(request, response);
request作用域数据传递
上述转发发生后就从服务器的一个资源跳转到另一个资源了,那么就会产生一个问题,直接跳转的话,那么在开始资源中的一些数据到了跳转到的资源中就不能继续使用了。
为了解决上面的问题,就用到了request作用域,request作用域是可以存储数据的空间,作用范围是一次请求有效(一次请求可以经过多次转发),因此我们可以将所用到的数据存储到其中等到用到的时候取出来即可。
存取数据涉及到两个方法,如下所示:
- 存数据:request.setAttribute(key,value);
- 取数据:request.getAttribute(key);
response对象
response对象用于响应客户请求并向客户端输出响应的信息。
常用方法
-
setHeader(name,value)
该方法用来设置响应消息的信息头。 -
setContentType(String s)
该方法是设置响应文件类型,响应式的编码格式。
当我们想客户端输送中文时,有可能会出现乱码问题,可以使用这个方法来解决,如下所示:
response.setContentType("text/html;charset=UTF-8");
-
setCharacterEncoding(String s)
该方法是设置服务响应内容的编码格式。 -
getWriter()
该方法是获取字符输出流,用于向客户端输送信息。该方法会返回一个PrintWrite对象。
重定向
重定向作用在客户端,客服端将请求发送给服务器后,服务器响应给客户端一个新的请求地址,客户端重新发送新请求。
实现方法如下所示:
response.sendRedirect(url);
重定向发生了新的请求,因此不能使用requet作用域来传递数据,response对象也没有作用域,要想进行数据传递的话,只能将数据拼接到url中,进行传递。
转发和重定向的区别
- 转发发生在服务器端,重定向发生在浏览器端。
- 转发相当于服务器将用户请求转给另外的资源进行处理,重定向相当于服务器告知浏览器去再次请求需要的资源。
- 因此转发期间只有一个请求,重定向发生了两次请求。
- 转发的地址栏不会发生改变,重定向的地址栏会发生改变。
- 转发由request对象来实现,重定向由response对象实现。