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.onload=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); } }