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);
    }
}

 

posted @ 2019-07-08 09:38  94554685  阅读(552)  评论(0编辑  收藏  举报