HttpServletResponse对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpServletResponse对象相关的知识,希望对你有一定的参考价值。
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。
request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了。
HttpServletResponse对象是服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。
//用outputStream输出中文数据的问题
//输出gb2312的数据,没有问题 public void test1(HttpServletResponse response) throws IOException{ String data = "中国"; OutputStream out = response.getOutputStream(); out.write(data.getBytes()); }
//输出UTF-8的数据,有问题,需要控制浏览器以utf-8打开 public void test2(HttpServletResponse response) throws IOException{ //<meta> 模似一个http响应头 //使用http协议控制浏览器以utf-8打开下面发送的数据 response.setHeader("content-type", "text/html;charset=UTF-8");//注意是分号,不能是逗号 String data = "中国"; OutputStream out = response.getOutputStream(); out.write(data.getBytes("UTF-8"));//输出的数据为了让不同国家的人都能看到,一般用utf-8码表写给浏览器,这样必须要通知浏览器以相同码表打开才不会乱码。 }
//用<meta> 模似一个http响应头,控制浏览器以UTF-8打开数据 public void test3(HttpServletResponse response) throws IOException{ response.getOutputStream().write("<meta http-equiv=‘content-type‘ content=‘text/html;charset=UTF-8‘>".getBytes()); String data = "中国"; OutputStream out = response.getOutputStream(); out.write(data.getBytes("UTF-8")); }
//用Writer输出中文数据,服务器使用的是ISO8859-1码表
注意与OutPutStream的不同。
使用字符流writer时,必须要设置两个码表,避免乱码
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
public void test1(HttpServletResponse response) throws IOException{ //更改response的码表,通知服务器用UTF-8码表去取response中的数据,然后写给客户机 response.setCharacterEncoding("UTF-8"); //通知浏览器以UTF-8码表打开回送的数据 //response.setHeader("content-type", "text/html;charset=UTF-8"); response.setContentType("text/html;charset=UTF-8");//与上一句功能一样。写哪个都可以。 String data = "中国"; PrintWriter writer = response.getWriter(); writer.write(data); }
public void test2(HttpServletResponse response) throws IOException{ //这句话调用后,相当于把response.setCharacterEncoding("UTF-8"); 也设好了 response.setContentType("text/html;charset=UTF-8"); String data = "中国"; PrintWriter writer = response.getWriter(); writer.write(data); }
//实现中文文件下载
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.获取需要下载的文件 String path = this.getServletContext().getRealPath("/download/日本妞.jpg");//download目录位于WebRoot根目录 String filename = path.substring(path.lastIndexOf("\\")+1); //2.通知浏览器以下载方式打开 (下载的中文文件名必须要给过URL编码) response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(filename, "UTF-8")); //3.向浏览器写出数据 FileInputStream in = null; try{ OutputStream out = response.getOutputStream(); in = new FileInputStream(path); byte buffer[] = new byte[1024]; int len = 0; while((len=in.read(buffer))>0){ out.write(buffer,0,len); } }finally{ if(in!=null){ in.close(); } } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }
以上是关于HttpServletResponse对象的主要内容,如果未能解决你的问题,请参考以下文章