请求(doFilter)与响应乱码(BaseController+自定义注解@ContentType(““))集中处理
时间:2022-07-28
本文章向大家介绍请求(doFilter)与响应乱码(BaseController+自定义注解@ContentType(““))集中处理,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.浏览器向服务器发送消息:request,使用过滤器为所有请求:设置 request.setCharacterEncoding(“utf-8”);
此时不修改编码格式的话,tomcat默认是按照编码的,不是utf-8,这样的数据写进数据库就是乱码啦呱~
//浏览器发来服务器消息进行重新编码的编码。
request.setCharacterEncoding("utf-8");
1.1EncodingFilter.java代码
@WebFilter("/*")
public class EncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request =(HttpServletRequest) servletRequest;
request.setCharacterEncoding("utf-8");
filterChain.doFilter(request,servletResponse);
}
@Override
public void destroy() {
}
}
2.服务器向浏览器发送消息:response,使用BaseController进行判断方法是否被自定义注解修饰:设置resp.setContentType(“text/html;charset=utf-8”);
//对服务器发送浏览器消息:用于定义网络文件bai的类型和网页的编码,决定浏览器du将以什么zhi形式、什么编码读取这个文件
resp.setContentType("text/html;charset=utf-8");
2.1自定义注解ContentType 代码
//详情请见:
https://blog.csdn.net/qq_39773004/article/details/108661464?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160048748919725247415269%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=160048748919725247415269&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_blog_default-1-108661464.pc_v2_rank_blog_default&utm_term=%E8%87%AA%E5%AE%9A%E4%B9%89%E6%B3%A8%E8%A7%A3&spm=1018.2118.3001.4187
@Retention(RetentionPolicy.RUNTIME) //被反射读取到 class
@Target(ElementType.METHOD) //应用到方法上
public @interface ContentType {
String value();
int id() default 1;
String name() default "Ellie";
}
2.2BaseController代码
public class BaseController extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if (method.isAnnotationPresent(ContentType.class)){
ContentType contentType = method.getAnnotation(ContentType.class);
String type = contentType.value();//image/jpeg application/json;charset=utf-8
resp.setContentType(type);
}else{
resp.setContentType("text/html;charset=utf-8");
}
}
}
- JSON.stringify(), JSON.parse(), toJSON()方法使用
- compression功能测试
- 源码阅读再来一发:解读RGW中request的处理流程
- 绘制Crushmap分布图-Python
- RGW奇淫技巧-玩转system特权
- 源码走读rgw内置civetweb的参数初始化过程
- 重磅:Flume1-7结合kafka讲解
- 遍历删除List中的元素
- RGW Bucket Shard设计与优化-下
- RGW Bucket Shard设计与优化-中
- 实战phoenix
- WPF/Silverlight中的Command
- RGW Bucket Shard设计与优化-上
- 实弹军演-基于Ceph对象存储的实战兵法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Ubuntu 18.04 通过 Docker 快速部署 Smokeping 2.6.11 教程
- MySQL 8.0新特性 — 函数索引
- Docker快速上手指北(一)【技术创作101训练营】
- leetcode树之二叉搜索树的最近公共祖先
- 【技术创作101训练营】技术角 | 在CentOS 8上使用Nginx 1.18: 基本配置
- Java诊断应用之Arthas实战(技术创作101训练营)
- 突击并发编程JUC系列-数组类型AtomicLongArray
- 个人量化投资体系搭建(一)
- 服务端的 WebAssembly 与 Rust 入门篇
- pImpl
- Flask+requests发起页面请求示例
- 【技术创作101训练营】Git 如何成功配置SSH key连接多个代码平台?
- 深入浅出iOS内存管理-技术创作101训练营
- 聊聊原型 Prototype | 技术创作101训练营
- Excelize 2.3.1 发布,Go 语言 Excel 文档基础库,支持加密表格文档