服务器启动 每一个servlet 创建一个对象
浏览器启动 每一个请求 创建 request response 对象 请求结束 立即销毁
response
response 有两个方法:
- getOutputStream 二进制数据
- 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
这篇文章 非常好!!!
答:jspContentType 优先于 pageEncoding 优先于 htmlContentType