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中请求中文乱码及文件下载的更多相关文章

  1. 尚硅谷面试第一季-09SpringMVC中如何解决POST请求中文乱码问题GET的又如何处理呢

    目录结构: 关键代码: web.xml <filter> <filter-name>CharacterEncodingFilter</filter-name> &l ...

  2. Spring MVC中如何解决POST请求中文乱码问题,GET的又如何处理呢

    在web.xml中配置过滤器 GET请求乱码解决: 在Tomcat中service.xml中

  3. 关于java代码提交HTTP POST请求中文乱码的解决方法

    首先说明下这些只是根据我工作常用经验的总结,可能不一定完全对,也不一定全面,但却是最通用的. JAVA里HTTP提交方式 httpurlconnection:jdk里自带的 httpclient:ap ...

  4. Java -- 通过 URLConnection 进行http请求中文乱码

    对writer和reader指定字符集 out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "utf-8 ...

  5. Java Web之Servlet中response、request乱码问题解决

    Java Web之Servlet中response.request乱码问题解决   一.request请求参数出现的乱码问题 get请求: get请求的参数是在url后面提交过来的,也就是在请求行中, ...

  6. 解决ubuntu中zip解压的中文乱码问题

    转自解决ubuntu中zip解压的中文乱码问题 在我的ubuntu12.10中,发现显示中文基本都是正常的,只有在解压windows传过来的zip文件时,才会出现乱码.所以,我用另一个方法解决中文乱码 ...

  7. python基础系列教程——Python中的编码问题,中文乱码问题

    python基础系列教程——Python中的编码问题,中文乱码问题 如果不声明编码,则中文会报错,即使是注释也会报错. # -*- coding: UTF-8 -*- 或者 #coding=utf-8 ...

  8. 一句python,一句R︱python中的字符串操作、中文乱码、NaN情况

    一句python,一句R︱python中的字符串操作.中文乱码.NaN情况 先学了R,最近刚刚上手Python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句pytho ...

  9. JSP/ Servlet常见的中文乱码原因

    在开发中,我们经常遇到中文乱码的问题,比方: &浏览器中看到的 Jsp/Servlet 页面中的汉字成了 '?' ?  &浏览器中看到的 Servlet 页面中的汉字都成了乱码  &a ...

随机推荐

  1. 洛谷P4717 【模板】快速沃尔什变换(FWT)

    题意 题目链接 Sol 背板子背板子 #include<bits/stdc++.h> using namespace std; const int MAXN = (1 << 1 ...

  2. Django之Form字段插件

    一.Django内置Form组件:        在使用Django内置的Form组件时,里面包含了许多[字段]和[插件],也就是验证用户输入的请求以及生成显示在前端的HTML.下面介绍一下用法: F ...

  3. 基础架构之spring cloud基础架构

    这篇文章是给公司设计的微服务基础架构,包括架构设计.部署流程.部署架构.开发Tip等等.这里分享出来,如果对看官们有点用,我就非常的高兴了. 首页 2. 架构设计 3. 部署流程 4. 部署架构 5. ...

  4. HiJson工具 && 火狐浏览器中的jsonHandle插件(以及乱码问题的解决)-->来转换json串的格式

    原文:http://blog.csdn.net/cjm2484836553/article/details/72453907 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] ...

  5. 基于Vue的WebApp项目开发(五)

    实现图片分享列表 步骤一:新增图片列表文件photolist.vue <template> <div id="tml"> 图片分享页面 </div&g ...

  6. 2 pygraphviz在windows10 64位下的安装问题(反斜杠的血案)

    可以负责任的说,这篇文档是windows10安装pygraphviz中,在中文技术网站中最新的文档,没有之一.是自己完全结合各种问题,包括调试等,总结出来的. 问题来源:主要是可视化RvNN网络的树结 ...

  7. asp.net mvc4 小问题

    最近在学习mvc4中间出现一些问题.留作记录.. 1.新建立的项目在vs2013中运行后会出现一个长轮询..这个叫browserLink 是vs2013中新加入的东西.至于更多解释.直接百度.. 关闭 ...

  8. mysql 的增删改查

    数据库的基本流程就是先看你的数据库中的库都是哪些:show databases; 然后再进入相应的库进行操作  :  use+进入的库/表 切换路径 查看这个库内的所有的表: show tabales ...

  9. 沉淀,再出发:Docker的功能浅析

    沉淀,再出发:Docker的功能浅析 一.前言 这段时间一直在使用docker,发现docker的技术有很多,从最开始的将自己的程序打包成docker中的镜像,然后上传和下载镜像并使用,再到后来的在集 ...

  10. December 08th 2016 Week 50th Thursday

    Life is a test and this world a place of trial. 人生是一场考试,这个世界就是考场. I have not passed the test yet. I ...