2022-10-23——Request和Response

本文详细介绍了在Servlet中如何使用Request和Response对象处理请求和响应。讲解了请求转发与响应重定向的区别,前者是服务器内部跳转,只产生一次请求,后者则会导致两次请求。在重定向中,由于请求的断开,需要使用Session来保存共享数据。同时,示例展示了如何生成并输出验证码图片,强调了验证码在防止恶意注册中的作用。
摘要由CSDN通过智能技术生成

目录

Request:是请求对象。Response:是应答对象

 Request获取请求行数据  

​编辑

Request请求转发

Respones重定向

请求转发与响应重定向的区别

心得:


Request:是请求对象。Response:是应答对象

由页面请求到Servlet,由Servelt的service(request,response)方法应答给页面。           request对象是用来封装请求数据的对象    。                                                                           response对象是用来封装响应数据的对象 。                                                                                    

Request:使用request对象来==获取==请求数据
Response:使用response对象来==设置==响应数据

 Request获取请求行数据  

请求行数据包括三部分{分别是 请求方式 请求资源路径 HTTP协议及版本};对于这三部分内容,request对象都提供了对应的API方法来获取。

Request请求转发

1. 请求转发(forward):一种在服务器服务器内部的资源跳转

2.实现方式:request.getRequestDispatcher("资源路径").forward(request,response); 

Respones重定向

1. Response重定向(redirect):一种资源跳转方式。

请求转发与响应重定向的区别

1.请求转发是服务器跳转,只会产生一次请求。请求转发语句

request.getRequestDispatcher().forward().

 

2.重定向是向浏览器跳转,会产生两次请求。响应重定向语句是

response.sendRedirect()

Session
response重定向产生两次请求,导致第一次存入request对象的共享数据第二次无法获取,因此要将数据存入一个范围更大的对象Session。

实现方式:

request.getSession().setAttribute(key,Object);
request.getSession().getAttribute(key);

Response响应字符
response.setContentType( "text/html" ); "text/xml" "text/json"
Response响应字节数据(验证码)
response.setContentType("image/jpg"); "application/mp4"

验证码的目的:进行人机识别,以防程序大量注册。

页面生成图片验证码图片:

<img src="checkCode">

 

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //准备工作
            response.setContentType("image/jpg");
            //返回的是一个图片类型都是规定好的,如写错规定类型浏览器就无法识别类型就会下载下来

        //用的是二进制字节流
        OutputStream outputStream=response.getOutputStream();

        //生成图片
        int width=100;
        int height=50;
        //创建一个对象,能在内存中生成一个图片
        BufferedImage image=new BufferedImage(
          width,
          height,
          BufferedImage.TYPE_INT_RGB
        );
        //一、填充图片
        //2.1填充背景图片
        Graphics g= image.getGraphics();
        g.setColor(Color.pink);
        g.fillRect(0,0,width,height);
        //2.2画边框
        g.setColor(Color.blue);
        g.drawRect(0,0,width-1,height-1);
        //2.3生成随机验证码,并画到图片中
        String str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuwxyz0123456789";
        Random random=new Random();
        StringBuffer sb=new StringBuffer();
        for (int i = 0; i < 4; i++) {
            int index=random.nextInt(str.length());
            //通过下标获取字符
            char ch=str.charAt(index);//生成随机字符
            sb.append(ch);//把生成的字符添加到stringBuffer里
            g.drawString(ch+"",width/5*i,height/2);
        }
        //验证码放入到共享对象中  选择(Session)
        request.getSession().setAttribute("checkCode",sb.toString());

        //2.4 生成干扰线,让爬虫程序读不出我们生成的字符串
        g.setColor(Color.green);
        //随机生成坐标点
        for (int i = 0; i < 10; i++) {//10.fori回车自动生成for循环体
            int x1=random.nextInt(width);
            int y1=random.nextInt(height);

            int x2=random.nextInt(width);
            int y2=random.nextInt(height);

            g.drawLine(x1,y1,x2,y2);//生成线
        }
        //3.将图片输出到页面
        ImageIO.write(image,"jpg",outputStream);
    }
}

心得:

转发与重定向的差别,重定向简单理解就是多次请求,而request共享数据范围没有那么大,只能一次请求一次应答,所以转发用request。重定向用Session共享数据范围可以。在Servlet中请求处理的行为方式是,以线程的方式。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值