response对象以及cookie
一、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相关推荐
- jsp response对象
所属接口:javax.servlet.http.HttpServletResponse,其父接口是ServletResponse,而且ServletResponse也现在只有唯一一个HttpServl ...
- ASP.NET之Request和Response对象
经过了牛腩新闻公布系统和html的学习对B/S开发的流程有了些理解.前面尽管用到了非常多知识.但对制作网页仅仅能说知其然.当学到asp.net视频中的解说才干够说開始知其所以然了. 今天来说说clie ...
- Asp:Response对象
Response对象的属性及方法在ASP中极其常用.下面几节将针对Response对象的常用属性.方法及集合进行详细讲解,对于不常用的也给出了说明. 一.Response对象的常用属性 1. Buf ...
- Net中的Request和Response对象的理解
Request 和 Response 对象起到了服务器与客户机之间的信息传递作用.Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏 ...
- request对象与response对象
一.request对象 1.通过request对象可以获得客户端输入的信息.request对象包含了从客户端传来的请求信息. 请求的参数是一个请求的组成部分,它们被作为字符串从客户端传送到JSP/Se ...
- flask response对象
方法或属性 描述 headers 类似于字典,用来存放headers status A string with a response status. status_code The response ...
- Javaweb-Servlet总结(概述、接口使用、配置、获取请求方式、路径操作、Request对象、Response对象)
文章目录 Servlet概述 Servlet核心接口和类 三种自定义Servlet接口的方法 1.实现Servlet接口 2.继承GenericServlet抽象类 3.继承HttpServlet抽象 ...
- 【转载】Response对象的作用以及常用方法属性
Response对象是Asp.Net应用程序中非常重要的一个内置对象,其作用为负责将服务器执行好的信息输出给客户端,即作用主要为响应客户端请求并将服务器的响应返回给用户,在页面的临时跳转中,也可使用R ...
- Node之HTTP模块(request对象解析、response对象解析、图片上传)
文章目录 一.什么是Web服务器? 1.1 web服务器初体验 1.2 另外一种创建方式 1.3 listen方法的参数详解 二.request对象解析 2.1 基本使用 2.2 进阶使用 2.3 m ...
最新文章
- LINUX 触摸屏驱动
- java用途与python_python与java用途区别有哪些
- 华为p4用鸿蒙系统吗_华为p40pro是鸿蒙系统吗
- #pragma once 和 #ifndef ... #define ... #endif 的区别
- python 列表 extend append_Python中list操作之append、extend
- sap abap开发从入门到精通_SAP开发-ABAP数据字典(搜索帮助增强)
- 经典算法书籍推荐(亲测有效)
- Matlab 中类的定义
- java406错误_Java项目部署遇到406错误
- 2018年春季学期《软件工程》班级讨论群中开放性问题群聊记录
- C++汉字转拼音( 转)
- Verilog语言、语法
- vue组件可视化_Vue HTML5音频可视化组件
- 梅西:世界杯是我最重要的奖杯;很高兴斯卡洛尼能够续约
- Unity DOTS简明教程
- 企业即时通讯软件的五大作用
- 和平精英分享码服务器未响应,《和平精英》ss11最稳灵敏度分享码大全
- 超市零售数据分析-大数据项目
- 关于个人编写企业资源管理软件的思路
- vs 番茄助手设置 document method 快捷方法注释
热门文章
- C++ ostream的学习
- Linux下闹钟函数alarm的常见用法
- elasticsearch系列一:elasticsearch(ES简介、安装amp;配置、集成Ikanalyzer)
- 深度学习与图像处理之:人像背景虚化
- python应用题应用背景及实际意义_全国计算机等级考试二级Python语言程序设计模拟试卷B卷综合应用题-Go语言中文社区...
- mybase 用户教程
- 支付退款 报错:ACQ.INVALID_PARAMETER
- 微信卖保险,仅1%用户能看到
- oracle存储过程rowcount用法,oracle中的sql%rowcount,sql%found、sql%notfound、sql%rowcount和sql%isopen...
- 01TomcatHttp协议-授课