本帖最后由 小石姐姐 于 2017-12-20 11:21 编辑
Response&Request
1、Response
1.1、Response的概述
Response:代表响应的对象,从服务器向浏览器输出内容。
1.2、Response常用的API
1.2.1、响应行:
设置状态码.
1.2.2、响应头:
针对一个key对应多个value的头信息.
针对一个key对应一个value的头信息.
1.2.3、响应体:
1.3、文件下载的方式
1.3.1、超链接下载
直接将文件的路径写到超链接的href中(前提:文件类型,浏览器不支持)
1.3.2、手动编写代码的方式完成文件的下载
设置两个头和一个流:
Content-Type :文件的MIME的类型
Content-Disposition :以下载的形式打开文件
InputStream :文件的输入流
1.3.3、中文文件的下载
IE浏览器下载中文文件的时候采用的URL的编码.
filename = URLEncoder.encode(filename,"UTF-8");
Firefox浏览器下载中文文件的时候采用的是Base64的编码.
(格式代码,会用即可)
public static String base64EncodeFileName(String fileName) {
BASE64Encoder base64Encoder = new BASE64Encoder();
try {
return "=?UTF-8?B?"
+ new String(base64Encoder.encode(fileName
.getBytes("UTF-8"))) + "?=";
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
1.4、Response输出响应内容的方法
response.getOutputStream
response.getWriter()
重定向:response.sendRedirect(“路径”);
两种方法是互斥的
做出相应的时候只能使用其中一种流响应
解决中文乱码的处理
字节流:
设置浏览器默认打开的编码
resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
设置中文字节取出的时候编码
“中文”.getBytes("UTF-8");
字符流:
* 设置浏览器打开的时候的编码
* resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
* 设置response的缓冲区的编码
* response.setCharacterEncoding(“UTF-8”);
***** 简化的写法:response.setContentType(“text/html;charset=UTF-8”);
2、Request
2.1、Request的概述
Request代表用户的请求。
2.2、Request的常用API
2.2.1、获得请求的方式
2.2.2、获得请求的路径
2.2.3、获得客户机的相关信息
获得客户机Ip地址
2.2.4、获得工程名
2.2.5、获得从页面中提交的参数
2.2.6、作为域对象存取数据
2.3、处理Request接收参数的中文乱码的问题:
现在无论是GET还是POST提交中文的时候,都会出现乱码的问题
解决方案:
2.3.1、Post解决方法:
POST的参数在请求体中,直接到达后台的Servlet.数据封装到Servlet中的request中.request也有一个缓冲区.request的缓冲区也是ISO-8859-1编码.
设置Request的缓冲区的编码:
request.setCharacterEncoding(“UTF-8”); --- 一定要在接收参数之前设置编码就OK.
2.3.2、GET的解决方案
a、修改tomcat的字符集的编码(不推荐)
b、使用URLEncoder和URLDecoder进行编码和解码的操作
c、使用String的构造方法:
new String(request.getParameter().getBytes("ISO-8859-1"),"UTF-8");
2.4、Request作为域对象存储数据:
使用Request对象存储数据:
setAttribute(String name, String value);
Object getAttribute(String name);
request的作用范围:
作用范围就是一次请求的范围(转发可以,重定向不可以)
创建和销毁:
创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象.
销毁:当服务器对这次请求作出了响应之后.
3、重定向和转发的区别(redirect和forward的区别)
3.1.重定向的地址栏会发生变化,转发的地址栏不变.
3.2.重定向两次请求两次响应,转发一次请求一次响应.
3.3.重定向路径需要加工程名,转发的路径不需要加工程名.
3.4.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.
图解:
语法:
重定向:response.sendRedirect("全路径");
转发 :request.getRequestDispatcher("路径").forward(request,response);
注意:转发的路径不能有项目名 |
|