通过response 设置响应体:
响应体设置文本:
PrintWriter getWriter()
获得字符流,通过字符流的write(String s)方法可以将字符串设置到response 缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览 器端。
关于设置中文的乱码问题
原因:response缓冲区的默认编码是iso8859-1,此码表中没有中文,可以通过 response的setCharacterEncoding(String charset) 设置response的编码,
但我们发现客户端还是不能正常显示文字。
原因:我们将response缓冲区的编码设置成UTF-8,但浏览器的默认编码是本地系统的编码,因为我们都是中文系统,所以客户端浏览器的默认编码是GBK,我们可以手动修改浏览器的编码是UTF-8。
我们还可以在代码中指定浏览器解析页面的编码方式,通过response的setContentType(String type)方法指定页面解析时的编码是UTF-8。
response.setContentType("text/html;charset=UTF-8");
上面的代码不仅可以指定浏览器解析页面时的编码,同时也内含 setCharacterEncoding的功能,所以在实际开发中只要编写 response.setContentType("text/html;charset=UTF-8"),就可以解决页面输出中文乱码问题。
package com.oracle; import java.io.FileInputStream; import java.io.IOException; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import sun.misc.BASE64Encoder; public class DownloadServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //服务器获取文件名(文件名是中文的话,获取的时候就成了乱码了) String filename = request.getParameter("file");//??.png //get请求中---解决文件名中文乱码问题 filename =new String(filename.getBytes("ISO-8859-1"),"UTF-8");//乱码.png //获取User-Agent获取客户端浏览器到底是哪个浏览器 String agent=request.getHeader("User-Agent"); String filenameEncoder=""; if (agent.contains("MSIE")) { // IE浏览器 filenameEncoder= URLEncoder.encode(filename, "utf-8"); filenameEncoder= filenameEncoder.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐浏览器 BASE64Encoder base64Encoder = new BASE64Encoder(); filenameEncoder= "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else { // 其它浏览器 filenameEncoder= URLEncoder.encode(filename, "utf-8"); } //告知浏览器文件的类型(响应体) response.setContentType(getServletContext().getMimeType(filename)); //告知浏览器以附件的方式提供下载功能 而不是解析 response.setHeader("Content-Disposition","attachment;filename="+filenameEncoder); //服务器获取后开始进行复制的程序:获取字节输出流 ServletOutputStream sos = response.getOutputStream(); //获取数据源的绝对路径 String realpath = getServletContext().getRealPath("download/"+filename); //获取字节输入流 FileInputStream fis =new FileInputStream(realpath); //开始复制 byte[] bytes=new byte[1024]; int len=0; while((len=fis.read(bytes))!=-1){ sos.write(bytes, 0, len); } //释放资源 fis.close(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <a href="/WEB02/DownLoadServlet?filename=a.txt" rel="external nofollow" >a.txt</a> <a href="/WEB02/DownLoadServlet?filename=a.wmv" rel="external nofollow" >a.wmv</a> <a href="/WEB02/DownLoadServlet?filename=科比.png" rel="external nofollow" >科比.png</a> <a href="/WEB02/DownLoadServlet?filename=a.zip" rel="external nofollow" >a.zip</a> </body> </html>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
问题内容: 我正在尝试使浏览器下载从ajax响应接收到的pdf文件。 受jquery ajax下载pdf文件启发,我模拟了如下单击/下载事件: 不幸的是,这仅适用于Chrome,不适用于Firefox + IE。当我尝试在最后两个浏览器中触发它时,没有任何反应。 由于从CMS继承,脚本和标记被放置在iframe中,但是我不确定这是否有影响。 关于如何针对所有现代浏览器进行优化的想法? 问题答案:
问题内容: 我正在使用AngularJS和Spring编写应用程序。我想将请求发送到服务器,并将控制器返回的响应下载为文件。在控制器中,我有csv文件的内容(作为字符串),即(1行4列)。将此响应下载为文件的最简单方法是什么? 下面,我发布了我的简化代码。在Spring控制器中: 在javascript(AngularJS)中 我也在尝试(在下面)写入响应流,设置标头,但是在客户端,我总是以字符串
我正在使用AngularJS和Spring编写应用程序。我想向服务器发送请求,并下载控制器返回的响应作为文件。在控制器中,我有csv文件的内容(作为字符串),即<代码>1;2.3.4(1行4列)。将此响应下载为文件的最简单方法是什么? 下面,我发布了我的简化代码。Spring控制器: 在javascript中(AngularJS) 我还试图写入响应流(如下所示),设置标题,但在客户端,我总是以字符
本文向大家介绍JavaEE实现文件下载,包括了JavaEE实现文件下载的使用技巧和注意事项,需要的朋友参考一下 我们先来看一个最简单的文件下载的例子: 该段代码的功能是从服务器端下载图片1.png。目录结构用MyEclipse的package explorer显示如下: 让我们增加一点难度,我们要下载的文件是一个中文名字的文件。由于在http协议中头文件中的东西只能是ASCII字符,因而通
我正在从jsp调用一个endpoint: 它返回对象类型。 来自我想将响应保存在该对象中,以便解析查询结果。 错误: 问:这是保存ResultSet响应的正确方法吗?
我有一些python代码,它使用请求成功地从URL下载图像,并将其保存到中。我想测试一下,它应该做什么。我使用响应来测试JSON文件的获取,但我不确定如何模拟获取文件的行为。 我假设这类似于嘲笑一个标准的响应,就像下面一样,但是我想我忽略了如何将设置为文件... 更新:在Ashafix的评论之后,我正在尝试这个(python 3): 但随后,当我正在测试的代码尝试执行我得到的请求时: 感觉几乎是对
问题内容: 这是其中的代码 返回的响应是一个文件。我希望用户能够将其保存为文件,但是什么也没有发生。我认为服务器返回的响应类型正确,因为在控制台中它说 我想念的是什么?我应该在减速器中做什么? 问题答案: 浏览器技术当前不支持直接从Ajax请求下载文件。解决方法是添加一个隐藏的表单并将其提交到幕后,以使浏览器触发“保存”对话框。 我正在运行标准的Flux实现,因此不确定确切的Redux(Reduc
本文向大家介绍springboot实现文件上传和下载功能,包括了springboot实现文件上传和下载功能的使用技巧和注意事项,需要的朋友参考一下 spring boot 引入”约定大于配置“的概念,实现自动配置,节约了开发人员的开发成本,并且凭借其微服务架构的方式和较少的配置,一出来就占据大片开发人员的芳心。大部分的配置从开发人员可见变成了相对透明了,要想进一步熟悉还需要关注源码。 1.文件上传