Servlet总结2

Servlet总结2

一、HttpServletRequest类

1.1 作用

每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法(doGet和doPost)中给我们使用。我们可以通过HttpServletRequest对象,获取到所有请求的信息。

1.2 常用方法

  1. 获取请求行数据:GET /myweb/demo1?name=zhangsan HTTP/1.1

    方法:

    1. getMethod():获取请求方式GET或POST
    2. getContextPath():获取项目名称
    3. getServletPath():获取Servlet路径
    4. getQueryString():获取get方式请求参数
    5. getRequestURI():获取请求的资源路径(统一资源标识符)
    6. getRequestURL() :获取请求的绝对路径(统一资源定位符)
    7. getProtocol():获取协议及版本
    8. getRemoteAddr():获取客户机的IP地址
  2. 获取请求头数据

    方法:

    1. getHeader():通过请求头的名称获取请求头的值
    2. getHeaderNames():获取所有的请求头名称
  3. 获取请求体数据:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数

    步骤:

    1. 获取流对象
      • getReader():获取字符输入流,只能操作字符数据
      • getInputStream():获取字节输入流,可以操作所有类型数据
    2. 再从流对象中拿数据
  4. 其他功能

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

      1. getParameter(String name):根据参数名称获取参数值
      2. getParameterValues(String name):根据参数名称获取参数值的数组
      3. getParameterNames():获取所有请求的参数名称
      4. getParameterMap():获取所有参数的map集合
    2. 处理中文乱码问题

      1. get方式:tomcat8 已经将get方式乱码问题解决了

      2. post方式:会乱码

        • 解决方法:

          在获取参数前,设置request的编码request.setCharacterEncoding(“utf-8”)

    3. 请求转发:一种在服务器内部的资源跳转方式。

      1. 方法:通过request对象获取请求转发器对象:request.getRequestDispatcher(path).forward(request, response)

      2. 特点:

        1. 浏览器地址栏路径不发生变化
        2. 只能转发到当前服务器内部资源中
        3. 转发是一次请求一次响应
    4. 共享数据

      1. 域对象:一个有作用范围的对象,可以在范围内共享数据
      2. request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
      3. 方法:
        1. setAttribute(String name,Object obj):存储数据
        2. getAttitude(String name):通过键获取值
        3. removeAttribute(String name):通过键移除键值对
    5. 获取ServletContext:

      //获取ServletContext的三种方式
      ServletContext context1 = getServletContext();
      ServletContext Context2 = this.getServletContext();
      ServletContext Context3 = getServletConfig().getServletContext();
      

二、HttpServletResponse类

2.1 作用

HttpServletResponse类和HttpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息,我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置。

2.2 基本方法

  1. 设置响应行

    1. 格式:HTTP/1.1 200 ok
    2. 设置状态码:setStatus(int sc)
  2. 设置响应头:setHeader(String name, String value)

  3. 设置响应体:

    步骤:

    1. 获取输出流:
      • 字符输出流:PrintWriter getWriter()
      • 字节输出流:ServletOutputStream getOutputStream()
    2. 使用输出流,将数据输出到客户端浏览器

2.3 功能

  1. 完成重定向

    1. 重定向:资源跳转的方式

      代码实现:

      //1. 设置状态码为302
      response.setStatus(302);
      //2.设置响应头location
      response.setHeader("location","/myweb/responseDemo");
      
      //简单的重定向方法
      response.sendRedirect("/myweb/responseDemo");
      
    2. 重定向的特点:redirect

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

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

      1. 相对路径:通过相对路径不可以确定唯一资源
      2. 绝对路径:通过绝对路径可以确定唯一资源
  2. 服务器输出字符数据到浏览器

    步骤:

    1. 获取字符输出流
    2. 输出数据

    注意:

    • 乱码问题:
      1. PrintWriter pw = response.getWriter();获取的流的默认编码是ISO-8859-1
      2. 设置该流的默认编码
      3. 告诉浏览器响应体使用的编码
      4. 解决方法:设置编码,是在获取流之前设置response.setContentType(“text/html;charset=utf-8”);
  3. 服务器输出字节数据到浏览器

    步骤:

    1. 获取字符输出流
    2. 输出数据

    代码实现:

    ServletOutputStream sos = response.getOutputStream();
    // 获取图片的真实路径
    String realPath = this.getServletContext().getRealPath("/a.png");
    // 获取输入流读取图片
    FileInputStream fis = new FileInputStream(new File(realPath));
    byte[] by = new byte[1024];
    int len = 0;
    while ((len = fis.read(by)) != -1) {
    	sos.write(by, 0, len);
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值