Request&&Response学习总结

 

1.Response

  1.1 Response信息分析

       1.1.1 响应行(响应的协议  响应的状态吗  响应的描述)

              响应的状态码:

                     1XX:用户请求成功,但是服务器端没有响应

            2XX:用户请求成功,且服务器端给了正确的响应

            3XX:访问地址发生临时改变

                            302:重定向

浏览器请求两次,地址栏的地址发生改变,显示的是最后的页面内容

                304:缓存

             4XX:客户端错误

                404:路径错误

             5XX:服务器端错误

       设置状态码的方法:

1)设置正确的状态码:setStatus();

2)设置错误的状态码:sendError(状态码,[文字提示]);

1.1.2 响应头

       设置响应头的方法:

1setHeaderkey,value;如果有就覆盖,没有就添加

2addHeaderkey,value;不进行覆盖,直接添加

1.1.3 响应正文

               1response.getwriter():输出字符流

        2response.getOutputStream();输出字节流,多用于验证码及上传下载

        备注:输出字符流与输出字节流不能同时使用

1.2 Response的生命周期:一次完整的请求到响应结束

  1.3 Response的乱码处理方法:

              添加:response.setContentType("text/html;charset=utf-8");

        以此指定解码方式为utf-8

   1.4 小案例:验证码

      //1.设置画布的宽高

int height=30;

              int width=80;

              //2.新建一个画布对象

              BufferedImage im=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

             

              //3.新建一个画笔对象

              Graphics gs=im.getGraphics();

              //3.1设置背景色

              gs.setColor(Color.LIGHT_GRAY);

              //3.2设置字体样式、大小

              gs.setFont(new Font("微软雅黑",Font.ITALIC, 26));

              //3.3将画布展平

              gs.fillRect(0, 0, width, height);

      

              //4.画出图像

              //gs.drawString("1234", 0, height);

              Random rd=new Random();

              String[] strs={"a","b","c","d","e","f","g","h","i","j",

                            "k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};

              String b;

              int a;

              for(int i=0;i<4;i++){

                      a= rd.nextInt(10);

                     if(a%2==0){

                            b = rd.nextInt(10)+"";

                     }else{

                            a = rd.nextInt(26);

                            b = strs[a];

                     }

                     gs.setColor(new Color(rd.nextInt(256), rd.nextInt(256), rd.nextInt(256)));

                     gs.drawString(""+b, 20*i, height-rd.nextInt(10));

              }

              //画一些干扰线

              int x1,y1,x2,y2;

              for(int j=0;j<15;j++){

                     x1=rd.nextInt(80);

                     y1=rd.nextInt(30);

                     x2=x1+rd.nextInt(5);

                     y2=y1+rd.nextInt(5);

                     gs.setColor(new Color(rd.nextInt(256), rd.nextInt(256), rd.nextInt(256)));

                     gs.drawLine(x1, y1,x2, y2);

              }

             

              //5.刷出图像

              gs.dispose();

              ImageIO.write(im, "jpeg", new File("f:/a.jpg"));  //存储到硬盘上

        ImageIO.write(im, "jpeg", response.getOutputStream());//打印到页面上

2.Request

  2.1 Request信息分析

2.1.1请求行

       请求方式(get/post  我们请求的资源路径   协议

 获取请求的方式:String method = request.getMethod();

 获取资源的路径:String requestURI = request.getRequestURI();

 获取请求的协议:String protocol = request.getProtocol();

 获取资源名:String contextPath = request.getContextPath();

 获取请求资源路径:StringBuffer stringBuffer = request.getRequestURL();

 获取用户的地址:String addr = request.getRemoteAddr();

2.1.2 请求头

   request.getHeader("host") ;       通过请求头的name 得到相应的请求的值

   Enumeration enu = request.getHeaderNames(); 得到所有的请求头的name

2.1.3 请求体

request.getParameterMap()

   map{String[name的属性值],String[](value) }

   map{“username”,String[](ssss)}

得到用户的请求

request.getParameter("username");//根据name的属性值得到相应提交信息

request.getParameterNames(); //得到表单标签name的属性值

request.getParameterMap();//将用户的请求信息放到map

request.getParameterValues("xxx");//获取checkbok中的值

 2.2 request的乱码问题

原因:

提交信息===》浏览器按照utf-8进行编码===》服务器按照iso-8859-1的形式进行解码

  乱码中文====》按iso-8859-1编码===》按照utf-8的格式进行解码===》提交信息

2.2.1 post请求的乱码解决方案

        request.setCharacterEncoding("utf-8");

2.2.2 get请求的乱码解决方案

String str1 = new String (xxx.getBytes("iso-8859-1"),"utf-8");

2.3request请求转发

 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/xx");

 requestDispatcher.forward(request, response);

 或:request.getRequestDispatcher("/yu2").forward(request, response);

   特点:

     1.地址栏中显示的地址是原始请求的地址

2.显示的内容是转发后的页面的内容

3.原始请求地址中的内容不会显示出来

4.浏览器只访问一次服务器

2.4request请求包含

request.getRequestDispatcher("/yu2").include(request, response)

特点:

1.将两个Servlet合并,两个页面的信息都显示。

2.request在相互跳转的多个servlet间进行共享。

你可能感兴趣的:(Request&&Response学习总结)