目录
public void setHeader(String name, String value)
public java.io.PrintWriter getWriter()
public ServletOutputStream getOutputStream()
public RequestDispatchergetRequestDispatcher(String path)
void forward(ServletRequest var1, ServletResponse var2)
HTTP响应报文协议
前端页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2>GET请求</h2> <form action="/reGetServlet" method="get"> <input type="text" name="username"/> <br> <input type="text" name="password"/> <br> <input type="submit" value="提交"> <br> </form> <h2>POST请求</h2> <form action="/postServlet" method="post"> <input type="text" name="username"/> <br> <input type="text" name="password"/> <br> <input type="submit" value="提交"> <br> </form> </body> </html>
servlet
import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException; @WebServlet("/reGetServlet") public class ReGetServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().println("response..."); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
浏览器
响应行
响应头
响应体
总结
响应报文协议:服务器发给浏览器的数据遵守的规范
响应报文协议包括:
1.响应行
2.响应头
3.响应体
响应行:
1.响应状态码 200 404 500 405 302 3042.响应协议/版本 http/1.1
响应头:
服务器时间响应数据的字符个数
响应体:
服务器响应给浏览器的数据如果浏览器请求的是静态资源页面,那么tomcat服务器就会响应给浏览器静态资源
reponse继承体系
因为ServletReponse和HttpServletReponse都是接口,不能创建出对象,所以tomcat会在底层创建ReponseFacade门面类对象-->ServletReponse reponse=new ReponseFacade();
然后将响应对象传递给service的doGet() doPost()方法。
reponse的方法
响应行
public void setStatus(int sc)
设置此响应的状态代码。此方法用于设置没有错误时的返回状态代码
响应头
public void setHeader(String name, String value)
用给定名称和值设置响应头。如果已经设置了头,则新值将重写以前的值。
containsHeader
方法可用于测试在设置其值之前头是否存在。
name 头的名称 value 头值,如果该值包含八位字节字符串,则应该根据 RFC 2047 (http://www.ietf.org/rfc/rfc2047.txt) 对其进行编码 See also containsHeader, addHeader
响应体
对于响应体,是通过字符,字节输出流的方式往浏览器写
public java.io.PrintWriter getWriter()
获取字符输出流
返回可将字符文本发送到客户端的
PrintWriter
对象。
public ServletOutputStream getOutputStream()
获取字节输出流
此方法的默认行为是返回对包装的响应对象调用 getOutputStream() 的结果。
请求重定向
重定向:属于服务器外部跳转的行为。当服务器某个资源没有处理业务的能力,会将新的服务器地址告知浏览器(location),并设置状态码304。浏览器会拿着新的地址再次向服务器发送请求
response.setStatus(302);
response.setHeader("location","资源B的访问路径")
特点
1. 服务器外部跳转2.两次请求和响应
3.地址栏发生改变,记录最后一次的地址
4.不能共享request域对象
测试
@WebServlet("/reponseDemo1") public class reponseDemo1 extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("我无法处理"); /* response.setStatus(302);//设置状态码 response.setHeader("location","/reponseDemo2");//告知资源B的地址*/ //简写 response.sendRedirect("/reponseDemo2"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response);B } }
@WebServlet("/reponseDemo2") public class reponseDemo2 extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("我可以处理"); //响应数据给浏览器 response.getWriter().println("success..."); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
浏览器:最后的地址的responseDemo2
请求转发
使用
public RequestDispatchergetRequestDispatcher(String path)
path:要跳转服务器的路径
void forward(ServletRequest var1, ServletResponse var2)
特点
1. 服务器内部跳转2.一次请求和响应
3.地址栏没有改变
4.共享request域对象
测试
@WebServlet("/responseDemo3") public class responseDemo3 extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //请求转发 System.out.println("responseDemo3..."); //向request域对象存储数据 request.setAttribute("msg","我无法解析"); //获取转发器 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/responseDemo4"); requestDispatcher.forward(request,response);//转发 } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
@WebServlet("/responseDemo4") public class responseDemo4 extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("responseDemo4..."); //获取request域对象的数据 Object msg = request.getAttribute("msg"); System.out.println(msg); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
浏览器页面:地址没有变
响应字符数据中文乱码问题
如果响应给浏览器的数据是中文,会出现中文乱码问题 原因:tomcat传输中文使用默认的编码表ISO-8859-1对中文进行编码,然后将编码数据发送给浏览器 浏览器默认码表是utf-8,进行解码就会乱码 解决:将响应的中文使用utf-8编码,同时告知浏览器使用utf-8解码
处理响应乱码
响应头 content-type 告知浏览器当前响应书数据的MINE类型,就是文件在tomcat的类型
普通文本:text/plain
超文本:text/html text/html;charset=utf-8->告知浏览器响应的是超文本,并且使用编码表utf-8
@WebServlet("/responseDemo5") public class responseDemo5 extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* 如果响应给浏览器的数据是中文,会出现中文乱码问题 原因:tomcat传输中文使用默认的编码表ISO-8859-1对中文进行编码,然后将编码数据发送给浏览器 浏览器默认码表是utf-8,进行解码就会乱码 解决:将响应的中文使用utf-8编码,同时告知浏览器使用utf-8解码 */ /*处理响应乱码 响应头 content-type 告知浏览器当前响应书数据的MINE类型,就是文件在tomcat的类型 普通文本:text/plain 超文本:text/html text/html;charset=utf-8->告知浏览器响应的是超文本,并且使用编码表utf-8 */ //response.setHeader("content-type","text/html;charset=utf-8"); //简写 response.setContentType("text/html;charset=utf-8"); response.getWriter().print("你好"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
标签:浏览器,对象,void,request,public,响应,Servlet,response From: https://blog.csdn.net/luosuss/article/details/139184041