黑马程序员技术交流社区
标题:
【石家庄校区】request&response
[打印本页]
作者:
巴拉巴拉x
时间:
2018-5-21 10:30
标题:
【石家庄校区】request&response
本帖最后由 巴拉巴拉x 于 2018-5-21 10:32 编辑
request&response
读取WEB工程下的文件
传统方式读取文件,写的路径是相对路径,相对的是JVM的路径
JVM在运行环境的文件里面,在java项目中jre和src在同一级目录下
传统方式已经不能读取web工程下的文件:路径不明确
eclipce有一个工作空间,服务器也有它自己的工作空间.
使用ServletContext对象来读取文件
ServletContext是服务器创建的对象.他的作用范围是服务器的那个项目工作空间.
InputStream getResourceAsStream(String path);
String getRealPath(String path):
ServletContext的总结
读取全局化(初始化)参数:
在web.xml中配置的参数,标签就是<Context-param ><param-name > 值 </param-name ></Context-param >.
获取文件的mime类型:
String getMimeType(String file);用ServletContext对象来调用.返回值是一个字符串,
作为域对象存取数据
范围:整个web项目,而且是全局对象
创建:服务器启动的时候,服务器为每个web项目创建一个单独的ServletContext对象
销毁:服务器关闭,或者移除web项目的时候销毁
读取web工程下的文件
使用类加载器来读取文件
类的加载器是用来加载class文件,将class文件加载到内存
类名.class.getClassLoader().getResourceAsStream(fiel name);
如果有Servlet环境,就用ServletContext对象来读取文件,如果没有Servlet环境就用类加载器来读取文件.
request&response
文件下载
response
概述:代表响应的对象,从服务器向浏览器输出内容
常用API
HttpServletResponse类
响应行
setStatus(int sc):设置状态码
响应头
addDateHeader
addHeader
addIntHeader
setDateHeader
setHeader
setIntHeader
响应体:
方法在ServletRespose类中
getOutputStream
getWriter
文件下载方式
超链接的方式:前提-->文件类型是浏览器不支持的类型
手动编写代码的方式完成文件的下载
设置响应头里面的两个属性和一个流
Content-Type :文件的MIME类型
Content-Disposition :以文件下载的形式打开文件
InputStream :文件的输入流
文件下载的核心思想
IO 流的读/写
中文文件下载
iso-8859-1:缓存区默认编码标准
IE浏览器采用的编码方式是URL
URLEncoder.encode(filename, "UTF-8");
火狐浏览器采用的编码方式是base64
response 输出响应内容的方法
向页面响应的方法
字节流
response.getOutputStream().write("内容".getBytes())-->不是中文
response.getOutputStream().write("内容".getBytes(字符集编码));这个编码在设置之前先设置浏览器打开时采用的编码方式,这两种方式要一样.如果本来就一样就不会乱码,如果不一样就会乱码.
步骤
设置浏览器打开的编码
设置中文字节去除时候的编码
字符流
response.getWriter()-->不是中文
一定会乱码,response使用的字符流有缓冲区的.这个缓冲区的默认的编码是ISO-8859-1,这个编码方式不支持中文.
解决方式
设置response的字符流的缓冲区的编码
设置浏览器默认打开时使用的编码.
response.sendRedirect("路径"):重定向简写.
步骤
设置浏览器打开的时候的编码
response.setHeader("Context")
设置response的缓冲区的编码
response.setCharacterEncoding(编码方式)
request
概述
代表用户的请求,把从客户端发送来的请求行,请求头,请求体封装成一个ServletRequest对象,即是request.
Request的API
功能
获得客户机的相关信息
获得请求方式
getMethod()
获得客户端的IP
getRemoteAddr()
获得请求的路径
getRequestURL()
getRequestURI()
获得工程名
getContextPath()
获得从页面提交的参数
getParameter(String name)
getParameterValues(String name)
getParameterMap();
作为域对象存取数据
setAttribute()
getAttribute()
removeAttribute()
request作为域对象
存取数据
setAttribute(String name, String value)
getAttribute(String name)
removeAttribute(String name)
作用范围
就是一次请求的范围
创建和销毁
创建:
销毁
重定向和转发的区别(redirect和forward的区别)
重定向
sendRedirect(路径)
两次请求,两次响应
地址栏会发生变化
路径要包含工程名
可以跳转到任意网站
转发
getRequestDispatcher(路径)
一次请求,一次响应
地址栏不会发生变化
路径不用写工程名
只能在服务器内部的同一工程进行转发
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2