首页 > 其他分享 >HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码

HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码

时间:2022-12-29 15:02:06浏览次数:55  
标签:utf 重定向 响应 设置 response 客户端

​​HttpServletResponse   ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码_数据​​

HttpServletResponse  和 ServletResponse  都是接口

具体的类型对象是由Servlet容器传递过来


 

ServletResponse对象的功能分为以下四种:

        设置响应头信息;

        发送状态码;

        设置响应正文;

        重定向;


 

设置响应头信息

HttpServletResponse 中 (ServletResponse 中没有的)

​void​

使用该方法设置的响应头最终会发送给客户端浏览器

示例:

response.setHeader(“content-type”, “text/html;charset=utf-8”);

设置content-type响应头,该头的作用是:

  1. 告诉浏览器响应内容为html类型,编码为utf-8。
  2. 而且同时会设置response的字符流编码为utf-8,即response.setCharaceterEncoding(“utf-8”);


自动跳转

​response.setHeader("Refresh","5; URL=http://www.baidu.com");​

5秒后自动跳转到百度。

 


 

发送状态码以及类型

 

​response.setContentType("text/html;charset=utf-8");​

//等同与调用response.setHeader(“content-type”, “text/html;charset=utf-8”);

 

​response.setCharacterEncoding(“utf-8”);//设置字符响应流的字符编码为utf-8;​

​response.setStatus(200);//设置状态码;​

response.sendError(404, “您要查找的资源不存在”);//当发送错误状态码时,Tomcat会跳转到固定的错误页面去,但可以显示错误信息。

比如:

response.sendError(404, "您要查找的资源不存在了哈");

​​HttpServletResponse   ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码_重定向_02​​

 


 

设置响应正文


ServletResponse是响应对象,向客户端输出响应正文(响应体)可以使用ServletResponse的响应流

repsonse一共提供了两个响应流对象:

        PrintWriter out = response.getWriter():获取字符流;

        ServletOutputStream out = response.getOutputStream():获取字节流;

两个方法都是ServletResponse的 HttpServletResponse继承而得到

 

注意:

  1. 当然,如果响应正文内容为字符,那么使用response.getWriter()
  2. 如果响应内容是字节,那么可以使用response.getOutputStream()  例如下载时

在一个请求中,不能同时使用这两个流!

也就是说,要么你使用repsonse.getWriter(),要么使用response.getOutputStream(),但不能同时使用这两个流。

不然会抛出IllegalStateException异常。

 

 

​​HttpServletResponse   ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码_重定向_03​​​​HttpServletResponse   ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码_客户端_04​​

 

 

字符编码


在使用response.getWriter()时需要注意默认字符编码为ISO-8859-1,

如果希望设置字符流的字符编码为utf-8

可以使用

response.setCharaceterEncoding(“utf-8”)来设置。

这样可以保证输出给客户端的字符都是使用UTF-8编码的!

 

但客户端浏览器并不知道响应数据是什么编码的!

如果希望通知客户端使用UTF-8来解读响应数据,那么还是使用

response.setContentType("text/html;charset=utf-8")方法比较好

因为这个方法不只会调用response.setCharaceterEncoding(“utf-8”),还会设置content-type响应头

客户端浏览器会使用content-type头来解读响应数据。

 

 

缓冲区

response.getWriter()是PrintWriter类型,所以它有缓冲区,缓冲区的默认大小为8KB。

也就是说,在响应数据没有输出8KB之前,数据都是存放在缓冲区中,而不会立刻发送到客户端。

当Servlet执行结束后,服务器才会去刷新流,使缓冲区中的数据发送到客户端。

如果希望响应数据马上发送给客户端:

   向流中写入大于8KB的数据;

   调用response.flushBuffer()方法来手动刷新缓冲区;

 


重定向

 

当你访问A网址时,你会发现浏览器地址栏URL变成了B ,这就是重定向

所谓重定向,就是服务器重新定位你的方向,告诉你去别的地方

是再次的发出了请求,全程总共有两个请求

​​HttpServletResponse   ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码_重定向_05​​

 

第一步就是设置响应码为302。



响应码为200表示响应成功,而响应码为302表示重定向,你需要告诉浏览器需要重定向



第二步设置重定向的URL



因为重定向是通知浏览器再第二个请求,所以浏览器需要知道第二个请求的URL





所以完成重定向的第二步是设置Location头,指定第二个请求的URL地址。



 

response.setStatus(302);

response.setHeader("Location", "https://www.cnblogs.com/noteless/");

你会发现地址栏立刻进行了跳转

 

重定向的简化方式:


response.sendRedirec

 

如果是在同一台服务器上也可以用相对路径  

response.sendRedirect("/servlet/ServletB");

 

效果同上

 

重定向注意点:

 

        重定向是两次请求;

        重定向的URL可以是其他应用,不局限于当前应用;

        重定向的响应头为302,并且必须要有Location响应头;

        重定向就不要再使用response.getWriter()或response.getOutputStream()输出数据,不然可能会出现异常;

 

 


 

 

 

 

 



标签:utf,重定向,响应,设置,response,客户端
From: https://blog.51cto.com/u_15628606/5977611

相关文章

  • word vba 操作表格, 设置表格中的段落
    一、表格中的段落设置Sub表格中的段落设置()DimpAsParagraphForEachpInActiveDocument.ParagraphsIfp.Range.Information(wdWithInTable)Then'针对......
  • 重磅发布 | 中国职业教育大数据与人工智能专业设置分析报告(附报告PDF和完整名单)
    本报告对2017年至2021年期间,中国高等职业教育大数据与人工智能相关专业设置备案结果进行了汇总与可视化分析。本报告分别从时间、地域、行业等维度对专业设置备案数据进行全......
  • 跟光磊学Java-macOS版IntelliJ IDEA设置
    IntelliJIDEA  在使用IntelliJIDEA开发项目之前还需要进行一些基本的设置,完成这些设置以后能让项目开发更加顺畅1.如何打开设置窗口在进行IntelliJIDE......
  • 笔记本默认设置125%或者150%缩放,导致布局错乱的解决方法
    目录一:为什么会出现有这个问题?二:有什么解决方案?三:vue项目utils下新建js四:全局导入App.vue五:重新进入项目六:注意事项一:为什么会出现有这个问题?因为现在很多14寸......
  • excel 文本类型单元格下拉递增设置
    数字内容&文本类型的单元格在excel中下拉是不递增的,采用以下方法下拉递增生效:   ......
  • ubuntu20.04下载及设置apt源
    下载地址1: ​​​​https://mirrors.aliyun.com/ubuntu-releases/​​下载地址2:​​https://cn.ubuntu.com/download​​vim/etc/apt/sources.listubuntu18.04(bionic)......
  • #yyds干货盘点#Linux设置环境变量
    我们通过设置Linux的环境变量,可以方便我们的程序调用,比如我想把NodeJs加入环境变量/root/nodejs/bin/永久性更改对所有用户生效加入环境变量vim/etc/profile我们在最后一行......
  • 网站响应时间过长的原因及解决方法
    遇到过类似问题,我认为有以下几个原因:1、网站服务器故障维修(这种情况只能等段时间重新登录试试)2、网络连接不通(查看网线接口处是否插好)3、网站地址被和谐了(用代理)4、本身网......
  • mongodb副本集优先级设置
    在设置mongodb副本集时,Primary节点。second节点,仲裁节点,有可能资源配置(CPU或者内存)不均衡,所以要求某些节点不能成为Primary我们知道mongodb的设置: 除了仲裁节点,其它每一......
  • jquery dataTable 设置固定列
    引入js<scriptsrc="https://cdn.datatables.net/fixedcolumns/4.0.2/js/dataTables.fixedColumns.min.js"></script>js代码://初始化页面,加载供应商数据dataTable......