小言_互联网的博客

Request和Response-学习笔记04【response之输出数据、response之验证码】

271人阅读  评论(0)
  1. Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】【day01】
  2. Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】[day01]
  3. Request和Response-学习笔记03【HTTP响应协议、response之重定向、response之相对路径和绝对路径】【day02】
  4. Request和Response-学习笔记04【response之输出数据、response之验证码】【day02】
  5. Request和Response-学习笔记05【ServletContext对象、文件下载】【day02】

目录

09 response之输出数据

Response_案例2_输出字符数

Response_案例3_输出字节数

10 response之验证码

Response_案例4_验证码_分析

Response_案例4_验证码_代码

Response_案例4_验证码_点击


09 response之输出数据

Response_案例2_输出字符数

Response 对象 * 案例
    1. 完成重定向
    2. 服务器输出字符数据到浏览器
        * 步骤:
            1. 获取字符输出流(流向客户端浏览器)
            2. 输出数据
        * 注意:
            * 乱码问题:
                1. PrintWriter pw = response.getWriter();获取的流的默认编码是ISO-8859-1
                2. 设置该流的默认编码
                3. 告诉浏览器响应体使用的编码
                //简单的形式,设置编码,是在获取流之前设置
                response.setContentType("text/html;charset=utf-8");

response乱码


  
  1. package cn.itcast.web.servlet;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. import java.io.PrintWriter;
  9. @WebServlet("/responseDemo4")
  10. public class ResponseDemo4 extends HttpServlet {
  11. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  12. //获取流对象之前,设置流的默认编码:ISO-8859-1 设置为:GBK
  13. //response.setCharacterEncoding("utf-8");
  14. //告诉浏览器,服务器发送的消息体数据的编码。建议浏览器使用该编码解码
  15. //response.setHeader("content-type","text/html;charset=utf-8");
  16. //简单的形式,设置编码
  17. response.setContentType( "text/html;charset=utf-8");
  18. //1.获取字符输出流
  19. PrintWriter pw = response.getWriter();
  20. //2.输出数据
  21. //pw.write("<h1>hello response</h1>");
  22. pw.write( "你好啊啊啊 response");
  23. }
  24. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  25. this.doPost(request, response);
  26. }
  27. }

Response_案例3_输出字节数

Response 对象 * 案例
    1. 完成重定向
    2. 服务器输出字符数据到浏览器
    3. 服务器输出字节数据到浏览器
        * 步骤:
            1. 获取字节输出流
            2. 输出数据
    4. 验证码

10 response之验证码

Response_案例4_验证码_分析

Response 对象 * 案例
    1. 完成重定向
    2. 服务器输出字符数据到浏览器
    3. 服务器输出字节数据到浏览器
    4. 验证码
        1. 本质:图片
        2. 目的:防止恶意表单注册

Response_案例4_验证码_代码


  
  1. package cn.itcast.web.servlet;
  2. import javax.imageio.ImageIO;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.ServletOutputStream;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.awt.*;
  10. import java.awt.image.BufferedImage;
  11. import java.io.IOException;
  12. import java.util.Random;
  13. @WebServlet("/checkCodeServlet")
  14. public class CheckCodeServlet extends HttpServlet {
  15. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  16. int width = 100;
  17. int height = 50;
  18. //1.创建一对象,在内存中图片(验证码图片对象)
  19. BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  20. //2.美化图片
  21. //2.1 填充背景色
  22. Graphics g = image.getGraphics(); //画笔对象
  23. g.setColor(Color.PINK); //设置画笔颜色
  24. g.fillRect( 0, 0, width, height); // 从(0,0)开始填充
  25. //2.2画边框
  26. g.setColor(Color.BLUE);
  27. g.drawRect( 0, 0, width - 1, height - 1);
  28. String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789";
  29. //生成随机角标
  30. Random ran = new Random();
  31. for ( int i = 1; i <= 4; i++) {
  32. int index = ran.nextInt(str.length());
  33. //获取字符
  34. char ch = str.charAt(index); //随机字符
  35. //2.3写验证码
  36. g.drawString(ch + "", width / 5 * i, height / 2);
  37. }
  38. //2.4画干扰线
  39. g.setColor(Color.GREEN);
  40. //随机生成坐标点
  41. for ( int i = 0; i < 10; i++) {
  42. int x1 = ran.nextInt(width);
  43. int x2 = ran.nextInt(width);
  44. int y1 = ran.nextInt(height);
  45. int y2 = ran.nextInt(height);
  46. g.drawLine(x1, y1, x2, y2);
  47. }
  48. //3.将图片输出到页面展示
  49. ImageIO.write(image, "jpg", response.getOutputStream());
  50. }
  51. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  52. this.doPost(request, response);
  53. }
  54. }

Response_案例4_验证码_点击

分析:
    点击超链接或者图片,需要换一张
    1.给超链接和图片绑定单击事件
    2.重新设置图片的src属性值


  
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>验证码图片 </title>
  6. <script>
  7. window.onload = function () {
  8. //1.获取图片对象
  9. var img = document.getElementById( "checkCode");
  10. //2.绑定单击事件
  11. img.onclick = function () {
  12. //加时间戳
  13. var date = new Date().getTime();
  14. img.src = "/day15/checkCodeServlet?" + date;
  15. }
  16. }
  17. </script>
  18. </head>
  19. <body>
  20. <img id="checkCode" src="/day15/checkCodeServlet"/>
  21. <a id="change" href="">看不清?换一张! </a>
  22. </body>
  23. </html>

加油~~~


转载:https://blog.csdn.net/weixin_44949135/article/details/113807150
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场