response 两种在网页显示的方式:
//通过 response 获得输出流
OutputStream out = response.getOutputStream();
// 向ie发送数据
out.write("hello".getBytes());
// tomcat 会在请求结束时,检查response的流是否关闭 如没关会帮我们关闭
// getWriter 和 getOutputStream 不能同时调用
// PrintWriter writer = response.getWriter();
// writer.write("hello");
// 发送 302 状态码 + location头
// response.setStatus(302);
// response.setHeader("location","/day06/index.jsp");
// response 对请求重定向进行了功能的封装
response.sendRedirect("/day06/index.jsp");// 相当于 302 + location
解决response输出中文乱码问题
// 指定response的编码
//response.setCharacterEncoding("utf-8");
// 通知浏览器用什么码表来解码
//response.setHeader("content-type", "text/html;charset=utf-8");
response.setContentType("text/html;charset=utf-8");// 解决response输出中文乱码问题 最终方案
PrintWriter writer = response.getWriter();
writer.write("中国");
解决request中文乱码问题(在doGet方法下)
// 设置request编码
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
System.out.println("username=" + username);
byte[] bytes = username.getBytes("iso-8859-1");
username = new String(bytes, "utf-8");
System.out.println("username=" + username);
解决request中文乱码问题(在doPost方法下)
// 设置request编码
request.setCharacterEncoding("utf-8");// 只对post方式下提交的参数有效
String username = request.getParameter("username");
System.out.println("username=" + username);
文件下载
response.setContentType("text/html;charset=utf-8");// 设置消息体的编码
// 通过 http 协议 发送的http响应消息头 不能出现中文 中文必须要经过url编码
String filename = URLEncoder.encode("美女.jpg", "utf-8");
// 通知浏览器以下载的方式读取资源
response.setHeader("content-disposition", "attachment;filename="+filename);
// 读取图片数据 发给ie浏览器
String webPath = "/download/美女.jpg";// 相当于当前web应用的path
ServletContext servletContext = super.getServletContext();
InputStream in = servletContext.getResourceAsStream(webPath);
OutputStream out = response.getOutputStream();
int len;
byte[] buffer = new byte[1024];
while((len=in.read(buffer))!=-1)
out.write(buffer, 0, len);
url 编码
* url地址中不允许出现中文,需要传输要进行url编码
* 规则 将字符进行编码 编码成字节 将每个字节都转为16进制,前面加%
String str = "中国";
String result = URLEncoder.encode(str, "utf-8");
System.out.println(result);
byte[] bytes = str.getBytes("utf-8");
for(byte b : bytes)
System.out.println(b);
防盗链