(30)HttpServletRequest对象和应答HttpServletResponse对象以及动态文件的下载
2011-10-21 14:21
531 查看
11,10,21
课堂的主要内容:
1、服务器端servlet程序中service() 产生应答信息HttpServletResponse对象
客户端浏览器向web服务器发送请求HttpServletRequest对象
老师今天主要讲的是请求HttpServletRequest对象和应答HttpServletResponse对象。
获取请求信息:
(1) 请求行:是GET还是POST方式。Eg:GET/demo/test?usename=xxx HTTP/1.1
(2) 请求消息头:getHeader(“头字段的名称”);方法
(3) getParameter(“参数名”)参数
(4) 消息实体的内容 getInputStream(); -------这两个方法是互斥的,只能选择其一------getReader() ;
流对象.read(); 读取;
应答对象response对象:
(1) 状态行HTTP/1.1 200 ok
Response.setStatus(HttpServletResponse.SC_OK);//可以设置状态行的状态码
(2) 响应消息的消息头:response.setContentType(“text/html”);//设置响应消息头,设置应答内容的类型
Refresh:刷新
response.setHeader(“Refresh”,”2;URL=page.html”);//页面的刷新和跳转的操作
.//下面三个消息头是使浏览器不能进行页面缓存的操作:
response.setDateHeader("Expires",0);
response.setHeader("Cache-Control","no-cache");
response.setHeader("pragma","no-cache");
(3) 消息实体内容:通过输出流对象进行设置。
response.getOutputStream(); 字节输出流对象
response.getWriter();字符输出流对象
2、中文乱码:
分析:
浏览器:
Java程序:中文字符-----unicode
字符输出流对象out.println();赞着某种字符集编码的方式转换成字节数组。
浏览器:字节数组———转换成字符。
3、输出缓冲区:
(1)Servlet程序输出的HTTP消息的响应正文首先被写入到Servlet引擎提供的一个输出缓冲区中,直到输出缓冲区被填满或者Servlet程序已经写入了所有的响应内容,缓冲区中的内容才会被Servlet引擎发送到客户端。
(2)使用输出缓冲区后,Servlet引擎就可以将响应状态行、各响应头和响应正文严格按照HTTP消息的位置顺序进行调整后再输出到客户端。
(3)如果在提交响应到客户端时,输出缓冲区中已经装入了所有的响应内容,Servlet引擎将计算响应正文部分的大小并自动设置Content-Length头字段。
(4)如果在提交响应到客户端时,输出缓冲区中装入的内容只是全部响应内容的一部分, Servlet引擎将使用HTTP 1.1的chunked编码方式(通过设置Transfer-Encoding头字段来指定)传输响应内容。
4、什么是动态文件内容的下载:
(1)只要让超链接的URL地址指向一个exe或zip等类型的文件,用户单击这个超链接就可以将该资源文件下载到客户端。
(2)如果要下载的文件并不真正存在于WEB服务器的文件系统中,而是需要用一个Servlet程序临时在服务器内存中动态产生后再传送到客户端,那该如何实现呢?
5、 如何实现动态文件内容的下载
(1)需要通过HttpServletResponse.setContentType方法设置Content-Type头字段的值为浏览器无法使用某种方式或激活某个程序来处理的MIME类型,例如,“application/octet-stream”或“application/x-msdownload”等。
(2)需要通过HttpServletResponse.setHeader方法设置Content-Disposition头的值为“attachment; filename =文件名”。
(3)应该调用HttpServletResponse.getOutputStream方法返回的ServletOutputStream对象来向客户端写入附件文件内容,而不应使用HttpServletResponse.getWriter方法返回的PrintWriter对象。
6、实现文件下载的代码:
课堂的主要内容:
1、服务器端servlet程序中service() 产生应答信息HttpServletResponse对象
客户端浏览器向web服务器发送请求HttpServletRequest对象
老师今天主要讲的是请求HttpServletRequest对象和应答HttpServletResponse对象。
获取请求信息:
(1) 请求行:是GET还是POST方式。Eg:GET/demo/test?usename=xxx HTTP/1.1
(2) 请求消息头:getHeader(“头字段的名称”);方法
(3) getParameter(“参数名”)参数
(4) 消息实体的内容 getInputStream(); -------这两个方法是互斥的,只能选择其一------getReader() ;
流对象.read(); 读取;
应答对象response对象:
(1) 状态行HTTP/1.1 200 ok
Response.setStatus(HttpServletResponse.SC_OK);//可以设置状态行的状态码
(2) 响应消息的消息头:response.setContentType(“text/html”);//设置响应消息头,设置应答内容的类型
Refresh:刷新
response.setHeader(“Refresh”,”2;URL=page.html”);//页面的刷新和跳转的操作
.//下面三个消息头是使浏览器不能进行页面缓存的操作:
response.setDateHeader("Expires",0);
response.setHeader("Cache-Control","no-cache");
response.setHeader("pragma","no-cache");
(3) 消息实体内容:通过输出流对象进行设置。
response.getOutputStream(); 字节输出流对象
response.getWriter();字符输出流对象
2、中文乱码:
分析:
浏览器:
Java程序:中文字符-----unicode
字符输出流对象out.println();赞着某种字符集编码的方式转换成字节数组。
浏览器:字节数组———转换成字符。
3、输出缓冲区:
(1)Servlet程序输出的HTTP消息的响应正文首先被写入到Servlet引擎提供的一个输出缓冲区中,直到输出缓冲区被填满或者Servlet程序已经写入了所有的响应内容,缓冲区中的内容才会被Servlet引擎发送到客户端。
(2)使用输出缓冲区后,Servlet引擎就可以将响应状态行、各响应头和响应正文严格按照HTTP消息的位置顺序进行调整后再输出到客户端。
(3)如果在提交响应到客户端时,输出缓冲区中已经装入了所有的响应内容,Servlet引擎将计算响应正文部分的大小并自动设置Content-Length头字段。
(4)如果在提交响应到客户端时,输出缓冲区中装入的内容只是全部响应内容的一部分, Servlet引擎将使用HTTP 1.1的chunked编码方式(通过设置Transfer-Encoding头字段来指定)传输响应内容。
4、什么是动态文件内容的下载:
(1)只要让超链接的URL地址指向一个exe或zip等类型的文件,用户单击这个超链接就可以将该资源文件下载到客户端。
(2)如果要下载的文件并不真正存在于WEB服务器的文件系统中,而是需要用一个Servlet程序临时在服务器内存中动态产生后再传送到客户端,那该如何实现呢?
5、 如何实现动态文件内容的下载
(1)需要通过HttpServletResponse.setContentType方法设置Content-Type头字段的值为浏览器无法使用某种方式或激活某个程序来处理的MIME类型,例如,“application/octet-stream”或“application/x-msdownload”等。
(2)需要通过HttpServletResponse.setHeader方法设置Content-Disposition头的值为“attachment; filename =文件名”。
(3)应该调用HttpServletResponse.getOutputStream方法返回的ServletOutputStream对象来向客户端写入附件文件内容,而不应使用HttpServletResponse.getWriter方法返回的PrintWriter对象。
6、实现文件下载的代码:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/x-msdownload"); response.addHeader("Content-Disposition","attachment;filename=aa.txt"); ServletOutputStream sos=response.getOutputStream(); sos.write("hello".getBytes());//动态生成需要下载的内容 sos.close(); }
相关文章推荐
- HttpServletRequest对象请求转发和HttpServletResponse对象请求重定向之间的区别
- servlet中的HttpServletRequest,HttpServletResponse对象以及service 和 doXX方法区别
- springmvc 从本地线程获取HttpServletRequest , HttpServletResponse 对象
- 使用拦截器获取HttpServletResponse 对象,HttpServletRequest对象
- Struts2:在Action类中获得HttpServletResponse,HttpServletRequest对象的四种方法
- httpServletRequest对象、filter、servlet、servlet容器、catalina、tomcat、以及web容器之间的关系
- HttpServletRequest和 HttpServletResponse对象的一些使用
- 在Action类中获得HttpServletResponse,HttpServletRequest对象的方法
- HttpServletRequest和HttpServletResponse对象介绍
- webwork中的action如何取HttpServletRequest和HttpServletResponse对象
- HttpServletRequest和ServletRequest的区别以及HttpServletRequest对象方法的用法
- JavaWeb学习笔记--HttpServletRequest、HttpServletResponse对象常用方法
- HttpServletRequest和ServletRequest的区别以及HttpServletRequest对象方法的用法
- HttpServletRequest中直接获取实体对象
- Ajax XMLHttpRequest对象的三个属性以及open和send方法
- javaweb学习总结(十)——HttpServletRequest对象(一)
- Fix The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 b
- HttpServletRequest对象方法的用法
- servlet学习六--HttpServletRequest对象学习
- JavaWeb ( HttpServletRequest,HttpServletResponse)