HttpServletResponce

HttpServletResponce

HttpServletResponce
HttpServletResponse对象是有关于对客户端请求之响应,您可以利用它来设定一些要响应的讯息,例如标题信息、响应状态码等
response的常用方法:
  1.向客户端输出中文数据(OutputStream和PrintWriter)
    response.setHeader("Content-Type","text/html;charset=utf-8");
    String data = "中国";
    OutputStream out =  response.getOutputStream();
    out.write(data.getBytes("utf-8"));
    /********************************************************************************/
    String data = "中国";
    OutputStream out = response.getOutputStream();
    out.write("<meta http-equiv='content-type' content='text/html;charset=utf-8'>".getBytes());
    out.write(data.getBytes("utf-8"));
    /********************************************************************************/
    response.setCharacterEncoding("utf-8");
    response.setHeader("Content-Type","text/html;charset=utf-8");
    String data = "中国";
    PrintWriter out =  response.getWriter();
    out.write(data);
    /********************************************************************************/
    response.setContentType("text/html;charset=utf-8");
    String data = "中国";
    PrintWriter out = response.getWriter();
    out.write(data);
    /********************************************************************************/
    String data = "中国";
    PrintWriter out = response.getWriter();
    out.write("<meta http-equiv='content-type' content='text/html;charset=utf-8'>");
    out.write(data);
    /********************************************************************************/
    2.文件下载与中文文件下载
      // String filePath = this.getServletContext().getRealPath("/Download/呵呵.jpg");
      String filePath = this.getServletContext().getRealPath("/Download/呵呵.txt");
        String fileName = filePath.substring(filePath.lastIndexOf("\") + 1);
        System.out.println(fileName);
        // 设置回送数据打开方式
        response.setHeader("content-disposition", "attachment;filename="+ URLEncoder.encode(fileName, "utf8"));

        InputStream inS = null;
        OutputStream outS = null;
        try {
            inS = new FileInputStream(filePath);
            int len = 0;
            byte[] buff = new byte[1024];
            outS = response.getOutputStream();
            while ((len = inS.read(buff)) > 0) {
                outS.write(buff, 0, len);
            }

        } catch (IOException e) {
            try {
                if (inS != null) {
                    inS.close();
                }
            } catch (IOException e2) {
            }
            try {
                if (outS != null) {
                    outS.close();
                }
            } catch (IOException e3) {
            }
        }
    3.输出随机图片(验证码)
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        BufferedImage image = new BufferedImage(//
                WIDTH//
                , HEIGHT//
                ,BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();

        // 1.设置背景色
        setBackGround(g);
        // 2.设置边框
        setBorder(g);
        // 3.画干扰线
        drawRandomLine(g);
        // 4.写随机数
        drawRandomNum((Graphics2D) g);
        // 5.输出到浏览器
        response.setContentType("image/jpeg");
        // 发表头控制浏览器不要缓存
        response.setDateHeader("expries", -1);
        response.setHeader("Cache-Control", "no-cache");
        response.setHeader("Pragma", "no-cache");
        //
        ImageIO.write(image, "jpg", response.getOutputStream());
    }
    private void setBackGround(Graphics g) {
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, WIDTH, HEIGHT);

    }
    private void setBorder(Graphics g) {
        g.setColor(Color.BLUE);
        g.drawRect(1, 1, WIDTH - 2, HEIGHT - 2);
    }
    private void drawRandomLine(Graphics g) {
        g.setColor(Color.GREEN);
        for (int i = 0; i < 5; i++) {
            int x1 = new Random().nextInt(WIDTH);
            int y1 = new Random().nextInt(HEIGHT);
            int x2 = new Random().nextInt(WIDTH);
            int y2 = new Random().nextInt(HEIGHT);
            g.drawLine(x1, y1, x2, y2);
        }
    }
    private void drawRandomNum(Graphics2D g) {
        g.setColor(Color.RED);
        g.setFont(new Font("宋体", Font.BOLD, 20));
        //常用中文的Unicode编码
        String base = "u7684u4e00u662fu4e86u6211u4e0du4ebau5728u4ed6u6709u8fd9u4e2au4e0au4eecu6765u5230u65f6u5927u5730u4e3au5b50u4e2du4f60u8bf4u751fu56fdu5e74u7740u5c31u90a3u548cu8981u5979u51fau4e5fu5f97u91ccu540eu81eau4ee5u4f1au5bb6u53efu4e0bu800cu8fc7u5929u53bbu80fdu5bf9u5c0fu591au7136u4e8eu5fc3u5b66u4e48u4e4bu90fdu597du770bu8d77u53d1u5f53u6ca1u6210u53eau5982u4e8bu628au8fd8u7528u7b2cu6837u9053u60f3u4f5cu79cdu5f00u7f8eu603bu4eceu65e0u60c5u5df1u9762u6700u5973u4f46u73b0u524du4e9bu6240u540cu65e5u624bu53c8u884cu610fu52a8u65b9u671fu5b83u5934u7ecfu957fu513fu56deu4f4du5206u7231u8001u56e0u5f88u7ed9u540du6cd5u95f4u65afu77e5u4e16u4ec0u4e24u6b21u4f7fu8eabu8005u88abu9ad8u5df2u4eb2u5176u8fdbu6b64u8bddu5e38u4e0eu6d3bu6b63u611fu89c1u660eu95eeu529bu7406u5c14u70b9u6587u51e0u5b9au672cu516cu7279u505au5916u5b69u76f8u897fu679cu8d70u5c06u6708u5341u5b9eu5411u58f0u8f66u5168u4fe1u91cdu4e09u673au5de5u7269u6c14u6bcfu5e76u522bu771fu6253u592au65b0u6bd4u624du4fbfu592bu518du4e66u90e8u6c34u50cfu773cu7b49u4f53u5374u52a0u7535u4e3bu754cu95e8u5229u6d77u53d7u542cu8868u5fb7u5c11u514bu4ee3u5458u8bb8u7a1cu5148u53e3u7531u6b7bu5b89u5199u6027u9a6cu5149u767du6216u4f4fu96beu671bu6559u547du82b1u7ed3u4e50u8272u66f4u62c9u4e1cu795eu8bb0u5904u8ba9u6bcdu7236u5e94u76f4u5b57u573au5e73u62a5u53cbu5173u653eu81f3u5f20u8ba4u63a5u544au5165u7b11u5185u82f1u519bu5019u6c11u5c81u5f80u4f55u5ea6u5c71u89c9u8defu5e26u4e07u7537u8fb9u98ceu89e3u53ebu4efbu91d1u5febu539fu5403u5988u53d8u901au5e08u7acbu8c61u6570u56dbu5931u6ee1u6218u8fdcu683cu58ebu97f3u8f7bu76eeu6761u5462u75c5u59cbu8fbeu6df1u5b8cu4ecau63d0u6c42u6e05u738bu5316u7a7au4e1au601du5207u600eu975eu627eu7247u7f57u94b1u7d36u5417u8bedu5143u559cu66feu79bbu98deu79d1u8a00u5e72u6d41u6b22u7ea6u5404u5373u6307u5408u53cdu9898u5fc5u8be5u8bbau4ea4u7ec8u6797u8bf7u533bu665au5236u7403u51b3u7aa2u4f20u753bu4fddu8bfbu8fd0u53cau5219u623fu65e9u9662u91cfu82e6u706bu5e03u54c1u8fd1u5750u4ea7u7b54u661fu7cbeu89c6u4e94u8fdeu53f8u5df4u5947u7ba1u7c7bu672au670bu4e14u5a5au53f0u591cu9752u5317u961fu4e45u4e4eu8d8au89c2u843du5c3du5f62u5f71u7ea2u7238u767eu4ee4u5468u5427u8bc6u6b65u5e0cu4e9au672fu7559u5e02u534au70edu9001u5174u9020u8c08u5bb9u6781u968fu6f14u6536u9996u6839u8bb2u6574u5f0fu53d6u7167u529eu5f3au77f3u53e4u534eu8ae3u62ffu8ba1u60a8u88c5u4f3cu8db3u53ccu59bbu5c3cu8f6cu8bc9u7c73u79f0u4e3du5ba2u5357u9886u8282u8863u7ad9u9ed1u523bu7edfu65adu798fu57ceu6545u5386u60cau8138u9009u5305u7d27u4e89u53e6u5efau7ef4u7eddu6811u7cfbu4f24u793au613fu6301u5343u53f2u8c01u51c6u8054u5987u7eaau57fau4e70u5fd7u9759u963fu8bd7u72ecu590du75dbu6d88u793eu7b97u4e49u7adfu786eu9152u9700u5355u6cbbu5361u5e78u5170u5ff5u4e3eu4ec5u949fu6015u5171u6bdbu53e5u606fu529fu5b98u5f85u7a76u8ddfu7a7fu5ba4u6613u6e38u7a0bu53f7u5c45u8003u7a81u76aeu54eau8d39u5012u4ef7u56feu5177u521au8111u6c38u6b4cu54cdu5546u793cu7ec6u4e13u9ec4u5757u811au5473u7075u6539u636eu822cu7834u5f15u98dfu4ecdu5b58u4f17u6ce8u7b14u751au67d0u6c89u8840u5907u4e60u6821u9ed8u52a1u571fu5faeu5a18u987bu8bd5u6000u6599u8c03u5e7fu8716u82cfu663eu8d5bu67e5u5bc6u8baeu5e95u5217u5bccu68a6u9519u5ea7u53c2u516bu9664u8dd1u4eaeu5047u5370u8bbeu7ebfu6e29u867du6389u4eacu521du517bu9999u505cu9645u81f4u9633u7eb8u674eu7eb3u9a8cu52a9u6fc0u591fu4e25u8bc1u5e1du996du5fd8u8da3u652fu6625u96c6u4e08u6728u7814u73edu666eu5bfcu987fu7761u5c55u8df3u83b7u827au516du6ce2u5bdfu7fa4u7687u6bb5u6025u5eadu521bu533au5965u5668u8c22u5f1fu5e97u5426u5bb3u8349u6392u80ccu6b62u7ec4u5ddeu671du5c01u775bu677fu89d2u51b5u66f2u9986u80b2u5fd9u8d28u6cb3u7eedu54e5u547cu82e5u63a8u5883u9047u96e8u6807u59d0u5145u56f4u6848u4f26u62a4u51b7u8b66u8d1du8457u96eau7d22u5267u554au8239u9669u70dfu4f9du6597u503cu5e2eu6c49u6162u4f5bu80afu95fbu5531u6c99u5c40u4f2fu65cfu4f4eu73a9u8d44u5c4bu51fbu901fu987eu6ceau6d32u56e2u5723u65c1u5802u5175u4e03u9732u56edu725bu54edu65c5u8857u52b3u578bu70c8u59d1u9648u83abu9c7cu5f02u62b1u5b9du6743u9c81u7b80u6001u7ea7u7968u602au5bfbu6740u5f8bu80dcu4efdu6c7du53f3u6d0bu8303u5e8au821eu79d8u5348u767bu697cu8d35u5438u8d23u4f8bu8ffdu8f83u804cu5c5eu6e10u5de6u5f55u4e1du7259u515au7ee7u6258u8d76u7ae0u667au51b2u53f6u80e1u5409u5356u575au559du8089u9057u6551u4feeu677eu4e34u85cfu62c5u620fu5584u536bu836fu60b2u6562u9760u4f0au6751u6234u8bcdu68eeu8033u5deeu77edu7956u4e91u89c4u7a97u6563u8ff7u6cb9u65e7u9002u4e61u67b6u6069u6295u5f39u94c1u535au96f7u5e9cu538bu8d85u8d1fu52d2u6742u9192u6d17u91c7u6bebu5634u6bd5u4e5du51b0u65e2u72b6u4e71u666fu5e2du73cdu7ae5u9876u6d3eu7d20u8131u519cu7591u7ec3u91ceu6309u72afu62cdu5f81u574fu9aa8u4f59u627fu7f6eu81d3u5f69u706fu5de8u7434u514du73afu59c6u6697u6362u6280u7ffbu675fu589eu5fcdu9910u6d1bu585eu7f3au5fc6u5224u6b27u5c42u4ed8u9635u739bu6279u5c9bu9879u72d7u4f11u61c2u6b66u9769u826fu6076u604bu59d4u62e5u5a1cu5999u63a2u5440u8425u9000u6447u5f04u684cu719fu8bfau5ba3u94f6u52bfu5956u5babu5ffdu5957u5eb7u4f9bu4f18u8bfeu9e1fu558au964du590fu56f0u5218u7f6au4ea1u978bu5065u6a21u8d25u4f34u5b88u6325u9c9cu8d22u5b64u67aau7981u6050u4f19u6770u8ff9u59b9u85f8u904du76d6u526fu5766u724cu6c5fu987au79cbu8428u83dcu5212u6388u5f52u6d6au542cu51e1u9884u5976u96c4u5347u7883u7f16u5178u888bu83b1u542bu76dbu6d4eu8499u68cbu7aefu817fu62dbu91cau4ecbu70e7u8bef";
        for (int i = 0; i < 4; i++) {
            int degree = new Random().nextInt() % 30;
            String ch = base.charAt(new Random().nextInt(base.length())) + "";
            int x1 = 5 + i * 30;// +(new Random().nextInt()%5);
            int y1 = 20;
            g.rotate(degree * Math.PI / 180, x1, y1);// degree*Math.PI/180
            // 设置旋转的弧度
            g.drawString(ch, x1, y1);
            // 将旋转返回原点
            g.rotate(-degree * Math.PI / 180, x1, y1);
        }
    }
    //使用方法
    <img style="cursor:hand" alt="刷新" src="/ServletDemo/responseDemo4" onclick="fincton(this.src = this.src +'?time='+ new Date().getTime)"><br />

    4.发送HTTP响应头
    //解释为图片
    response.setContentType("image/jpeg");
    // 发表头控制浏览器不要缓存
    response.setDateHeader("expries", -1);
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Pragma", "no-cache");
    //控制页面刷新
    String message = "<meta http-equiv='refresh' content='3;url=/ServletDemo/register.html'>3秒后跳到首页,如果没有跳转,请3秒后点击<a href='/ServletDemo/register.html'>超链接</a>";
    this.getServletContext().setAttribute("message",message);
    //控制页面刷新,假设程序运行到此,用户登录成功了。
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");
    response.setHeader("refresh","3;url='/ServletDemo/register.html'");
    response.getWriter().write("3秒后跳到首页,如果没有跳转,请3秒后点击<a href='/ServletDemo/register.html'>超链接</a>");
    //控制页面刷新
    response.setHeader("refresh","3");        
    String data = new Random().nextInt(100000)+"";    
    response.getWriter().write(data);
    //设置缓存一小时。设置了缓存后一小时内不会向服务器重新加载而是在本地加载。 这个技术可以用于网站加载js文件、图片、等固定的元素,减轻服务器负载
    response.setDateHeader("expires",System.currentTimeMillis()+1000*3600);
    5.实现请求重定向
    重定向的特点:
    1.浏览器会向服务器发送两次请求,这意味着就用两个不同servlet、response、request
    2.用重定向技术后,浏览器的地址栏会发生变化    
    response.setStatus(302);
    response.setHeader("location", "/ServletDemo/index.jsp");*/
    /********************************************************************************/
    response.sendRedirect("/ServletDemo/index.jsp");

    6.response细节
     1.getOutputStream 和 getWriter 方法两者相互排斥,调用了这个就不能再调用另一个了。//IllegalStateException
     2.getOutputStream 和 getWriter 不用手动关闭否则会出错,因为 Servlet会自动调用close关闭。
View Code

HttpServletResponce

HttpServletResponse对象是有关于对客户端请求之响应,您可以利用它来设定一些要响应的讯息,例如标题信息、响应状态码等


response的常用方法:
  1.向客户端输出中文数据(OutputStream和PrintWriter)
    response.setHeader("Content-Type","text/html;charset=utf-8");
    String data = "中国";
    OutputStream out = response.getOutputStream();
    out.write(data.getBytes("utf-8"));
    /********************************************************************************/
    String data = "中国";
    OutputStream out = response.getOutputStream();
    out.write("<meta http-equiv='content-type' content='text/html;charset=utf-8'>".getBytes());
    out.write(data.getBytes("utf-8"));
    /********************************************************************************/
    response.setCharacterEncoding("utf-8");
    response.setHeader("Content-Type","text/html;charset=utf-8");
    String data = "中国";
    PrintWriter out = response.getWriter();
    out.write(data);
    /********************************************************************************/
    response.setContentType("text/html;charset=utf-8");
    String data = "中国";
    PrintWriter out = response.getWriter();
    out.write(data);
    /********************************************************************************/
    String data = "中国";
    PrintWriter out = response.getWriter();
    out.write("<meta http-equiv='content-type' content='text/html;charset=utf-8'>");
    out.write(data);
    /********************************************************************************/
2.文件下载与中文文件下载
    // String filePath = this.getServletContext().getRealPath("/Download/呵呵.jpg");
    String filePath = this.getServletContext().getRealPath("/Download/呵呵.txt");
    String fileName = filePath.substring(filePath.lastIndexOf("\") + 1);
    System.out.println(fileName);
    // 设置回送数据打开方式
    response.setHeader("content-disposition", "attachment;filename="+ URLEncoder.encode(fileName, "utf8"));

    InputStream inS = null;
    OutputStream outS = null;
     try {
        inS = new FileInputStream(filePath);
        int len = 0;
        byte[] buff = new byte[1024];
        outS = response.getOutputStream();
        while ((len = inS.read(buff)) > 0) {
          outS.write(buff, 0, len);
        }

      } catch (IOException e) {
      try {if (inS != null) {inS.close();}} catch (IOException e2) {}

      try {if (outS != null) {outS.close();}} catch (IOException e3) {}
}


3.输出随机图片(验证码)
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
BufferedImage image = new BufferedImage(//
WIDTH//
, HEIGHT//
,BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();

// 1.设置背景色
setBackGround(g);
// 2.设置边框
setBorder(g);
// 3.画干扰线
drawRandomLine(g);
// 4.写随机数
drawRandomNum((Graphics2D) g);
// 5.输出到浏览器
response.setContentType("image/jpeg");
// 发表头控制浏览器不要缓存
response.setDateHeader("expries", -1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
//
ImageIO.write(image, "jpg", response.getOutputStream());
}
private void setBackGround(Graphics g) {
g.setColor(Color.WHITE);
g.fillRect(0, 0, WIDTH, HEIGHT);

}
private void setBorder(Graphics g) {
g.setColor(Color.BLUE);
g.drawRect(1, 1, WIDTH - 2, HEIGHT - 2);
}
private void drawRandomLine(Graphics g) {
g.setColor(Color.GREEN);
for (int i = 0; i < 5; i++) {
int x1 = new Random().nextInt(WIDTH);
int y1 = new Random().nextInt(HEIGHT);
int x2 = new Random().nextInt(WIDTH);
int y2 = new Random().nextInt(HEIGHT);
g.drawLine(x1, y1, x2, y2);
}
}
private void drawRandomNum(Graphics2D g) {
g.setColor(Color.RED);
g.setFont(new Font("宋体", Font.BOLD, 20));
//常用中文的Unicode编码
String base = "u7684u4e00u662fu4e86u6211u4e0du4ebau5728u4ed6u6709u8fd9u4e2au4e0au4eecu6765u5230u65f6u5927u5730u4e3au5b50u4e2du4f60u8bf4u751fu56fdu5e74u7740u5c31u90a3u548cu8981u5979u51fau4e5fu5f97u91ccu540eu81eau4ee5u4f1au5bb6u53efu4e0bu800cu8fc7u5929u53bbu80fdu5bf9u5c0fu591au7136u4e8eu5fc3u5b66u4e48u4e4bu90fdu597du770bu8d77u53d1u5f53u6ca1u6210u53eau5982u4e8bu628au8fd8u7528u7b2cu6837u9053u60f3u4f5cu79cdu5f00u7f8eu603bu4eceu65e0u60c5u5df1u9762u6700u5973u4f46u73b0u524du4e9bu6240u540cu65e5u624bu53c8u884cu610fu52a8u65b9u671fu5b83u5934u7ecfu957fu513fu56deu4f4du5206u7231u8001u56e0u5f88u7ed9u540du6cd5u95f4u65afu77e5u4e16u4ec0u4e24u6b21u4f7fu8eabu8005u88abu9ad8u5df2u4eb2u5176u8fdbu6b64u8bddu5e38u4e0eu6d3bu6b63u611fu89c1u660eu95eeu529bu7406u5c14u70b9u6587u51e0u5b9au672cu516cu7279u505au5916u5b69u76f8u897fu679cu8d70u5c06u6708u5341u5b9eu5411u58f0u8f66u5168u4fe1u91cdu4e09u673au5de5u7269u6c14u6bcfu5e76u522bu771fu6253u592au65b0u6bd4u624du4fbfu592bu518du4e66u90e8u6c34u50cfu773cu7b49u4f53u5374u52a0u7535u4e3bu754cu95e8u5229u6d77u53d7u542cu8868u5fb7u5c11u514bu4ee3u5458u8bb8u7a1cu5148u53e3u7531u6b7bu5b89u5199u6027u9a6cu5149u767du6216u4f4fu96beu671bu6559u547du82b1u7ed3u4e50u8272u66f4u62c9u4e1cu795eu8bb0u5904u8ba9u6bcdu7236u5e94u76f4u5b57u573au5e73u62a5u53cbu5173u653eu81f3u5f20u8ba4u63a5u544au5165u7b11u5185u82f1u519bu5019u6c11u5c81u5f80u4f55u5ea6u5c71u89c9u8defu5e26u4e07u7537u8fb9u98ceu89e3u53ebu4efbu91d1u5febu539fu5403u5988u53d8u901au5e08u7acbu8c61u6570u56dbu5931u6ee1u6218u8fdcu683cu58ebu97f3u8f7bu76eeu6761u5462u75c5u59cbu8fbeu6df1u5b8cu4ecau63d0u6c42u6e05u738bu5316u7a7au4e1au601du5207u600eu975eu627eu7247u7f57u94b1u7d36u5417u8bedu5143u559cu66feu79bbu98deu79d1u8a00u5e72u6d41u6b22u7ea6u5404u5373u6307u5408u53cdu9898u5fc5u8be5u8bbau4ea4u7ec8u6797u8bf7u533bu665au5236u7403u51b3u7aa2u4f20u753bu4fddu8bfbu8fd0u53cau5219u623fu65e9u9662u91cfu82e6u706bu5e03u54c1u8fd1u5750u4ea7u7b54u661fu7cbeu89c6u4e94u8fdeu53f8u5df4u5947u7ba1u7c7bu672au670bu4e14u5a5au53f0u591cu9752u5317u961fu4e45u4e4eu8d8au89c2u843du5c3du5f62u5f71u7ea2u7238u767eu4ee4u5468u5427u8bc6u6b65u5e0cu4e9au672fu7559u5e02u534au70edu9001u5174u9020u8c08u5bb9u6781u968fu6f14u6536u9996u6839u8bb2u6574u5f0fu53d6u7167u529eu5f3au77f3u53e4u534eu8ae3u62ffu8ba1u60a8u88c5u4f3cu8db3u53ccu59bbu5c3cu8f6cu8bc9u7c73u79f0u4e3du5ba2u5357u9886u8282u8863u7ad9u9ed1u523bu7edfu65adu798fu57ceu6545u5386u60cau8138u9009u5305u7d27u4e89u53e6u5efau7ef4u7eddu6811u7cfbu4f24u793au613fu6301u5343u53f2u8c01u51c6u8054u5987u7eaau57fau4e70u5fd7u9759u963fu8bd7u72ecu590du75dbu6d88u793eu7b97u4e49u7adfu786eu9152u9700u5355u6cbbu5361u5e78u5170u5ff5u4e3eu4ec5u949fu6015u5171u6bdbu53e5u606fu529fu5b98u5f85u7a76u8ddfu7a7fu5ba4u6613u6e38u7a0bu53f7u5c45u8003u7a81u76aeu54eau8d39u5012u4ef7u56feu5177u521au8111u6c38u6b4cu54cdu5546u793cu7ec6u4e13u9ec4u5757u811au5473u7075u6539u636eu822cu7834u5f15u98dfu4ecdu5b58u4f17u6ce8u7b14u751au67d0u6c89u8840u5907u4e60u6821u9ed8u52a1u571fu5faeu5a18u987bu8bd5u6000u6599u8c03u5e7fu8716u82cfu663eu8d5bu67e5u5bc6u8baeu5e95u5217u5bccu68a6u9519u5ea7u53c2u516bu9664u8dd1u4eaeu5047u5370u8bbeu7ebfu6e29u867du6389u4eacu521du517bu9999u505cu9645u81f4u9633u7eb8u674eu7eb3u9a8cu52a9u6fc0u591fu4e25u8bc1u5e1du996du5fd8u8da3u652fu6625u96c6u4e08u6728u7814u73edu666eu5bfcu987fu7761u5c55u8df3u83b7u827au516du6ce2u5bdfu7fa4u7687u6bb5u6025u5eadu521bu533au5965u5668u8c22u5f1fu5e97u5426u5bb3u8349u6392u80ccu6b62u7ec4u5ddeu671du5c01u775bu677fu89d2u51b5u66f2u9986u80b2u5fd9u8d28u6cb3u7eedu54e5u547cu82e5u63a8u5883u9047u96e8u6807u59d0u5145u56f4u6848u4f26u62a4u51b7u8b66u8d1du8457u96eau7d22u5267u554au8239u9669u70dfu4f9du6597u503cu5e2eu6c49u6162u4f5bu80afu95fbu5531u6c99u5c40u4f2fu65cfu4f4eu73a9u8d44u5c4bu51fbu901fu987eu6ceau6d32u56e2u5723u65c1u5802u5175u4e03u9732u56edu725bu54edu65c5u8857u52b3u578bu70c8u59d1u9648u83abu9c7cu5f02u62b1u5b9du6743u9c81u7b80u6001u7ea7u7968u602au5bfbu6740u5f8bu80dcu4efdu6c7du53f3u6d0bu8303u5e8au821eu79d8u5348u767bu697cu8d35u5438u8d23u4f8bu8ffdu8f83u804cu5c5eu6e10u5de6u5f55u4e1du7259u515au7ee7u6258u8d76u7ae0u667au51b2u53f6u80e1u5409u5356u575au559du8089u9057u6551u4feeu677eu4e34u85cfu62c5u620fu5584u536bu836fu60b2u6562u9760u4f0au6751u6234u8bcdu68eeu8033u5deeu77edu7956u4e91u89c4u7a97u6563u8ff7u6cb9u65e7u9002u4e61u67b6u6069u6295u5f39u94c1u535au96f7u5e9cu538bu8d85u8d1fu52d2u6742u9192u6d17u91c7u6bebu5634u6bd5u4e5du51b0u65e2u72b6u4e71u666fu5e2du73cdu7ae5u9876u6d3eu7d20u8131u519cu7591u7ec3u91ceu6309u72afu62cdu5f81u574fu9aa8u4f59u627fu7f6eu81d3u5f69u706fu5de8u7434u514du73afu59c6u6697u6362u6280u7ffbu675fu589eu5fcdu9910u6d1bu585eu7f3au5fc6u5224u6b27u5c42u4ed8u9635u739bu6279u5c9bu9879u72d7u4f11u61c2u6b66u9769u826fu6076u604bu59d4u62e5u5a1cu5999u63a2u5440u8425u9000u6447u5f04u684cu719fu8bfau5ba3u94f6u52bfu5956u5babu5ffdu5957u5eb7u4f9bu4f18u8bfeu9e1fu558au964du590fu56f0u5218u7f6au4ea1u978bu5065u6a21u8d25u4f34u5b88u6325u9c9cu8d22u5b64u67aau7981u6050u4f19u6770u8ff9u59b9u85f8u904du76d6u526fu5766u724cu6c5fu987au79cbu8428u83dcu5212u6388u5f52u6d6au542cu51e1u9884u5976u96c4u5347u7883u7f16u5178u888bu83b1u542bu76dbu6d4eu8499u68cbu7aefu817fu62dbu91cau4ecbu70e7u8bef";
for (int i = 0; i < 4; i++) {
int degree = new Random().nextInt() % 30;
String ch = base.charAt(new Random().nextInt(base.length())) + "";
int x1 = 5 + i * 30;// +(new Random().nextInt()%5);
int y1 = 20;
g.rotate(degree * Math.PI / 180, x1, y1);// degree*Math.PI/180
// 设置旋转的弧度
g.drawString(ch, x1, y1);
// 将旋转返回原点
g.rotate(-degree * Math.PI / 180, x1, y1);
}
}
//使用方法
<img style="cursor:hand" alt="刷新" src="/ServletDemo/responseDemo4" onclick="fincton(this.src = this.src +'?time='+ new Date().getTime)"><br />

4.发送HTTP响应头


  //解释为图片
    response.setContentType("image/jpeg");
  

  // 发表头控制浏览器不要缓存
    response.setDateHeader("expries", -1);
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Pragma", "no-cache");
  

  //控制页面刷新
    String message = "<meta http-equiv='refresh' content='3;url=/ServletDemo/register.html'>3秒后跳到首页,如果没有跳转,请3秒后点击<a href='/ServletDemo/register.html'>超链接</a>";
    this.getServletContext().setAttribute("message",message);//测试,实际情况不是使用Context域


  //控制页面刷新,假设程序运行到此,用户登录成功了。
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");
    response.setHeader("refresh","3;url='/ServletDemo/register.html'");
    response.getWriter().write("3秒后跳到首页,如果没有跳转,请3秒后点击<a href='/ServletDemo/register.html'>超链接</a>");

  //控制页面刷新
    response.setHeader("refresh","3");
    String data = new Random().nextInt(100000)+"";
    response.getWriter().write(data);

  //设置缓存一小时。设置了缓存后一小时内不会向服务器重新加载而是在本地加载。 这个技术可以用于网站加载js文件、图片、等固定的元素,减轻服务器负载
    response.setDateHeader("expires",System.currentTimeMillis()+1000*3600);

5.实现请求重定向


  重定向的特点:
    1.浏览器会向服务器发送两次请求,这意味着就用两个不同servlet、response、request
    2.用重定向技术后,浏览器的地址栏会发生变化
    

    response.setStatus(302);
    response.setHeader("location", "/ServletDemo/index.jsp");*/
    /********************************************************************************/
    response.sendRedirect("/ServletDemo/index.jsp");

6.response细节(切记)


    1.getOutputStream 和 getWriter 方法两者相互排斥,调用了这个就不能再调用另一个了。//IllegalStateException
    2.getOutputStream 和 getWriter 不用手动关闭否则会出错,因为 Servlet会自动调用close关闭。

原文地址:https://www.cnblogs.com/lhy_2011/p/4044798.html