• Request对象与Response对象


    1.Request对象

    Request对象是来获取请求消息的,是由服务器(Tomcat)创建的。

    Request对象继承体系结构:

        ServletRequest        --    接口
            |    继承
        HttpServletRequest    -- 接口
            |    实现
        org.apache.catalina.connector.RequestFacade     -- 类(tomcat源码实现)

    2.Request对象的方法

      2.1 获取请求行数据(例如:GET /demo/servletdemo1?name=zhangsan HTTP/1.1)

    (1)获取请求方式:GET

             String getMethod()

    (2)获取虚拟目录:/demo

             String getContextPath()

    (3)获取Servlet路径:/servletdemo1

             String getServletPath()

    (4)获取get方式请求参数:name=zhangsan

             String getQueryString()

    (5)获取请求URI(统一资源标识符):/demo/servletdemo1

             String getRequestURI()

    (6)获取请求URL(统一资源定位符):http://localhost:8080/demo/servletdemo1

       StringBuffer getRequestURL()

    (7)获取协议及版本:HTTP/1.1

       String getProtocol()

    (8)获取客户机的IP地址

      String getRemoteAddr()

      2.2 获取请求头数据

    (1)通过请求头的名称获取请求头的值

      String getHeader(String name)

    (2)获取所有的请求头名称

      Enumeration<String> getHeaderNames()

      2.3 获取请求体数据

    1.获取流对象

    BufferedReader getReader():获取字符输入流,只能操作字符数据
    ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据

    2.在流对象取数据

     

    3.其他功能

    获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数

    (1)String getParameter(String name):根据参数名称获取参数值    username=zs&password=123

    (2)String[] getParameterValues(String name):根据参数名称获取参数值的数组  hobby=xx&hobby=game

    (3)Enumeration<String> getParameterNames():获取所有请求的参数名称

    (4)Map<String,String[]> getParameterMap():获取所有参数的map集合

    注意:

    中文乱码问题:
                    * get方式:tomcat 8 已经将get方式乱码问题解决了
                    * post方式:会乱码
                        * 解决:在获取参数前,设置request的编码request.setCharacterEncoding("utf-8");


    1.Response对象

    Response对象和Request对象一样,也是由Tomcat创建的。

    2.Response对象的常用方法

     2.1设置响应行状态吗

      setStatus(int sc)

     2.2设置响应头

      setHeader(String name, String value)

     2.3设置响应体

    (1)获取输出流

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

    (2)使用输出流,将数据输出到客户端浏览器

    3.重定向

    比较原始的方法:

    //1. 设置状态码为302
     response.setStatus(302);
    //2.设置响应头location
     response.setHeader("location","要重定向到的地址");

    Response对象提供了一个简单的方法:

    response.sendRedirect("要重定向到的地址");

    重定向与请求转发的区别:

    重定向的特点:redirect
                1. 地址栏发生变化
                2. 重定向可以访问其他站点(服务器)的资源
                3. 重定向是两次请求。不能使用request对象来共享数据

    转发的特点:forward
                1. 转发地址栏路径不变
                2. 转发只能访问当前服务器下的资源
                3. 转发是一次请求,可以使用request对象来共享数据

    4.乱码问题

    比较原始的方法:

    1. 设置该流的默认编码

    2. PrintWriter pw = response.getWriter();获取的流的默认编码是ISO-8859-1

    3. 告诉浏览器响应体使用的编码

    示例:

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // 设置该流的默认编码
            resp.setCharacterEncoding("utf-8");
    
            // 获取的流的默认编码是ISO-8859-1
            PrintWriter writer = resp.getWriter();
    
            // 告诉浏览器我用的是utf-8编码
            resp.setHeader("content-type","text/html;charset=utf-8");
            writer.write("你好呀");
        }

    比较简单的方法:

    把上面的工作全部放在一步做了!

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

    示例:

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            resp.setContentType("text/html;charset=utf-8");  // 这句一定要放在前面,因为里面包含设置流的编码
            
            PrintWriter writer = resp.getWriter();
    
            writer.write("你好呀");
        }
  • 相关阅读:
    Rolling File Appender使用示例
    log4net生成dll文件
    看涨期权(call options)
    log4net file Appender使用示例
    log4net不能记录日志,IsErrorEnabled值为false
    C#委托
    打印事件处理顺序
    Zigbee、WiFi和433MHz无线技术
    log4net Tutorial
    安装服务出现异常
  • 原文地址:https://www.cnblogs.com/chichung/p/10315168.html
Copyright © 2020-2023  润新知