响应对象Response

1.概念【响应给浏览器】
  • 响应∶回馈结果。在B/S架构中,就是服务器给客户端浏览器反馈结果。
  • 响应对象∶就是在项目中用于发送响应的对象。
  • 实现接口:ServletResponse和HttpServletResponse【浏览器访问服务器后,服务器给客户端响应的数据会封装为ServletResponse对象,它有一个子类叫HttpServletResponse对象,用于封装按照Http协议封装的响应数据。】
2.响应状态码

在这里插入图片描述

3.字节/字符流响应数据

字节流响应数据【响应给浏览器】

@WebServlet("/ServletDemo1")
public class ServletDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置浏览器响应编码[html类型的文本,字符集为utf-8]resp.setContentType("text/html;charset=utf-8");//1.获取字节流输出对象ServletOutputStream os = resp.getOutputStream();//2.定义一个消息String str ="你好世界";//3.通过字节流对象输出os.write(str.getBytes("utf-8"));}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

字符流响应数据【响应给浏览器】

@WebServlet("/ServletDemo2")
public class ServletDemo2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置浏览器响应编码[html类型的文本,字符集为utf-8]resp.setContentType("text/html;charset=utf-8");//获取字符流输出对象resp.getWriter().write("<h3>这是一个响应信息</h3>");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

注:【字节流响应数据无法换行,原因:字节流读取1024个字节,直接读到结尾,然后在末尾写入,相当于换行符没起到最用,可以采用字符流展示标签数据】

4.响应图片[图片不需要设置编码]

点击超链接对应ServletDemo3处理

<a href="/Response/ServletDemo3">点我看图</a>
//响应图片[图片不需要设置编码]
@WebServlet("/ServletDemo3")
public class ServletDemo3 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.创建字节输入流对象,关联读取图片路径//首先获取到关联图片的项目路径[因为项目发布后路径会改变]String realPath = getServletContext().getRealPath("/img/nan.png");BufferedInputStream bis = new BufferedInputStream(new FileInputStream(realPath));//2.响应对象获取字节输出流对象,展示关联图片ServletOutputStream os = resp.getOutputStream();byte[] bytes = new byte[1024];int len = bis.read(bytes);while (len!=-1){os.write(bytes,0,len);len = bis.read(bytes);}bis.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
5.设置缓存时间
  • 缓存:对于不经常变化的数据,我们可以设置合理缓存时间,以避免浏览器频繁请求服务器。以此来提高效率
  • 方法:setDateHeader(String name,long time)
//设置缓存
@WebServlet("/ServletDemo4")
public class ServletDemo4 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置浏览器响应编码[html类型的文本,字符集为utf-8]resp.setContentType("text/html;charset=utf-8");String news = "这是一条很火爆的新闻";//设置缓存[1小时缓存时间]resp.setDateHeader("Expires", System.currentTimeMillis() + 1 * 60 * 60 * 1000);//写出数据resp.getWriter().write(news);System.out.println("只有第一次输出,再次访问不会访问服务器");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}打印结果://浏览器不刷新就会读取缓存
---------------------------------------------------------
只有第一次输出,再次访问不会访问服务器
6.设置定时刷新
//定时刷新
@WebServlet("/ServletDemo5")
public class ServletDemo5 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置浏览器响应编码[html类型的文本,字符集为utf-8]resp.setContentType("text/html;charset=utf-8");//写出显示数据resp.getWriter().write("您的用户名有误,3秒回自动跳转到登录页面");//定时刷新,跳回resp.setHeader("Refresh","3;url=/Response/html/index.html");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
7.重定向
//重定向a找b,b告诉a,c可以完成,a再找c   a找了2次
@WebServlet("/ServletDemo6")
public class ServletDemo6 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置浏览器响应编码[html类型的文本,字符集为utf-8]resp.setContentType("text/html;charset=utf-8");//方法1:设置重定向状态码/*resp.setStatus(302);resp.setHeader("location",req.getContextPath()+"/ServletDemo5");
*///方法2:resp.sendRedirect(req.getContextPath()+"/ServletDemo5");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
8.文件下载

点击超链接对应ServletDemo7处理

<a href="/Response/ServletDemo7">点我下载图片</a>
//文件下载
@WebServlet("/ServletDemo7")
public class ServletDemo7 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.创建字节输入流对象,关联读取的文件String realPath = getServletContext().getRealPath("/img/nan.png");BufferedInputStream bis = new BufferedInputStream(new FileInputStream(realPath));//2.设置响应头支持的类型/*Content-Type 消息头名称支持的类型application/octet-stream消息头参数应用的类型为字节流*/resp.setHeader("Content-Type","application/octet-stream");//3.设置响应头以下载方式打开附件/*Content-Disposition消息头名称 处理的形式attachment ;filename=hm.png消息头参数附件形式进行处理―指定下载文件的名称*/resp.setHeader("Content-Disposition","attachment;filename=nan.png");//4.获取字节输出流对象ServletOutputStream os = resp.getOutputStream();//5.循环读写byte[] bytes = new byte[1024];int len = bis.read(bytes);while (len!=-1){os.write(bytes,0,len);len = bis.read(bytes);}//6.释放资源bis.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

调用toString()方法的注意事项

【1】荔枝&#xff1a;Object转为 String&#xff1b; response.setContentType("text/html;charsetUTF-8"); PrintWriter out response.getWriter();request.setCharacterEncoding("UTF-8"); HttpSession session request.getSession(); //设置session超…

Java内存泄漏介绍

转载自 Java内存泄漏介绍内存管理是Java最重要的优势之一&#xff0c;你只需创建对象&#xff0c;Java垃圾收集器会自动负责分配和释放内存。但是&#xff0c;情况并不那么简单&#xff0c;因为在Java应用程序中经常发生内存泄漏。本章会说明什么是内存泄漏&#xff0c;为什么发…

Servlet请求和响应总结

1.解决乱码问题 通过Request的设置编码表方法和Respose设置浏览器展示编码表解决 //设置请求字符编码,防止乱码 req.setCharacterEncoding("utf-8"); //设置浏览器响应编码[html类型的文本,字符集为utf-8] resp.setContentType("text/html;charsetutf-8"…

java虚拟机采用UTF-16编码格式对字符进行编码

转自&#xff1a; https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/ 【UTF-16】 说到 UTF 必须要提到 Unicode&#xff08;Universal Code 统一码&#xff09;&#xff0c;ISO 试图想创建一个全新的超语言字典&#xff0c;世界上所有的语言都可以通过这本字典来…

服务高可用:幂等性设计

转载自 服务高可用&#xff1a;幂等性设计什么是幂等性&#xff1f; 一般在服务调用时&#xff0c;读服务如果调用失败了&#xff0c;会自动按配置次数转移到别的服务上去请求。而写服务就不能重复请求&#xff0c;如果因为超时或者网络故障等原因被调用服务并没有返回成功的响…

getParameterValues用法

<form name"checkform" method"post" action"getvalue.jsp"> 你希望学习哪些程式语言&#xff1a;<br> <input type"checkbox" name"langtype" value"JSP">JSP  <input type&q…

SQL分组取每组前一(或几)条记录(排名)

转自&#xff1a; https://www.cnblogs.com/netserver/p/4518995.html --按某一字段分组取最大(小)值所在行的数据 代码如下:/* 数据如下&#xff1a; name val memo a 2 a2(a的第二个值) a 1 a1--a的第一个值 a 3 a3:a的第三个值 b 1 b1--b的第一个值 b 3 b3:b的第三个…

会话技术Cookie

1.会话技术的概念 会话∶浏览器和服务器之间的多次请求和响应。为了实现一些功能&#xff0c;浏览器和服务器之间可能会产生多次的请求和响应&#xff0c;从浏览器访问服务器开始&#xff0c;到访问服务器结束(关闭浏览器、到了过期时间)。这期问产生的多次请求和响应加在一起…

终于搞懂了回车与换行的区别

转自&#xff1a; http://blog.csdn.net/fanwenbo/article/details/54848429 转载于&#xff1a;http://www.pythontab.com/html/2017/linuxkaiyuan_0115/1116.html 关于换行和回车其实平时我们不太在意&#xff0c;所以关于两者的区别也不太清楚&#xff0c;在平时开发时可能会…

分布式服务防雪崩熔断器,Hystrix理论+实战

转载自 分布式服务防雪崩熔断器&#xff0c;Hystrix理论实战Hystrix是什么&#xff1f; hystrix对应的中文名字是“豪猪”&#xff0c;豪猪周身长满了刺&#xff0c;能保护自己不受天敌的伤害&#xff0c;代表了一种防御机制&#xff0c;这与hystrix本身的功能不谋而合&#xf…

会话技术Session

1.Session的概念 Session是依赖于Cookie的&#xff0c;每次请求时&#xff0c;会将特殊标识带到服务器端&#xff0c;根据这个标识来找到对应的内存空间&#xff0c;从而实现数据共享!是Servlet规范中四大域对象之一的会话域对象。作用:是Servlet规范中四大域对象之一的会话域…

完整的支付系统整体架构

转载自 【干货】完整的支付系统整体架构&#xff01; 从产品分类、模块功能和业务流程&#xff0c;了解支付产品服务的设计。 支付产品模块是按照支付场景来为业务方提供支付服务。这个模块一般位于支付网关之后&#xff0c;支付渠道之前。 它根据支付能力将不同的支付渠道封装…

Scripting elements ( lt;%!, lt;jsp:declaration, lt;%=, lt;jsp:expression, 错误的解决方法

<% page contentType"text/html;charsetUTF-8" %> <%session.setAttribute("pageContext", "it315"); %> 输出表达式\\${pageContext}的值&#xff1a;<br/> ${pageContext} 【web.xml】错误地在 web.xml中禁用了 jsp脚本元素…

JSP页面

1.jsp概述 JSP&#xff08;全称Java Server Pages&#xff09;&#xff0c;是一种动态网页开发技术。它既可以使用HTML标签来写页面&#xff0c;也可以写Java代码。其本质就是一个Servlet 2.jsp页面的访问过程 当客户端发送请求访问服务端的index.jsp页面服务器内部会把.jsp…

html模板(base标签,meta标签,禁用浏览器缓存)+JSP自定义标签荔枝

【1】html模板 <html> <head><!-- base标签表示uri相对路径的基准路径 --><base href"http://localhost:8080/asite6/chapter6/ex6_11/visitor.html"/><title>html template</title><!-- meta 模拟响应消息头&#xff1a;Co…

5分钟带你理解一致性Hash算法

转载自 5分钟带你理解一致性Hash算法一致性Hash算法背景一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的&#xff0c;设计目标是为了解决因特网中的热点(Hot spot)问题&#xff0c;初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来…

thinking-in-java(10)内部类

【0】开场白1&#xff09;内部类&#xff1a;将一个类的定义放在另一个类的定义内部&#xff0c;这个类就是内部类&#xff1b;2&#xff09;内部类优点&#xff1a;匿名内部类的一个优点就是可以将解决问题的代码隔离&#xff0c;聚拢在一点&#xff1b;【10.1】创建内部类【荔…

金融系统中正确的金额计算及存储方式

转载自 金融系统中正确的金额计算及存储方式经典的精度丢失问题 Java中的类型float、double用来做计算会有精度丢失问题&#xff0c;下面来看下面的示例。 public static void main(String[] args) {test1();test2(); }private static void test1() {double totalAmount 0.09;…

JSTL标签库

1.JSTL介绍 JSTL(Java Server Pages Standarded Tag Library) : JSP标准标签库。主要提供给开发人员一个标准通用的标签库。 开发人员可以利用这些标签取代JSP页面上的Java 代码&#xff0c;从而提高程- 序的可读性&#xff0c;降低程序的维护难度 组成部分如下&#xff1a; …

缓存雪崩,缓存穿透,缓存预热,缓存热备都是什么鬼?

转载自 缓存雪崩&#xff0c;缓存穿透&#xff0c;缓存预热&#xff0c;缓存热备都是什么鬼&#xff1f;缓存雪崩&#xff0c;缓存穿透&#xff0c;缓存预热&#xff0c;缓存热备是在做缓存设计或者缓存应用时经常遇到的概念&#xff0c;也是缓存应用过程中必须熟知及知道 的东…