一、HttpServletResponse对象

当服务器收到请求的时候,会对每一次请求都创建两个对象
一个对象是request对象,代表请求
另一个对象是response对象,代表响应
获取客户端的数据时通过request对象
而向客户端输出数据就是通过response对象

1.1 常用方法

方法 描述
addHeader(String name, String value) 添加指定的键值到响应头信息中
containsHeader(String name) 判断响应的头部是否被设置
encodeURL(String url) 编码指定的URL
sendError(int sc) 使用指定状态码发送一个错误到客户端
setHeader(String name, String value) 设置指定响应头的值
setStatus(int sc) 给当前响应设置状态
setContentType(String ContentType) 设置响应的MIME类型
getWriter() 获取输出字符流
getOutputStream() 获取输出的字节流
在响应中有一个常用的头信息就是刷新指令,可以完成定时刷新的功能
response.setHeader("refresh","2");   //每2秒刷新一次页面
除了可以定时刷新意外,还可以设置定时跳转功能
response.setHeader("refresh","3;URL=check.html");   //3秒后跳转至check.html
但是这种跳转不是万能的,有时候根本就无法进行跳转操作
返回后刷新不会跳转
定时跳转的头信息还可以在html代码中进行设置
<metahttp-equiv="refresh"content="3;http://www.baidu.com"/>

1.2 数据相应

接收到客户端的请求以后,可以直接通过HttpServletResponse对象进行响应
响应时需要获取输出流,获取输出流的方式有两种
一种是getWriter()获取字符流 该种方式只能响应回字符
还有一种是getOutputStream()获取字节流 可以响应所有类型的数据
PrintWriterout=resp.getWriter();
out.write("<h1>HelloWorld</h1>");
ServletOutputStreamout=resp.getOutputStream();
out.write("<h1>HelloWorld</h1>").getBytes());

1.3 乱码解决

响应中可能会出现乱码的问题
乱码的产生是因为客户端和服务端两者的字符编码不一致导致的
getWriter()方式响应时出现乱码的解决方法:
resp.setCharacterEncoding("UTF-8");
resp.setHeader("content-type","text/html;charset=UTF-8");
PrintWriterout=resp.getWriter();
out.write("<h1>Hello</h1>");
getOutputStream()方式响应时出现乱码的解决方法:
resp.setHeader("content-type","text/html;charset=UTF-8");
ServletOutputStreamout=resp.getOutputStream();
out.write("<h1>Hello</</h1>".getBytes("UTF-8"));
通用方式:
resp.setContentType("text/html;charset=utf-8");需要解决乱码问题,需要两端的字符编码都支持中文
且两端的字符编码一致

1.4 响应图片

public class ImageServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 指定响应类型response.setContentType("text/html;charset=utf-8");// 获取用户请求图片名称参数String imageName = request.getParameter("imageName");// 判断参数if(imageName == null || "".equals(imageName)){response.getWriter().write("请告诉我你要看啥图片");return;}// 获取图片路径String realPath = request.getServletContext().getRealPath("/WEB-INF/image/");System.out.println(realPath);System.out.println(realPath + imageName);// 得到图片 File file = new File(realPath + imageName);// 判断是否存在并且是否是文件if(file != null && file.isFile()){// 判断用户访问的图片类型   timg.jpgString imageType = imageName.split("\\.")[1];if("jpg".equals(imageType) || "jpeg".equals(imageType)){response.setContentType("image/jpeg;charset=utf-8");}else if("png".equals(imageType)){response.setContentType("image/png;charset=utf-8");}else if("gif".equals(imageType)){response.setContentType("image/gif;charset=utf-8");}// 是文件// 获取输入流FileInputStream in = new FileInputStream(file);// 获取字节输出流ServletOutputStream out = response.getOutputStream();// 响应图片// 创建字节数组byte[] car = new byte[1024];int len = 0;while((len = in.read(car)) != -1){out.write(car, 0, len);}// 关闭资源in.close();out.close();}else{// 不是文件或者不存在response.getWriter().write("请输入正确的图片名称");return;}}
}

1.5 重定向跳转

重定向属于客户端行为
客户端第一次给服务器发送请求时,服务器响应客户端location头信息
头信息中包含了重定向的地址
客户端根据地址发起第二次请求
之后再做出响应
第一次响应码为302,且包含了重定向的location头信息
并且地址栏最后的地址和第一次是不同的
请求转发(req.getRequestDispatcher().forward()) 重定向(resp.sendRedirect())
一次请求,数据在request域中共享 两次请求,request域中数据不共享
服务器端行为 客户端行为
地址栏不发生变化 地址栏发生变化
绝对地址定位到站点后 绝对地址可写到http://

1.6 请求时路径问题

在请求时需要给出正确路径
路径分为相对路径和绝对路径
相对路径是相对该资源的路径
绝对路径是完整的路径,在web中绝对路径又有两种
一种是http://开头的,可以跨域
另一种是当前IP开头的不能跨域
相对路径:请求转发到同包下另一个Servlet就是url-pattern中的名称同级目录下直接写出目标的完整名称例如 index.html或者是同级文件夹下的目标例如 html/index.html请求转发:request.getRequestDispatcher("s02").forward(request, response);request.getRequestDispatcher("index.html").forward(request, response);request.getRequestDispatcher("html/index.html").forward(request, response);请求重定向:response.sendRedirect("s02");response.sendRedirect("index.html");response.sendRedirect("a/index.html");相对路径的请求转发可能会失效,因为请求转发的地址栏不会发生改变
绝对路径:格式:以 http:// 开头,或者以 / 开头浏览器中:“/”代表的是 http://主机|IP:端口服务器中:“/”代表的是 http://主机|IP:端口/站点名请求转发:request.getRequestDispatcher("/index.html").forward(request, response);请求重定向:response.sendRedirect("/path/index.html");

1.7 在浏览器打印九九乘法表

public class work extends HttpServlet {private static final long serialVersionUID = 1L;protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.getRequestDispatcher("/index.html").forward(request, response);}
}
  <servlet><description></description><display-name>work</display-name><servlet-name>work</servlet-name><servlet-class>com.mage.servlet.work</servlet-class></servlet><servlet-mapping><servlet-name>work</servlet-name><url-pattern>/work</url-pattern></servlet-mapping>
<body><script type="text/javascript">var sum = 0;document.write("<table class='table' border='1'>" );for(var i = 1;i<=9;i++){document.write("<tr>");for(var j = 1;j<=i;j++){document.write("<td>");document.write(j+"*"+i+"="+(j*i));document.write("</td>");}document.write("</tr>");}document.write("</table>");</script>
</body>

二、Cookie

Cookie是浏览器提供的一种技术
通过服务器的程序能将一些数据保存在客户端
或者在客户端进行处理的数据,放在本地的计算机上
无论何时用户链接到服务器,Web站点都可以访问Cookie信息不需要通过网络传输
因而提高网页处理的效率,并且能够减少服务器的负载
但是由于Cookie是服务器端保存在客户端的信息,所以其安全性也是很差的
例如常见的记住密码则可以通过Cookie来实现。
Cookie的格式为键值对,用"="连接,多个键值对中间用;隔开

2.1 Cookie的创建

通过newCookie(“key”,”value”);来创建一个Cookie对象
要想将Cookie随响应发送到客户端,需要先添加到response对象中
response.addCookie(cookie);此时该cookie对象则随着响应发送至了客户端
在浏览器上可以看见。
//创建Cookie对象
Cookiecookie=newCookie("user","zhangsan");
//响应给客户端
resp.addCookie(cookie);
响应给客户端之后就可以在浏览器上打开F12查看

2.2 Cookie的获取

用getCookies来获取Cookie,返回值是一个由cookie组成的数组
如果需要获取对应的Cookie值就需要遍历获取
通过getName()来获取Cookie的名称
getValue()来获取Cookie的值
//获取客户端的Cookie数组
Cookie[]cookies=req.getCookies();
//判断是否为空
if(cookies!=null&&cookies.length>0){//遍历for(Cookiecookie:cookies){//键名称Stringname=cookie.getName();//值Stringvalue=cookie.getValue();System.out.println("键:"+name+",值:"+value);}
}

2.3 Cookie到期时间的设置

Cookie默认是浏览器关闭的时候失效
当然我们可以手动设定Cookie的有效时间
通过setMaxAge(int expiry)来设定Cookie的最大有效时间
以秒为单位
如果为大于0的整数就表示有效期为对应的秒数
把相应的Cookie存储到了电脑上
关闭浏览器甚至重启电脑也不会消失
甚至关闭电脑也会继续存在
只有到了有效时间才会失效
如果为小于0就表示不存储该Cookie,关闭浏览器即失效
如果为0就表示删除该Cookie

response对象以及cookie相关推荐

  1. jsp response对象

    所属接口:javax.servlet.http.HttpServletResponse,其父接口是ServletResponse,而且ServletResponse也现在只有唯一一个HttpServl ...

  2. ASP.NET之Request和Response对象

    经过了牛腩新闻公布系统和html的学习对B/S开发的流程有了些理解.前面尽管用到了非常多知识.但对制作网页仅仅能说知其然.当学到asp.net视频中的解说才干够说開始知其所以然了. 今天来说说clie ...

  3. Asp:Response对象

    Response对象的属性及方法在ASP中极其常用.下面几节将针对Response对象的常用属性.方法及集合进行详细讲解,对于不常用的也给出了说明. 一.Response对象的常用属性 1.  Buf ...

  4. Net中的Request和Response对象的理解

    Request 和 Response 对象起到了服务器与客户机之间的信息传递作用.Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏 ...

  5. request对象与response对象

    一.request对象 1.通过request对象可以获得客户端输入的信息.request对象包含了从客户端传来的请求信息. 请求的参数是一个请求的组成部分,它们被作为字符串从客户端传送到JSP/Se ...

  6. flask response对象

    方法或属性 描述 headers 类似于字典,用来存放headers status A string with a response status. status_code The response ...

  7. Javaweb-Servlet总结(概述、接口使用、配置、获取请求方式、路径操作、Request对象、Response对象)

    文章目录 Servlet概述 Servlet核心接口和类 三种自定义Servlet接口的方法 1.实现Servlet接口 2.继承GenericServlet抽象类 3.继承HttpServlet抽象 ...

  8. 【转载】Response对象的作用以及常用方法属性

    Response对象是Asp.Net应用程序中非常重要的一个内置对象,其作用为负责将服务器执行好的信息输出给客户端,即作用主要为响应客户端请求并将服务器的响应返回给用户,在页面的临时跳转中,也可使用R ...

  9. Node之HTTP模块(request对象解析、response对象解析、图片上传)

    文章目录 一.什么是Web服务器? 1.1 web服务器初体验 1.2 另外一种创建方式 1.3 listen方法的参数详解 二.request对象解析 2.1 基本使用 2.2 进阶使用 2.3 m ...

最新文章

  1. LINUX 触摸屏驱动
  2. java用途与python_python与java用途区别有哪些
  3. 华为p4用鸿蒙系统吗_华为p40pro是鸿蒙系统吗
  4. #pragma once 和 #ifndef ... #define ... #endif 的区别
  5. python 列表 extend append_Python中list操作之append、extend
  6. sap abap开发从入门到精通_SAP开发-ABAP数据字典(搜索帮助增强)
  7. 经典算法书籍推荐(亲测有效)
  8. Matlab 中类的定义
  9. java406错误_Java项目部署遇到406错误
  10. 2018年春季学期《软件工程》班级讨论群中开放性问题群聊记录
  11. C++汉字转拼音( 转)
  12. Verilog语言、语法
  13. vue组件可视化_Vue HTML5音频可视化组件
  14. 梅西:世界杯是我最重要的奖杯;很高兴斯卡洛尼能够续约
  15. Unity DOTS简明教程
  16. 企业即时通讯软件的五大作用
  17. 和平精英分享码服务器未响应,《和平精英》ss11最稳灵敏度分享码大全
  18. 超市零售数据分析-大数据项目
  19. 关于个人编写企业资源管理软件的思路
  20. vs 番茄助手设置 document method 快捷方法注释

热门文章

  1. C++ ostream的学习
  2. Linux下闹钟函数alarm的常见用法
  3. elasticsearch系列一:elasticsearch(ES简介、安装amp;配置、集成Ikanalyzer)
  4. 深度学习与图像处理之:人像背景虚化
  5. python应用题应用背景及实际意义_全国计算机等级考试二级Python语言程序设计模拟试卷B卷综合应用题-Go语言中文社区...
  6. mybase 用户教程
  7. 支付退款 报错:ACQ.INVALID_PARAMETER
  8. 微信卖保险,仅1%用户能看到
  9. oracle存储过程rowcount用法,oracle中的sql%rowcount,sql%found、sql%notfound、sql%rowcount和sql%isopen...
  10. 01TomcatHttp协议-授课