A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Day15 Request和Response的使用


Day_15  Request 和Response两种ServletContext的两个API读取web项目下的文件
这两种读取文件的方法的前提是需要有ServletContext的对象,


第一种:getResourceAsStream()  返回的是一个流
属性文件的三部曲必须记住
  • 先创建Propertoies对象
  • 第二步,调用Propertoies的load对象,传入配置文件的路径


第二种:getRealPath()  获取磁盘的绝对路径什么是生命周期
服务器启动时创建一个servlet实例,并且会执行init方法,服务器会创建一个新的线程,访问Service方法,根据不同的类型去执行不同的do方法,而且在服务器关闭的时,servlet对象会自动销毁,   Servlet只创建一次
设置服务器初始化参数
file://F:/JAVA%E8%AF%AD%E8%A8%80%E8%B5%84%E6%96%99/%E9%BB%91%E9%A9%AC%E4%BA%8C%E9%98%B6%E6%AE%B5_Web%E7%AC%94%E8%AE%B0/MyNoteBook/Day15%E6%88%AA%E5%9B%BE/15day2?lastModify=1526887396
file://F:/JAVA%E8%AF%AD%E8%A8%80%E8%B5%84%E6%96%99/%E9%BB%91%E9%A9%AC%E4%BA%8C%E9%98%B6%E6%AE%B5_Web%E7%AC%94%E8%AE%B0/MyNoteBook/Day15%E6%88%AA%E5%9B%BE/1526533745510.png?lastModify=1526887396
怎样避免代码的侵入性,来读取db.properties配置文件
  • 加载器的原理就是直接读取服务器web_IF下的class文件下的db.properties


  • 使用类加载器来读取文件
  • 类的加载器用来加载Class文件,将class文件加载到内存
  •   ReadFileUtles.class.


下载文件
  • 两种方式

    • 第一种:超链接下来的方式,将文件地址写到超链接(必须是浏览器不能直接打开的文件)
    • 手动编写代码方式实现下载

      • 设置头和一个流
      • Content-Type    :文件的MIME的类型
      • Content-Disposition   :以下载的形式
      • InputStream     :输入流




头:
  • setHeader(String key,String value)    addHeader(String key,Sting value)
  • OutputStream   输出流


响应头的设置
  • 一个key对应多个value的头信息
  • 一个key对应一个value的头信息


Reaponse输出响应内容的概述
响应时  两种流会冲突
  • getWriter()     字符流向页面响应数据

    • reaponse.getWriter.println("Hello");
    • 肯定会乱码,因为字符流有缓冲区且默认编码格式为ISO-8859-1,编码不支持中文
    • 解决方式

      • 设置缓冲区编码
      • 设置浏览器默认打开时的编码格式
      • reaponse.getCharacterEncoding("UTF-8");
      • reaponse.setCh



  • getOutputStream()   字节流向页面响应数据

    • reaponse.getOutputStream().write("中文".getByte());
    • 使用字节流输出中文到浏览器不一定会乱码,每个浏览器的编码格式不一样
    • 解决方式:

      • 设置浏览器默认打开的时候编码
      • 设置中文字节数组取出的时候的编码




解决向页面输出乱码的解决方式
file://F:/JAVA%E8%AF%AD%E8%A8%80%E8%B5%84%E6%96%99/%E9%BB%91%E9%A9%AC%E4%BA%8C%E9%98%B6%E6%AE%B5_Web%E7%AC%94%E8%AE%B0/MyNoteBook/Day15%E6%88%AA%E5%9B%BE/1401386348.bmp?lastModify=1526887396
注册页面的编写
利用请求:
  • 客户端信息:

    • getMethod(); 请求方式
    • getRemoteAddr();   ip
    • getContextPath() ; 工程名


  • 获得表单数据

    • getParameter(String name)   返回值 String
    • getParameterValues(String name) 返回值  String[]
    • getParameterMap();       返回值  Map



如果要重载实例类的构造方法来封装数据时,我们必须要写无参构造
解决Request在接收中文乱码的方式,
  • post  

    • 直接用UTF-8的形式读取


  • get

    • 用String 构造的方法
    • String(request.getParameter("name").getBytes("ISO-8859-8"),"UTF-8")



面试重点
  • 转发和重定向的区别

    • 重定向

      • 路径需要加工程名
      • 任何有效的连接都能跳转
      • 地址栏会发生变化,内容也跳转
      • 两次请求,两次响应


    • 转发

      • 转发时不需要再加工程名
      • 只能跳转到自己当前工程下的网页
      • 地址栏不发生变化,只内容跳转
      • 一次请求一次响应




重点区别:假如我们在 ForwarServlet的域中存一个数据request.setAttribute("name","娜扎")   那么跳转到ForwarServlet2中
通过重定向跳转,则ForwarServlet2中不能获取到name值
通过转发跳转时,则ForwarServlet2中能获取到name值


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马