• 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);
        }
    }
  • 相关阅读:
    用人之道(一) 如何组建软件开发队伍[转]
    用人之道(二) 何管理软件开发团队[转]
    2005年度世界500强公司名单[转]
    人类的15个欲望与游戏设计[转&收藏]
    Flash读取Cookie[转]
    高效程序员应该养成的七个习惯
    六度隔离学说,1967年,哈佛大学,Stanley Milgram
    做技术,切不可沉湎于技术[转&收藏]
    庆祝VSX团队成立,加入VSX团队申请帖
    如何把菜单添加到另外一个VSPackage的菜单里?
  • 原文地址:https://www.cnblogs.com/-lwl/p/11149340.html
Copyright © 2020-2023  润新知