Response
1.response
ServletResponse -- 通用的response提供了一个响应应该具有最基本的属性和方法
|-HttpServletResponse -- 在ServletResponse的基础上针对于HTTP协议增加了很多强化的属性和方法
2.输出数据
1)getOutputStream字节输出流
response.getOutputStream().write("中国".getBytes("utf-8"));
2)getWriter字符输出流
response.getWriter().write("北京");
Notice: getWriter和getOutputStream在一次请求中只能使用一个
使用字符输出流输出中文时, 由于网线上只能输出高低电平,如果没有指定编码方式,那么服务器在发送数据时会使用默认的ISO-8859-1对数据编码(该码表中没有汉字, 因此汉字会被编码为?, 传送到浏览器上的数据实际就是?).
3)解决乱码
1> 通知服务器发送数据时使用utf-8编码
response.setCharacterEncoding("utf-8");
2> 通知浏览器接受数据时使用utf-8解码
response.setHeader("Content-Type", "text/html;charset=utf-8");
3>定时刷新
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript"> window.onload=function(){ /* 获取span元素 */ var second=document.getElementById("second"); var time=5; /* 设置定时器/* */ var timer=setInterval(function(){ second.innerHTML=time; time--; if(time<0){ /* 清除 */ clearInterval(timer); location.href="https://www.baidu.com"; } },1000) } </script> </head> <body> 恭喜你注册成功!<span id="second" style="color:red">5</span>秒钟跳转,如果没跳转,请点击<a href="https://www.baidu.com">这里</a> </body> </html>
4>实现下载
package com.oracle.demo02; import java.io.FileInputStream; import java.io.IOException; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import sun.misc.BASE64Encoder; public class DownloadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取文件名 String filename=request.getParameter("file"); filename=new String(filename.getBytes("ISO-8859-1"),"UTF-8"); // 获取user-agent获取客户端浏览器 String agent=request.getHeader("User-Agent"); String filenameEncoder=""; if (agent.contains("MSIE")) { // IE浏览器 filenameEncoder= URLEncoder.encode(filename, "utf-8"); filenameEncoder= filenameEncoder.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐浏览器 BASE64Encoder base64Encoder = new BASE64Encoder(); filenameEncoder= "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else { // 其它浏览器 filenameEncoder= URLEncoder.encode(filename, "utf-8"); } // 告知浏览器文件类型 response.setContentType(getServletContext().getMimeType(filename)); // 告知浏览器文件以附件的方式提供下载功能而不是解析 response.setHeader("Content-Disposition","attachment;filename="+filenameEncoder); // 获取字节输出流 ServletOutputStream sos=response.getOutputStream(); // 获取数据源的绝对路径 String realpath=getServletContext().getRealPath("download/"+filename); // 获取字节输入流 FileInputStream fis=new FileInputStream(realpath); // 复制 byte[] bytes=new byte[1024]; int len=0; while((len=fis.read())!=-1){ sos.write(bytes,0,len); } fis.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }