本帖最后由 巴拉巴拉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类
- 响应行
- 响应头
- addDateHeader
- addHeader
- addIntHeader
- setDateHeader
- setHeader
- setIntHeader
- 响应体:
- 方法在ServletRespose类中
- getOutputStream
- getWriter
- 文件下载方式
- 超链接的方式:前提-->文件类型是浏览器不支持的类型
- 手动编写代码的方式完成文件的下载
- 设置响应头里面的两个属性和一个流
- Content-Type :文件的MIME类型
- Content-Disposition :以文件下载的形式打开文件
- InputStream :文件的输入流
- 文件下载的核心思想
中文文件下载
- 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
- 功能
- 获得客户机的相关信息
- 获得请求方式
- 获得客户端的IP
- 获得请求的路径
- getRequestURL()
- getRequestURI()
- 获得工程名
- 获得从页面提交的参数
- 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(路径)
- 一次请求,一次响应
- 地址栏不会发生变化
- 路径不用写工程名
- 只能在服务器内部的同一工程进行转发
|
|