web学习笔记-httpServletResponse一
2016-05-04 21:05
501 查看
httpServletResponse和HttpServletResquest
简单介绍
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了
HttpServletResponse
博文参考地址javaEE API 1.7下载地址
Fields
Methods
HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法
向客户端发送数据(这是servletResponse类中的方法)
向客户端(浏览器)发送响应头的相关方法
向客户端(浏览器)发送响应状态码的相关方法
HttpServletRespose输出中文
字节流和字符流的区别一个字节是8位二进制。Java中的字符是unicode码,占2个字节,即16位stream结尾都是字节流,reader和writer结尾都是字符流;字符流主要是读取文本文件内容的,可以一个字符一个字符的读取,也可以一行一行的读取文本文件内容。而字节流读取单位为byte.byte作为计算机存储最基本单位,可以用字节流来读取很多其他格式的文件,比如图片视频等等;
使用字符流输出中文
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException { // 设置将字符以"UTF-8"编码输出到客户端浏览器 response.setCharacterEncoding("utf-8"); //通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码 response.setHeader("Content-Type","text/html;charset = utf-8"); String string = "司马啸尘"; response.getWriter().write(string); System.out.println(string); }
在浏览器抓包如下:
使用字节流输出中文
第一种方法: protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException { response.setHeader("content-type", "text/html;charset=UTF-8");//通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码 String string = "司马啸尘"; System.out.println(string); response.getOutputStream().write(string.getBytes("utf-8")); }
第二种方法: protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException { String string = "司马啸尘"; System.out.println(string); response.setContentType("text/html;charset=utf-8") ; //此句代码做了两件事情:1 设定服务器将数据编码时用的码表2.通知浏览器解码用的码表 response.getOutputStream().write(string.getBytes("utf-8")); }
中文文件名的下载
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { //获取文件的路径 String path = getServletContext().getRealPath("/WEB-INF/classes/美女.jpg") ; //默认从工程路径开始 //创建输入流 InputStream is = new FileInputStream(path) ; byte[] bs = new byte[1024] ; 4000 int b = 0 ; //创建输出流对象 ServletOutputStream os = response.getOutputStream() ; //对中文进行编码 //拿到中文的文件名 String name = path.substring(path.lastIndexOf("\\") + 1, path.length()) ; System.out.println(name); //对中文文件名进行编码 name = URLEncoder.encode(name, "utf-8") ; System.out.println("编码后: " + name); //通知浏览器以下载的方式打开文件 response.setHeader("Content-Disposition", "attachment;filename=" + name) ; while((b = is.read(bs)) != -1){ os.write(bs,0,b) ; }
在这个过程中遇到一个错误:
解决办法:
在init方法中填上super.init()系统默认添加有这句话;或者直接删去init方法
然后我们在浏览器就可以下载,抓包如下:
注意:
字符流和字节流不能混用
esponse的输出不是直接输出到页面上,而是返回给服务器,由服务器再返回给浏览器
response产生的字符流和字节流不用关闭,Servlet引擎会帮助关闭.
更多好玩文章: 天意博文
相关文章推荐
- java-WEB中的监听器Lisener
- Python动态类型的学习---引用的理解
- GUI - Web前端开发框架
- Extjs4.0 最新最全视频教程
- 我是运营,我没有假期
- MyEclipse Web Project转Eclipse Dynamic Web Project
- axis备忘
- 创业如何选择WEB开发语言
- 土人系列AS入门教程 -- 对象篇
- DB2数据库的安装
- Erlang实现的一个Web服务器代码实例
- 防止网页脚本病毒执行的方法-from web
- C#实现把指定数据写入串口
- “传奇”图象数据存储方式
- 自学成才的秘密:115个 web Develop 资源
- C#托管堆对象实例包含内容分析
- 修复mysql数据库
- 使用批处理修改web打印设置笔记 适用于IE
- C#实现获取不同对象中名称相同属性的方法
- Apache Web让JSP“动”起来