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. sdoi 2017 r1游记

    第一次参加省选... 不过幸亏我参加过WC和THUWC,还是有些经验的. 经验就是:多拿部分分(不过话说我的部分分大部分都丢了). D1: 第一题没有预处理斐波那契数列的幂,算复杂度算错了...丢了4 ...

  2. [JSOI2008]最大数 线段树解法

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作 ...

  3. parseInt()详解

    主要解释下面的计算方法: parseInt("10"); //返回 10 parseInt("19",10); //返回 19 (10+9) parseInt( ...

  4. Angular入门教程二

    4 功能介绍 4.1数据绑定 AngularJS的双向数据绑定,意味着你可以在Mode(JS)中改变数据,而这些变动立刻就会自动出现在View上,反之亦然.即:一方面可以做到model变化驱动了DOM ...

  5. 已有Web项目添加Maven支持

    IDE:MyEclipse 当我们在现有的Web开发项目中集成 Maven 的时候,需要修改以下几个地方: 1.将以下代码拷贝到工程根路径下的 .project 文件中的 <buildSpec& ...

  6. 工具Sequel Pro简介

    从图中可以看到,sequel工作界面主要分成三部分,左边侧边显示的是当前所连接的数据库中存在的数据表,右侧上半部分则是用于写sql的地方,在Mac环境下按command+R键会执行你所写的sql,右侧 ...

  7. xfs参数简介

    age_buffer_centisecs age_buffer_centisecs:(Min: 100  Default: 1500  Max: 720000) 多长时间设置为脏数据 xfsbufd_ ...

  8. linux整个日志目录查询记录

    在linux下面需要查看整个目录的日志,搜索用户的一个行为.因为不知道具体是那一天,一个个的查询也可以,但是太麻烦.可以用过下面的命令来实现: rep -iRl  "关键字" ./ ...

  9. 从golang-gin-realworld-example-app项目学写httpapi (八)

    https://github.com/gothinkster/golang-gin-realworld-example-app/blob/master/common/unit_test.go 单元测试 ...

  10. Linux下tomcat端口、自启问题

    一.防火墙开放8080端口命令: 以下命令只针对 CentOs 7 以上版本,CentOS升级到7之后,使用firewalld代 替了原来的iptables: 启动: # systemctl star ...