一、概述
Response是代表Http响应信息的对象,其中将会封装服务器要发送给浏览器的响应信息,将response对象作为参数传递给service方法,在service方法处理请求的过程中,可以将要发送给浏览器的数据,先写入response对象中,在service方法执行完后,服务器负责从response对象中获取到响应信息,再按照http响应信息的格式组织成响应消息,发送给浏览器。
常用的方法:
getwriter()---给浏览器响应数据
setContentType()---用来解决防止响应时的中文乱码
senRedirect()--重定向
二、测试
package cn.tedu.response;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/ResponseServlet")
public class ResponseServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//给浏览器响应数据
//3.如果想要响应中文,防止中文乱码
response.setContentType("text/html;charset=utf-8");
//1.获取写出流
PrintWriter out = response.getWriter();
//2.正式写出数据——写到浏览器
out.write("Hello,Servlet1~~~");
out.write("Hello,Servlet2~~~");
out.write("Hello,Servlet3~~~");
out.write("你好,Servlet~~~");//中文乱码啦!
}
}
三、重定向
1.概述
当浏览器向服务器发送请求访问某一个资源A时,资源A在响应时通知浏览器需要再进一步请求才能获取到对应的资源,浏览器再次向服务器发送请求访问资源B,最终是由资源B响应浏览器要获取的数据,这个过程叫做重定向,具有以下特点:
1,重定向前后是两次请求、两次响应
2,重定向前后,浏览器地址栏地址会发生变化(因为两次请求都是通过浏览器发起,浏览器知道这个跳转过程,因此地址栏地址会发生变化)。
3,重定向前后的request对象不是同一个 (因此重定向前后是两次请求,服务器根据两次请求会创建两个request对象,因此request对象不是同一个)
4,重定向前后的两个资源可以来自不同的Web应用,甚至可以是来自不同的虚拟主机或者服务器。
5,使用代码: response.sendRedirect(“重定向到资源的路径”);
2.测试
ServletA
package cn.tedu.redirect;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/ServletA")
public class ServletA extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//面试题:重定向和请求转发的区别???
//1,请求转发是请求request的功能,全程1次请求1次响应,地址栏不变
//request.getRequestDispather("目标访问的方式").forward(请求,响应)
//2,重定向是response的功能,全程2次请求2次响应,地址栏改变
//response.sendRedirect("目标访问的方式")
response.sendRedirect("https://www.baidu.com/");
}
}
ServletB
package cn.tedu.redirect;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/ServletB")
public class ServletB extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}