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 

原文地址:https://www.cnblogs.com/Knuth/p/2575317.html