当用户访问一个服务器时,会提交一个http请求,服务器收到请求时,返回http响应,响应和请求类似,也有某种结构,每个响应都是由状态行开始,可以包含几个头及可能的信息体(网页的结果输出部分)。

与request相对应的对象是response对象。可以用response对象对用户的请求进行动态响应,向用户端发送数据。当一个用户请求访问一个jsp页面时,该页面使用page指令设置页面的contentType属性的值是text/html,那么tomcat服务器将按这种属性值响应用户对页面的请求,将页面的静态部分返回给用户,用户浏览器接收到该响应就会使用html解释器解释执行所收到的信息。

页面指令可以设置contentType的值。如果想要动态地改变这个属性的值来响应用户,就需要使用response对象的setContentType(String s)来改变contentType的属性值。

当用户访问一个网页时,会提交一个http请求给tomcat服务器,这个请求包括一个请求行、http头和信息体.,例如:

Post/example3_1.jsp/HTTP.1.1

Host:localhost:8080

Accept-encoding:gzip,deflate

其中首行叫请求行,规定了向请求访问的页面提交信息的方式,例如,post、get等方式,以及请求的页面的名字和使用的通信协议。

第2,3行分别是两个头(header):host和accept-encoding,称host、accept-encoding是头名字,而localhost:8080以及gzip,deflate分别是两个头的值。一个典型的请求通常包含很多的头,有些头是标准的,有些和特定的浏览器有关。

同样响应也包含一些头,response对象可以使用方法addHeader(String head,String value);或setHeader(String head,String value);动态添加新的响应头和头的值,将这些头发送给用户的浏览器。如果添加的头已经存在,则先前的头被覆盖。

例子:如下,response添加一个响应头refresh,头值为5,那么用户收到这个头后,5秒后将再次刷新该页面,导致该网页每五秒刷新一次。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page import ="java.time.LocalTime" %>
<html>
<head>
    <title>Title</title>
</head>
<style>
    p{
        font-family: "宋体";
        font-size: 36px;
        color: blue;
    }
</style>
<body bgcolor="pink">
    <p>
        现在得到时间是:<br>
    </p>
    <% out.println("" + LocalTime.now());
    response.setHeader("Refresh","5");
    %>

</body>
</html>

Response对象的重定向

在某些情况下,当响应用户时,需要将用户重新引导至另一个页面。例如,如果用户输入的form表单信息不完整,就会再被引导到该form表单的输入页面。可以用response对象的sendRedirect(URL url)方法实现用户的重定向,即让用户从一个页面跳转到sendRedirect(URL url)中指定的页面,即所谓的客户端跳转。需要注意的是,当使用sendRedirect(URL url)方法将用户从一个页面重定向到另一个页面时,tomcat服务器还是要把当前jsp页面执行完毕后才实施重定向(跳转)操作,但Tomcat服务器不再给用户看当前页面的执行效果。如果执行sendRedirect(URL url)方法后,紧接着执行return返回语句,那么tomcat服务器会立刻结束当前jsp页面的执行。