Web核心之Response对象
http协议的响应部分
格式:
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 101
Date: Wed, 06 Jun 2018 07:08:42 GMT
<html>
<head>
<title>$Title$</title>
</head>
<body>
hello , response
</body>
</html>
响应行:HTTP/1.1 200 OK
状态码:
200 响应成功
302 重定向
访问A,A对客户端说,这是C的路径,你去找C。客户端就改为C的路径去访问C。
304 访问缓存
没有更改,使用本地缓存
403 访问权限不足
404 访问资源不存在
请求路径没有对应的资源
405 请求方式不支持
请求方式没有对应的doXxx方法
500 服务器内部错误
自己的代码写错了。
响应头:格式:键值对
Content-Type: text/html;charset=UTF-8
Content-Length: 101
Date: Wed, 06 Jun 2018 07:08:42 GMT
常见的响应头:
Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
Content-disposition:服务器告诉客户端以什么格式打开响应体数据
值:
in-line:默认值,在当前页面内打开
attachment;filename=xxx:以附件形式打开响应体。文件下载
响应体:响应的数据
<html>
<head>
<title>$Title$</title>
</head>
<body>
hello , response
</body>
</html>
Response
格式:
设置响应行
状态码
setStatus() 302 重定向设置
设置响应头
key是固定的,我们设置指定key对应的value
setHeader()设置
addHeader()添加
设置响应体
通过response的输出流,从服务器往浏览器输出数据。
getWriter()
getOutputStream()
重定向(页面跳转的一种方式)
api:response.sendRedirect("路径")
和转发的区别
重定向的特点:redirect
地址栏发生变化
重定向可以访问其他站点(服务器)的资源
重定向是两次请求。不能使用request对象来共享数据
转发的特点:forward
转发地址栏路径不变
转发只能访问当前服务器下的资源
转发是一次请求,可以使用request对象来共享数据
如果在页面跳转时,需要携带目标页面才会使用到的数据, 也就是说需要用request携带数据,此时使用转发。其余的情况都使用重定向。
web中路径的写法
相对路径:不以/开头,以.开头路径
相对路径比较的是两个资源的url的相对位置关系。先把两个资源独立的在浏览器中访问的url写出来,再比较相对关系。
当前目录: ./ 可以省略不写
上一级目录: ../
注意:如果项目中会使用转发进行页面跳转,不推荐使用相对路径。因为会有路径错乱的隐患。
绝对路径:以 / 开头
客户端路径
如果路径给客户端使用,该路径为客户端路径,则需要指定虚拟目录
服务器端路径
如果路径给服务器端使用,该路径为服务器端路径,则不需要指定虚拟目录,虚拟目录可以使用request.getContextPath()动态获取。
response字符流输出的乱码问题:
哪里有乱码?
为什么会有乱码?
字符输出流不是我们自己创造的,而是tomcat给我们留的,它默认是ISO-8859-1编码,浏览器那边默认是我们操作系统的GBK编码,就乱了。
何如解决乱码?
我们要在获取流对象之前去设置它的默认编码,设置为utf-8,然后告诉浏览器。
简单形式解决所有问题:api:response.setContentType("text/html;charset=utf-8")
ServletContext:
ServletContext是单例的,它代表整个Web工程,可以和程序的容器(服务器)去通信
获取ServletContext对象
概念:
Context的含义是上下文,Servlet运行必须依托于ServletContext。
在一个web项目中,有且只有一个ServletContext对象。
获取MIME类型:
MIME类型是在互联网通信过程中定义的一种文件数据类型标准
格式:大类型/小类型,如:text/html
在HTTP响应头Content-Type里设置MIME类型,告诉浏览器文件格式以做相应解析,因此要给客户端发送数据则需要获取相应的MIME类型
获取方法:getMimeType(文件名)返回String类型的MIME类型(如:text/html)
根据文件的扩展名,到tomcat的web.xml中查找与之对应的mime类型
域对象(ServletContext一般会称为Application域)
作用范围:整个web项目,范围太大不好用,一般不用。
创建:服务器启动时创建,所以用ServletContext来感知服务器的启动
销毁:服务器关闭时销毁,所以用ServletContext来感知服务器的关闭
获取服务器中文件的路径
web路径--->磁盘路径
/img/1.jpg ---> C:/XXX/img/1.jpg
api:String getRealPath()根据指定的web路径,获取该资源对应的磁盘绝对路径。
在src下的项目我们可以用classloader获取。
InputStream getResourceAsStream()根据指定的web路径,获取该资源对应字节输入流
参数:服务器端的绝对路径
文件下载
三要素:
两个头一个流:
Content-Type:指定文件的MIME类型
Content-Disposition:指定文件以下载的方式打开。attachment;filename=文件名
获取服务器端文件的输入流,对接到response的输出流
中文文件名乱码(原则上我们不适用中文文件名)
原因:在http协议中,头和行的位置并不允许出现中文。所以content-disposition中的filename不能指定为中文。
解决方案:
把中文转换为浏览器可以识别的非中文字符的表示形式。
Firefox浏览器使用Base64的方式进行编码。
其他浏览器使用Url编码
例子:
文件位置:
html页面:
servlet:
启动:
点击download田所浩二结果:
Web核心之Response对象的更多相关文章
- Web核心之Request对象
HTTP协议中Request请求部分格式 //请求行(这种是POST类型的请求) POST /HttpServleLogin.html HTTP/1.1 //请求头(User-Agent里有Firef ...
- JAVA-JSP内置对象之response对象实现页面自动跳转
相关资料:<21天学通Java Web开发> response对象 实现页面自动跳转1.可以通过response对象的addHeader()方法添加一个标题为Refresh的标头,并指定页 ...
- JAVA-JSP内置对象之response对象实现页面自动刷新
相关资料:<21天学通Java Web开发> response对象 实现页面自动刷新1.可以通过response对象的addIntHeader()方法添加一个标题为Refrsh的标头,并指 ...
- JAVA-JSP内置对象之response对象实现页面跳转
相关资料:<21天学通Java Web开发> response对象 实现页面跳转1.可以通过response对象的sendRedirect()方法设置页面重定向,从而实现页面跳转.2.这种 ...
- JAVA-JSP内置对象之response对象
相关资料:<21天学通Java Web开发> response对象1.response对象用来给客户端传送输出信息. 方法 ...
- java web(三):ServletContext、session、ServletConfig、request、response对象
上一篇讲了Servlet: 1)什么是Servlet[servlet本身就是一种Java类,这种Java类提供了web形式的方法,只要实现了servlet接口的类,都是一种servlet资源.] 2) ...
- request 对象和 response 对象
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象 HttpServletResponse HttpServletR ...
- request对象和response对象
Request 和 Response 对象起到了服务器与客户机之间的信息传递作用.Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏 ...
- 重温Servlet学习笔记--response对象
在用户浏览网页时,服务器对于客户端浏览器做出的响应被封装成一个HttpServletResponse对象,要对浏览器操作只需要操作这个response对象即可.response的功能分类及介绍: 响应 ...
随机推荐
- 问题记录-java图片验证码显示乱码
部署机器 操作系统:centos 7 java版本: java version "1.7.0_80" 问题症状 将一个java web的程序部署到了两台配置相同的服务器上之后(服务 ...
- 配置自己的CocoaPods库
序 默认安装的cocoapods确实很好用,可是毕竟自己会写一些库和修改一些第三方库来用.所幸cocoapods确实是一个神器.他可以定义自己的库来用. 如何安装Cocoapods,请参考这篇 从头来 ...
- 2018 CCPC 吉林站 H Lovers || HDU 6562 (线段树哦)
http://acm.hdu.edu.cn/showproblem.php?pid=6562 题意: q次操作 1.将第l~r个数的左边和和右边都加上一个数d, 使得这个数变成 dsiddsid的形式 ...
- Windowed functions can only appear in the SELECT or ORDER BY clauses
尝试做分页处理 select row_number over (orderby id asc) as rownum,* from table where rownum>=(@page*@page ...
- HDU6668 Polynomial(模拟)
HDU6668 Polynomial 顺序遍历找出最高次幂项的系数 分三种情况 \(1/0\).\(0/1\).\(f(x)/g(x)\) . 复杂度为 \(O(n)\) . #include< ...
- linux中awk 详解
一.awk简介 awk是一个非常好用的数据处理工具,相对于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个[字段]处理,因此,awk相当适合处理小型的数据数据处理.awk是一种报表生 ...
- nginx用途
Nginx常用来做静态内容服务器和代理服务器,用来放置静态资源或者转发请求给后面的应用服务. 1. Nginx作为静态服务器使用 作为一个Web服务器,其最主要的任务是作为静态服务器使用. 你需要将 ...
- CDN:BootCDN 项目列表-摘录-20180405
ylbtech-CDN:BootCDN 项目列表-20180405 1.返回顶部 1. 2. 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 1. http://www.boo ...
- python pip报错pip._ vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
AttributeError: module 'pip' has no attribute 'main报错 找到安装目录下 helpers/packaging_tool.py文件,找到如下代码: de ...
- 微信小程序开发项目过程中的一个要注意事项
在微信小程序开发过程中,有时候会用到常用的一些特殊字符如:‘<’.‘>’.‘&’.‘空格’等,微信小程序同样支持对转义字符的处理, decode属性默认为false,不会解析我们的 ...