Java中关于Servlet中请求中文乱码及文件下载
1,Servlet请求响应中文乱码问题
package com.demo.servlet;
import java.io.PrintWriter;
import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class Demo5Servlet extends HttpServlet { @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*
* 关于重定向,Servlet封装了sendRedirect方法 则sendRedirect方法的底层其实是两步
* 第一步是设置响应状态码为302
* 第二步是设置响应头的location属性值为需要跳转到的url
*/
resp.setStatus(302);
resp.setHeader("location", "/ServletDemo/demo2");
// 以上两步的效果与以下方法相同
resp.sendRedirect("/ServletDemo/demo2");
// 设置页面自动过5秒种跳转到另一个地址
resp.setHeader("refresh", "5;url=/ServletDemo/demo2");
/*
* Servlet响应中文乱码的问题,主要分两步
* 第一步是当response把中文写入到Tomcat引擎之前,是先把内容写入到response缓冲区的,
* 此时需要告诉response需要以什么样的编码形式写入到缓冲区,即设置setCharacterEncoding();
* 第二步是告诉浏览器以什么样的编码方式读取response响应的信息,即设置setHeader
* 其实第一步不设置,只设置第二步便可起到同样的效果
*/
//告诉response缓冲区将以什么样的编码方式写入
resp.setCharacterEncoding("utf-8");
//行文浏览器以什么样的编码方式解决response响应的内容
resp.setHeader("Content-type", "text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
writer.write("hello");
writer.write("<br/>");
writer.write("你好"); } @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp);
} }
Servlet响应中文乱码
2,Servlet手动实现下载
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function click() {
var href = '/ServletDemo/down?filename=张三.jpg';
href = encodeURI(href);
console.info(href);
location.href = href;
}
</script>
</head>
<body>
<a href="/ServletDemo/down?filename=a.jpg">jpg</a>
<br />
<a href="/ServletDemo/down?filename=a.mp3">mp3</a>
<br />
<a href="/ServletDemo/down?filename=a.flv">flv</a>
<br />
<a href="/ServletDemo/down?filename=a.mp4">mp4</a>
<br />
<a href="/ServletDemo/down?filename=a.txt">txt</a>
<br />
<a href="/ServletDemo/down?filename=a.zip">zip</a>
<br />
<a href="javascript:click()">张三</a> </body>
</html>
Servlet手动下载前端
package com.demo.servlet; import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
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 DownServlet extends HttpServlet { @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String filename = req.getParameter("filename");// 获取所需要下载的文件名
String oldFileName = filename;// 之所以声明一个oldFileName是为了服务器需要根据这个文件名字找到相对应的文件
System.out.println(filename);
String agent = req.getHeader("User-Agent");// 获取客户端浏览器版本
//根据浏览器版本对所要下载的文件名称进行编码,以便在下载的时候正确显示文件名称
if (agent.contains("MSIE")) {
// IE浏览器
filename = URLEncoder.encode(filename, "utf-8");
filename = filename.replace("+", " ");
} else if (agent.contains("Firefox")) {
// 火狐浏览器
BASE64Encoder base64Encoder = new BASE64Encoder();
filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
} else {
// 其它浏览器
filename = URLEncoder.encode(filename, "utf-8");
}
String path = this.getServletContext().getRealPath("download/" + oldFileName);// 获取所下载的资源的绝对路径
// 设置要下载的文件类型,通过文件名获取文件的MIME类型
resp.setContentType(this.getServletContext().getMimeType(filename));
// 告诉浏览器别直接打开文件,而是以下载的形式保存文件
resp.setHeader("Content-Disposition", "attachment;filename=" + filename);
InputStream input = new FileInputStream(path);// 将文件封装输入流
ServletOutputStream output = resp.getOutputStream();// 获取response的输入流对象
int len = 0;// 读取到的字节长度
byte[] buffer = new byte[1024];// 读取到的缓冲区
while ((len = input.read(buffer)) > 0) {
output.write(buffer, 0, len);// 读取缓冲区的字节到输出流
}
input.close();
output.close(); } @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp);
} }
Servlet手动下载后端
Java中关于Servlet中请求中文乱码及文件下载的更多相关文章
- 尚硅谷面试第一季-09SpringMVC中如何解决POST请求中文乱码问题GET的又如何处理呢
目录结构: 关键代码: web.xml <filter> <filter-name>CharacterEncodingFilter</filter-name> &l ...
- Spring MVC中如何解决POST请求中文乱码问题,GET的又如何处理呢
在web.xml中配置过滤器 GET请求乱码解决: 在Tomcat中service.xml中
- 关于java代码提交HTTP POST请求中文乱码的解决方法
首先说明下这些只是根据我工作常用经验的总结,可能不一定完全对,也不一定全面,但却是最通用的. JAVA里HTTP提交方式 httpurlconnection:jdk里自带的 httpclient:ap ...
- Java -- 通过 URLConnection 进行http请求中文乱码
对writer和reader指定字符集 out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "utf-8 ...
- Java Web之Servlet中response、request乱码问题解决
Java Web之Servlet中response.request乱码问题解决 一.request请求参数出现的乱码问题 get请求: get请求的参数是在url后面提交过来的,也就是在请求行中, ...
- 解决ubuntu中zip解压的中文乱码问题
转自解决ubuntu中zip解压的中文乱码问题 在我的ubuntu12.10中,发现显示中文基本都是正常的,只有在解压windows传过来的zip文件时,才会出现乱码.所以,我用另一个方法解决中文乱码 ...
- python基础系列教程——Python中的编码问题,中文乱码问题
python基础系列教程——Python中的编码问题,中文乱码问题 如果不声明编码,则中文会报错,即使是注释也会报错. # -*- coding: UTF-8 -*- 或者 #coding=utf-8 ...
- 一句python,一句R︱python中的字符串操作、中文乱码、NaN情况
一句python,一句R︱python中的字符串操作.中文乱码.NaN情况 先学了R,最近刚刚上手Python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句pytho ...
- JSP/ Servlet常见的中文乱码原因
在开发中,我们经常遇到中文乱码的问题,比方: &浏览器中看到的 Jsp/Servlet 页面中的汉字成了 '?' ? &浏览器中看到的 Servlet 页面中的汉字都成了乱码 &a ...
随机推荐
- laravel开发之-安装汉化语言包
第一种方法: 1.输入命令:composer require "overtrue/laravel-lang:dev-master" 2.将config/app.php中命令“Ill ...
- 002Conditional条件化创建bean
01.条件化配置bean @Bean @Conditional(MagicExistsCondition.class)---->条件化创建bean public MagicBean magicB ...
- logback配置文件---logback.xml详解
一.参考文档 1.官方文档 http://logback.qos.ch/documentation.html 2.博客文档 http://www.cnblogs.com/warking/p/57103 ...
- ODP.Net Tips
Overview Oracle Data Provider for .NET是Oracle 提供的.Net版本的数据库连接组件.下载路径. 使用的核心DLL是Oracle.DataAccess.dll ...
- 公司网络问题 & Caused by: org.gradle.internal.resource.transport.http.HttpRequestException
问题 公司网络问题,总是无法成功下载库,回到家就可以. Caused by: org.gradle.internal.resource.transport.http.HttpRequestExcept ...
- win7 远程连接服务器出现身份验证错误,且找不到加密Oracle修正
用远程桌面连接登录服务器,结果,弹出一个错误的提示框:发生身份验证错误,要求的函数不受支持. 然后在网上找了相关的教程,基本上所有的方法都是如下所示: 策略路径:"计算机配置"-& ...
- Ubuntu 搭建Web服务器(MySQL+PHP+Apache)详细教程
Ubuntu 搭建Web服务器(MySQL+PHP+Apache)详细教程 看了好多人的博客,有的不全 or 有问题,整理了一下,适合小白 新手先整理几个小问题 1.为啥使用 Linux 搭建服务器? ...
- react native学习资料
一:基础学习: react-native中文文档(react native中文网,人工翻译,官网完全同步)http://react-native.cn/docs/getting-started.htm ...
- SQL Server ->> 获取服务器名字和SQL SERVER实例名的几种函数
SELECT @@SERVERNAME as [@@SERVERNAME], SERVERPROPERTY('MachineName') MachineName, SERVERPROPERTY('In ...
- 乘风破浪:LeetCode真题_012_Integer to Roman
乘风破浪:LeetCode真题_012_Integer to Roman 一.前言 经过了前面的思维训练,我们在某些方面有了一定的提高,但是对于实际的问题,要在短时间内得到答案,还是需要我们多多的练习 ...