05-Request&Response

打印 上一主题 下一主题

主题 913|帖子 913|积分 2739

Request&Response


  • Request

    • 获取请求数据

  • Response

    • 设置响应数据


1、Request

1.1、Request继承体系



  • 1、Tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到service方法中
  • 2、使用request对象,查阅JavaEE API文档的HttpServletRequest接口
1.2、Request获取请求数据

1.2.1、获取请求数据的方法


  • 请求行:GET /request-response-demo/req1?username=zhangsan HTTP/1.1

    • 方法说明数据String getMethod()获取请求方式GETString getContextPath()获取虚拟路径(项目访问路径)/request-response-demoStringBuffer getRequestURL()获取URL(统一资源定位符)http://localhost:8080/request-response-demo/req1String getRequestURI()获取URI(统一资源定位符)/request-response-demo/req1String getQueryString()获取请求参数(GET方式)username=zhangsan&password=123

  • 请求头:User-Agent: Mozilla/5.0 Chrome/91.0.4472.106

    • String getHeader(String name):根据请求头名称,获取值

  • 请求体:username=superbaby&password=123

    • ServletInputStream getInputStream():获取字节输入流
    • BufferedReader  getReader():获取字符输入流

1.2.2、通用方式获取请求参数


  • 请求参数获取方式

    • GET方式

      • String getQueryString()

    • POST方式

      • BufferedReader getReader()


  • 思考

    • 这里的GET请求方式和POST请求方式,区别主要在于获取请求参数的方式不一样
    • 那么是否有一种统一获取请求参数的方式,从而统一doGet和doPost方法内的代码?

  • 在Tomcat源码中,实现了一个在获取请求方式的时候,将参数赋值给了同一个成员变量param,使得doGet和doPost方法内的请求参数方式的代码有了统一的可能


    • Map getParameterMap():获取所有参数Map集合
    • String getParameter(String name):根据名称获取参数值(单个值)
    • String[] getParameterValues(String name):根据名称获取参数值(数组)

1.2.3、请求参数中文乱码处理


  • Tomcat 8.0 之后,GET请求乱码的问题已经被解决,设置默认的编码方式为UTF-8,其他Tomcat的默认编码都为 ISO-8859-1;
  • Request解决POST请求参数中文乱码

    • 给POST方法设置输入流的编码

      • request.setCharacterEncoding("UTF-8")


  • URL编码

    • 1.将字符串按照编码方式转为二进制
    • 2.每个字节转为2个16进制数并在前面加上%


1.3、Request请求转发


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



  • 实现方式

    • request.getRequestDispatcher("资源B路径").forward(request, response);

  • 请求转发资源间共享数据:使用Request对象

    • void setAttribute(String name, Object o):存储数据到request域中
    • Object getAttribute(String name):根据key,获取值
    • void removeAttribute(String name):根据key,删除键值对

  • 请求转发的特点

    • 浏览器地址栏路径不发生变化
    • 只能转发到当前服务器的内部资源
    • 一次请求,可以在转发资源间使用request共享数据

2、Response


  • Request:使用request对象来获取请求数据
  • Response:使用response对象来设置响应数据
2.1、Response继承体系



2.2、Response设置响应数据


  • 响应数据分为3个部分

    • 响应行

      • HTTP/1.1 200 OK
      • void setStatus(int sc):设置响应状态

    • 响应头

      • Content-Type:text/html
      • void setHeader(String name, String value):设置响应头键值对

    • 响应体


      • PrintWriter getWriter():获取字符输出流
      • ServletOutputStream getOutputStream():获取字节输出流


2.3、Response重定向


  • 重定向概念

    • 跳转到下一个页面,不需要传递数据,使用重定向
    • 是一种资源跳转方式


  • 实现方式

    • 方式1

      • response.setStatus(302);
      • response.setHeader("location", "资源B的路径");

    • 方式2

      • response.sendRedirect("资源B的路径");


  • 重定向的特点

    • 浏览器地址栏发生变化
    • 可以重定向到任意位置的资源(服务器内部、外部均可)
    • 再次请求,不能在多个资源使用request共享数据

2.4、Response响应字符数据


  • 实现方式

    • 1.通过Response对象获取字符输出流

      • PrintWriter writer = response.getWriter();

    • 2.输出数据

      • writer.write("aaa");


  • 注意事项

    • 该流不需要关闭,随着响应结束,response对象销毁,由服务器关闭
    • 中文数据乱码,原因是通过Response获取的字符输出流默认编码跟Tomcat的默认编码一样都是:ISO-8859-1

      • 解决方式

        • response.setContentType("text/html;charset=utf-8");



2.5、Response响应字节数据

<ul>实现方式

  • 1.通过Response对象获取字节输出流

    • ServletOutputStream outputStream = response.getOutputStream();

  • 2.写数据

    • outputStream.write(字节数据);

IOUtils工具类的使用
<ul>添加依赖
<ul>[code]  commons-io  commons-io

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

锦通

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表