介绍
对象主要将 JSP 容器处理后的结果传回到客户端。可以通过response变量设置HTTP的状态和向客户端发送数据,如Cookie、HTTP文件头信息等。
部分响应头描述:
响应头 | 描述 |
---|---|
Allow | 告诉浏览器,服务器支持的 request 方法(GET,POST等等) |
Connection | 命令浏览器是否要使用持久的HTTP连接。close值 命令浏览器不使用持久HTTP连接,而keep-alive 意味着使用持久化连接。 |
Content-Encoding | 指定传输时页面的编码规则 |
Content-Language | 表述文档所使用的语言,比如en, en-us,,ru等等 |
Content-Type | 表明文档使用的MIME类型 |
Refresh | 指明浏览器每隔多久请求更新一次页面。 |
Set-Cookie | 指明当前页面对应的cookie |
Expires | 指明啥时候过期并从缓存中移除 |
Content-Length | 表明响应的字节数。只有在浏览器使用持久化 (keep-alive) HTTP 连接时才有用 |
基础结构
response 对象是接口 javax.servlet.http.HttpServletResponse
的对象。
javax.servlet.ServletResponse
接口javax.servlet.http.HttpServletResponse
接口
ServletResponse
只有一个 HttpServletResponse
一个子接口。因为现在浏览器都基于 http
协议,如果由新的只需添加新的子接口。
作用
用来接收客户端发送而来的请求信息,例如:设置头信息,设置Cookie,进行跳转(重定向/客户端跳转)
主要方法
- 添加 Cookie
void addCookie(Cookie cookie)
- 添加头信息
void addHeader(java.lang.String name, java.lang.String value)
- 跳转
void sendRedirect(java.lang.String location) throws java.io.IOException
- 设置响应的 MIME 类型
void setContentType(java.lang.String type)
- 设置响应编码
void setCharacterEncoding(java.lang.String charset)
setCharacterEncoding
和 setContentType
区别
setCharacterEncoding
只是设置字符的编码方式setContentType
除了可以设置字符的编码方式还能设置文档内容的类型
主要几种用法
设置头信息
头信息是指能够随着客户端一起提交到服务器,而后又能够从服务器相应给客户端的一些信息,叫做头信息,头信息的内容有很多,最有用的就是设置定时刷新界面或者进行定时的跳转。
response 对象可以设置头信息的内容,通过 request 对象取得都头信息内容。
通过 request 获取
<%
Enumeration e = request.getHeaderNames();
while(e.hasMoreElements()){
String s = (String)e.nextElement();
%>
<h3>name=<%=s %>--->value=<%=request.getHeader(s) %></h3>
<%
}
%>
通过以上代码获取内容示例如下:
name=host--->value=localhost:8080
name=connection--->value=keep-alive
name=cache-control--->value=max-age=0
name=upgrade-insecure-requests--->value=1
name=user-agent--->value=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edg/81.0.416.72
name=accept--->value=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
name=sec-fetch-site--->value=none
name=sec-fetch-mode--->value=navigate
name=sec-fetch-user--->value=?1
name=sec-fetch-dest--->value=document
name=accept-encoding--->value=gzip, deflate, br
name=accept-language--->value=zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
第二次获取的时候,我们可以发现会多一个 cookie,内容是JSESSIONID,实际上这个ID就是第一次访问服务器的时候,服务器自动设置上的,所以第二次访问的时候可以显示,这个ID实际上是服务器区分不同的客户端用的。
那么如何设置头信息呢。
范例:页面定时刷新
<%!
//定义全局变量
int count = 0;
%>
<%
response.addHeader("refresh", "3");//设置头信息(3秒刷新一次)
%>
<h1><%=count++ %></h1>
设置 Cookie
表示的是服务器保存在客户端的一组数据,所以这种数据是不安全的数据。
Cookie本身是一个类,有其常用的操作方法:
- 构造方法
Cookie(java.lang.String name, java.lang.String value)
- 取得Cookie的名称
public java.lang.String getName()
- 取得Cookie的值
public java.lang.String getValue()
- 设置Cookie最大保存时间
public void setMaxAge(int expiry)
- 单位秒
- 设置Cookie的值
public void setValue(java.lang.String newValue)
那么怎么把 Cookie 添加到客户端?使用 response 对象完成。
void addCookie(Cookie cookie)
那么如何取得 Cookie?使用 request 获取
Cookie cookie[] = request.getCookies();//取得客户端上面所有的Cookie
跳转
跳转分两种,一种是转发,一种是重定向
- 转发(服务端跳转):地址栏不会变化,使用jsp:forward进行跳转
- 重定向(客户端跳转):地址栏会变化,表单提交,a标签,设置头信息自动跳转
response 可以使用 sendRedirect()
完成
<%
response.sendRedirect("Demo01.jsp");
%>
此种形式的跳转也是属于重定向的范畴。
两种跳转区别
- 转发
- 跳转之后,地址栏不会发生变化
- 只要执行到跳转的代码,会立刻无条件跳转
- 重定向
- 跳转之后,地址栏会发生变化
- 是将整个页面执行完成之后,再进行跳转的