JSP内置对象——response对象_JSP对象看一个实例:

JSP内置对象——response对象_JSP对象_02

运行结果:

JSP内置对象——response对象_JSP对象_03

出现了一个很奇怪的现象,这个outer对象输出的字符串,跑到顶部去了。这个呢也就说明了response对象获得的writer对象的输出总是前于我们的内置对象。(response的writer对象在打印的时候呢,它是提前于我们的内置的out对象)。所以解决这个问题呢,刚好要利用out内置对象的flush()方法,也就是强制把缓冲区的内容写到浏览器上。代码如下:

JSP内置对象——response对象_JSP对象_04

运行结果:

JSP内置对象——response对象_JSP对象_05

还有一个常用的方法,叫做sendRedirect(String location)方法,重定向客户端的请求。也就相当于给客户端发了一个新的请求。让它重定向到一个新的集。比方说,我让当前界面执行的时候,跳转到登录界面去。代码如下:

JSP内置对象——response对象_JSP对象_06

这样写,当加载response.jsp的时候,会立刻跳转到reg.jsp界面。这个就说明,这句话起作用,response的sendRedirect()方法就说明是在让客户端在请求重定向,相当于让客户端发了一个新的请求,定位到我们的reg.jsp界面。

 

OK,那这些就是我们response内置对象常用的一些方法。

说到请求重定向,这里再描述下“请求重定向和请求转发的区别”:

JSP内置对象——response对象_JSP对象_07

举个例子:

JSP内置对象——response对象_JSP对象_08

修改reg.jsp页面的action。让数据参数提交到“response.jsp”。

JSP内置对象——response对象_JSP对象_09

然后再response.jsp中,做一个请求重定向。跳转到“request.jsp”:

JSP内置对象——response对象_JSP对象_10

然后我们根据运行结果,来观察“request.jsp”页面当中是否能接收到这个用户名、和爱好数据,如果能被接收,说明它前置请求的对象数据参数被保存了,如果不能够正常接收,说明这是一次新的请求。运行结果如下:

JSP内置对象——response对象_JSP对象_11

JSP内置对象——response对象_JSP对象_12

这个地方用户名为null,爱好也没有数据,而且它的地址栏,本来应该是从reg.jsp提交给“response.jsp”去处理的,但现在因为“response.jsp”做了请求重定向,定向到了“request.jsp”。相当于让客户端发了一个新的请求,请求到了“request.jsp”。又因为是一次新的请求,所以它上一次请求提交的用户名、爱好信息不会被保存。(也就是前面说的,“请求重定向就相当于做了两次请求,前一次的请求对象不会保存,而且地址栏上的地址会发生改变”)。

 

接着,现在再测试一下“请求转发”。请求转发属于我们的“request”对象。如下:

JSP内置对象——response对象_JSP对象_13

ok,测试一下:

JSP内置对象——response对象_JSP对象_14

JSP内置对象——response对象_JSP对象_15

这次呢,参数就能正常取出来,而且最终的这个界面实际上是“request.jsp”上的界面信息,但是地址栏上还是“response.jsp”。说明呢,这个地址栏并没有发生变化。

 

所以呢,“请求转发”呢,这是一个服务器行为,它相当于一次请求,那么转发之后的请求呢,它会保存前面这个请求的对象,Url地址呢还是上一个请求的地址。这个就是就是“请求重定向”和}“请求转发”的一个区别。————(“请求重定向”是客户端行为,“请求转发”是服务端行为。)