• response request


    服务器启动  每一个servlet  创建一个对象

    浏览器启动  每一个请求  创建  request  response  对象 请求结束 立即销毁


    response 

    response 有两个方法: 

    1. getOutputStream 二进制数据
    2. getWriter 文本数据
    上面的两个流属于互斥流 不能同时使用

    首先声明一点字符流的传输 无乱码问题

    文件下载

    // 获得下载文件的绝对路径

    String path = getServletContext().getRealPath("download/美女.jpg") ;

    File file = new File(path) ;

    // 发送头,通知浏览器下载 

    response.setContentType("application/octet-stream") ;

    // 文件名有中文,必须经过url编码 

    String fileName = URLEncoder.encode(file.getName(),"utf-8") ;

    response.setHeader("content-disposition","attachment;filename=" + fileName);

    // 读文件,发送给IE

    InputStream in = new FileInputStream(file);

    OutputStream out = response.getOutputStream();

    int len;

    byte[] buffer = new byte[1024] ;

    while((len=in.read(buffer))>0) out.write(buffer,0,len) ;

    http协议传输的数据中如果有中文 都需要进行 URL 编码 浏览器会自动解码

    这里fileName是跟着 content-disposition 发送给浏览器的 如果没有进行 url 编码 就会乱码

    程序结束时 不可关流 如果关流 后面 servlet 无法使用 tomcat自动关流的 

    setStatus

    setHeader

    REFRESH

    Expires

    content-type


    meta


    response.sendRedirect("") ; //相当于两次请求

    response 乱码 



    request

    getRequestURL() StringBuffer

    getRequestURI() String (除了主机名 端口号)

    getQueryString() String (?后面的)

    getRemoteAddr() String (ip)

    getRemoteHost() String (ip)

    getRemotePort() int

    getLocalAddr() String (ip)

    getLocalName() String


    getHeader("Host") String (localhost:8080)

    getHeaders("xxx") Enumeration (多个同名的) 

    getHeaderNames() Enumeration (keys)

    getParameter("username") String (key/value)

    getParameterValues("pereference") Enumeration (key/values)

    getParameterMap() Map<String, String[]> (key/values)s

     

    乱码总结:

    http://developer.51cto.com/art/201106/270666.htm

    这篇文章 非常好!!!

     

    pageEncoding utf-8 charset gb2312
    username:%D3%C3%BB%A7%C3%FB
    password:%C3%DC%C2%EB
    pageEncoding utf-8 charset utf-8
    username:%E7%94%A8%E6%88%B7%E5%90%8D
    password:%E5%AF%86%E7%A0%81
    pageEncoding gb2312 charset utf-8
    username:%E7%94%A8%E6%88%B7%E5%90%8D
    password:%E5%AF%86%E7%A0%81
    pageEncoding gb2312 charset gb2312
    username:%D3%C3%BB%A7%C3%FB
    password:%C3%DC%C2%EB
    only pageEncoding gb2312
    username:%D3%C3%BB%A7%C3%FB
    password:%C3%DC%C2%EB
    only pageEncoding utf-8
    username:%E7%94%A8%E6%88%B7%E5%90%8D
    password:%E5%AF%86%E7%A0%81
    问:究竟使用那种编码方式进行url编码呢???

    答:jspContentType 优先于 pageEncoding 优先于 htmlContentType 

  • 相关阅读:
    Sparc 10 with Simics
    Perl log 0906
    FPGA flow
    SV program与module的区别
    [基础]Verilog的$readmemx介绍
    [转载] 我对验证的一些理解
    我的书单
    boost 1_45_0 boost\cstdint.hpp 在 VS8下的 bug stdint.h 无法找到头文件
    Inside DllMain
    NoSQL数据库笔谈(转载)
  • 原文地址:https://www.cnblogs.com/Knuth/p/2575317.html
Copyright © 2020-2023  润新知