response的运行流程
response:
1. 属于重定向请求;
2. 其地址栏的URL会改变;
3.会向服务器发送两次请求;
用response,A没有钱,请求失败,但是A告诉B,C有钱。于是B再次向C借钱,C借给B,请求成功。
response是响应对象。
通过response设置响应行
设置响应行的状态码
setStatus(int sc)
package com.oracle.demo01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HeadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置响应行中的状态码(只能改变响应行中的状态码,版本号与状态信息无法改变,状态信息随着状态的改变而改变)
response.setStatus(404);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
通过response设置响应头
有众多方法,但是常用的就是setHeader(String name,String value)
重定向需要:1.状态码:302
2.响应头:location 代表重定向地址
使用该方法设置的响应头最终会发送给客户端浏览器
package com.oracle.demo01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.org.apache.regexp.internal.RESyntaxException;
public class Servlet01 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/* //设置响应行状态码
response.setStatus(302);
//设置响应头中的Location
response.setHeader("Location","/WEB05/Servlet02");*/
//重定向(与上面的代码是一致的)简洁版
response.sendRedirect("/WEB05/Servlet02");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
设置定时刷新响应头的信息
package com.oracle.demo01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RefreshServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置定时刷新的头
response.setHeader("Refresh","5;url=https://www.baidu.com");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
window.οnlοad=function(){
//获取span元素
var second=document.getElementById("second");
//定义秒数
var time=5;
//设置定时器
var timer=setInterval(function(){
second.innerHTML=time;
time--;
if(time<0){
clearInterval(timer);
location.href="https://www.baidu.com";
}
},1000);
}
</script>
</head>
<body>
恭喜你,注册成功!
<span id="second" style="color:red">5</span>
秒后跳转,如没跳转,请点击
<a href="https://www.baidu.com">这里</a>
</body>
</html>
通过response设置响应体
解决中文乱码问题
需要设置两个地方的中文乱码问题,一个是缓冲区的时候设置,一个是客户端解码的时候进行设置。
package com.oracle.demo01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BodyServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*//设置缓冲区的编码表
response.setCharacterEncoding("UTF-8");
//设置客户端浏览器
response.setHeader("Content-Type","text/html;charset=utf-8");*/
//解决响应的中文乱码问题(与上面的代码是一样的,简洁版)
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("中国");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}