javaWeb之Response详解

Response

      代表了http响应的对象

继承结构 (!掌握)

                   ServletResponse -- 通用的响应接口, 定义了响应对象应该具有的功能

                            |

                            |--HttpServletResponse 在ServletResponse的基础上, 添加了很多和Http协议相关的方法

 

组成结构

状态行主要是指此次请求的响应状态,用数字来表示。

一个3位的数字, 范围为100~600, 表示服务器处理请求的结果

                                               200~299 表示服务器正确的处理了请求

                                               300~399 表示服务器正确的处理了本次请求, 但是如果想要继续执行, 还需要更多的额外信息

                                               400~499 表示客户端的请求有问题

                                               500~599 表示服务器端发生了问题

 

                                               200 表示服务器处理成功

                                               302 表示请求重定向

                                               304/307 通知浏览器使用缓存资源

                                               404 表示客户端请求的资源不存在

                                               500 表示服务器端处理请求出错

 

response的api

        response.getOutputStream().write()字节流向response缓冲区返回字节数据;

        response.getWriter().write()字符流向response缓存区返回字符数据;

注意

       1.在一次请求响应中,二者只能选一;

       2.写入缓冲区的数据,到service方法执行结束后,将由服务器将数据组织成响应消息打给浏览器。

解决字节流或者字符流乱码问题:response.setContentType(“text/html;charset=xxx”)

重定向:response.sendRedirect(“页面的相对web应用根目录(即项目名)的路径”)

定时刷新: (可以看成是定时跳转)

通过Refresh响应头, 可以实现在多少秒之后跳转到另外一个资源response.setHeader(“Refresh”,”秒数;url=”需要刷新的页面的相对路径””)

 

请求转发/请求重定向/定时刷新都可以实现资源的跳转, 区别是什么呢?

请求转发:

                   一次请求,一次响应;

                   地址栏不变;

                   只能在服务器内部同一应用跳转,不能转发到别的服务器的别的应用上;

请求重定向:

                   两次请求,两次响应,不同的request对象;(每次请求服务器都会创建新的request对象)

                   地址栏改变;

                   既可以服务器内,也可以不同服务器不同应用上跳转;

定时刷新:

                   两次请求,两次响应,request对象肯定不是一个了;

                   地址栏发生变化;

                   可以用于服务器内部的资源跳转, 也可以用于不同应用和不同服务器之间的资源跳转;

和重定向的区别就是有了时间间隔,可以进行别的操作, 如: 注册成功, xx秒后跳转到xxx;

 

在服务器中设置响应头来控制浏览器的缓存行为

缓存:

       setDateHeader("Expires", System.currentTimeMillis()+1000*60*60*24);1.0协议缓存一段时间setHeader("Cache-control", "max-age=60");1.1协议缓存一段时间

不要缓存:

       setDateHeader("Expires", -1);

       setHeader("Cache-control", "no-cache");1.1协议

       setHeader("Pragma", "no-cache");http1.0协议

赋一张请求响应流程图

猜你喜欢

转载自blog.csdn.net/qq_40531768/article/details/89392955
今日推荐