项目_过滤器Filter解决中文乱码

java中Filter过滤器处理中文乱码的方法 java中Filter过滤器处理中文乱码的方法,需要的朋友可以参考一下 立即下载

过滤器Filter解决中文乱码

0、前言

最近上实训课,老师要求用原生的Web技术来开发后端数据接口。讲真啊,自从用了框架,就好久没有用这些基础的技术了,虽然原理都是相同,只是用法不同而已。

怎么说呢?我觉得基础还是很重要的,框架是高度封装的,用的时候确实爽,但是一旦报错,不知道原理的话,更难定位和解决,所以我个人认为复习基础不但有助于理解框架的原理的,DEBUG的时候也能更加得心应手。

场景:现在有一个数据接口,查询出学生的分页列表,但是显示浏览器上会有乱码,接下来我们给出几种解决方式。


1、解决方法

1.1、方法1

在控制层的每个Servlet类的doPost或者doGet方法中加入以下两行代码即可。

response.setCharacterEncoding("utf-8");
response.setHeader("Content-Type", "textml;charset=utf-8");

在这里插入图片描述

1.2、方法2

使用过滤器解决。

在这里插入图片描述

EncodingFilter.java代码如下:

package edu.zhku.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 过滤器:当访问服务器时,过滤器将请求拦截下来执行一些特殊的操作,类似于净水器。
 * 一般用于完成通用的操作
 * 
 * @author Zhang
 * 
 */
public class EncodingFilter implements Filter {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * 每一次请求被拦截资源时,会执行。执行多次
	 */
	@Override
	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain filterChain) throws IOException, ServletException {
		// 将父接口转为子接口
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) resp;
		// 获取请求方法
		String method = request.getMethod();
		// 解决post请求中文数据乱码问题
		if (method.equalsIgnoreCase("post")) {
			request.setCharacterEncoding("utf-8");
		}
		// 处理响应乱码
		response.setContentType("text/html;charset=utf-8");

		// 放行请求
		filterChain.doFilter(request, response);
	}

	/**
	 * 在服务器启动后,会创建Filter对象,然后调用init方法。
	 * 只执行一次,可用于加载资源
	 */
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {

	}
}

web.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
	<display-name></display-name>

	<servlet>
		<servlet-name>UserLoginServlet</servlet-name>
		<servlet-class>edu.zhku.servlet.UserLoginServlet</servlet-class>
	</servlet>
	<servlet>
		<servlet-name>FindUserListByPage</servlet-name>
		<servlet-class>edu.zhku.servlet.FindUserListByPage</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>UserLoginServlet</servlet-name>
		<url-pattern>/userLoginServlet</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>FindUserListByPage</servlet-name>
		<url-pattern>/findUserListByPage</url-pattern>
	</servlet-mapping>

	<filter>
		<filter-name>EncodingFilter</filter-name>
		<filter-class>edu.zhku.filter.EncodingFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>EncodingFilter</filter-name>
		<!-- 拦截路径 ,每次访问都会执行名为“EncodingFilter”的过滤器 -->
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

</web-app>

1.3、方法3

方法3也是使用过滤器,方法2是使用xml配置的方式。另外我们也可以使用注解的方式,使用注解后就不用配置xml了。

在类上使用注解标注。

@WebFilter("/*")
public class EncodingFilter implements Filter{
    
}

将EncodingFilter.java代码修改如下:

package edu.zhku.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 拦截路径 /*,即拦截所有
 * @author Zhang
 */
@WebFilter("/*")	//注解
public class EncodingFilter implements Filter {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * 每一次请求被拦截资源时,会执行。执行多次
	 */
	@Override
	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain filterChain) throws IOException, ServletException {
		// 将父接口转为子接口
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) resp;
		// 获取请求方法
		String method = request.getMethod();
		// 解决post请求中文数据乱码问题
		if (method.equalsIgnoreCase("post")) {
			request.setCharacterEncoding("utf-8");
		}
		// 处理响应乱码
		response.setContentType("text/html;charset=utf-8");

		// 放行请求
		filterChain.doFilter(request, response);
	}

	/**
	 * 在服务器启动后,会创建Filter对象,然后调用init方法。 只执行一次,可用于加载资源
	 */
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {

	}
}

耕地质量评价软件实操指南:如何用Excel+ArcGIS一键生成土壤普查报告(附避坑技巧) 本文提供了一套融合Excel数据处理与ArcGIS空间分析的耕地质量评价实战工作流。详细讲解了从数据规范化预处理、高效数据桥接,到在ArcGIS中实现指标评分、综合指数计算与等级划分的全流程,旨在帮助土壤普查工作者大幅提升报告生成效率与准确性,并分享了关键的避坑技巧。 阅读详情

相关推荐

DRAM刷新refresh相关知识归类-基础小知识(三)

RAM每一位数据都是通过芯片内的一个小电容充电(或低电平)存储的。但随着时间的推移,电容逐渐失去电荷。为避免丢失存储的数据,必须定期刷新以将电荷(如果存在)恢复到其原始级别。此刷新过程包括读取每个位的值,然后将其写回。在此“刷新”期间,内存被占用,无法执行加载或存储位等正常操作。知道了应该这么做,但怎么去做以及有什么办法更有效率去做,就是接下来要整理的内容。

Paul 安的博客 1万+

过滤器处理中文乱码问题

将字符集配置到过滤器的初始化参数中 在Web.xml文件中对过滤器进行配置,配置如下: <filter> <filter-name>characterEncodingFilter</filter-name><!--过滤器名称自定义--> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>&l

weixin_52511733的博客 484

U24时钟信号上升下降沿出现非单调性--简单分析

交换机U24时钟信号上升下降沿出现非单调性--简单分析

qq_45185504的博客 1131

使用过滤器(Filter)解决乱码问题

使用过滤器解决中文乱码问题 一:常规方法 (1)Post提交方式 1.第一种用法: 使用xml配置文件 //配置文件,在web.xml中写入如下代码 MyFilterConfig com.zzz.MyFilterConfig encoding UTF-8 //在Servlet中写入如下代码 request.s

Dylancy的博客 4977

UNet 改进(27):结合SCSE注意力机制的UNet网络实现

本文介绍了一种结合SCSE注意力机制的改进UNet网络架构。该网络在保持UNet经典编码器-解码器结构基础上,通过在每层添加SCSEBlock模块,融合了通道注意力和空间注意力机制。通道注意力通过全局池化和1×1卷积生成通道权重,空间注意力则产生空间权重图,二者相加增强关键特征响应。该设计具有以下优势:1)保持原始UNet的多尺度特征提取能力;2)通过注意力机制提升对重要区域的关注度;3)计算效率高,仅增加少量参数。测试显示网络能保持输入输出分辨率不变,适用于医学图像分割等像素级预测任务。完整代码实现了5层

2401_82355416的博客 415

AIO-1126-JD4(RV1126)蓝牙通讯(BLE)

AIO-1126-JD4采用了正基科技推出的一款集成WiFi、蓝牙功能的模组AP6236,支持高速(HS)功能的蓝牙 4.0,集成了 1.5 类功率放大器(PA),并支持低功耗蓝牙(BLE)。提到正基就不得不提下博通。博通和正基是芯片技术与模块制造方面的合作关系,正基科技是中国台湾的公司,在无线通信模块领域有一定的市场份额,博通则是全球领先的有线和无线通信半导体公司。正基把包含博通关键IP的核心芯片和自家的射频部分等封装在一起,即SIP(System In Package)。

w1820020635的博客 1121

过滤器解决全局乱码问题

第二种仅仅是发送的浏览器的内容是UTF-8编码的,至于浏览器是用哪种编码方式显示不管。所以当浏览器的显示编码方式不是UTF-8的时候,就会看到乱码,需要手动再进行一次设置。原文链接https//blog.youkuaiyun.com/m0_37668842/article/details/102778647。第一种不仅发送到浏览器的内容会使用UTF-8编码,而且还通知浏览器使用UTF-8编码方式进行显示。所以总能正常显示中文。即服务端用utf编码,并且告诉浏览器用utf-8的编码显示。......

weixin_47967194的博客 430

Claude Code、Codex、Gemini CLI、OpenCode 和 OpenClaw 配置管理太麻烦?试试这个统一管理工具

还在为 Claude Code、Codex、Gemini CLI 等 AI CLI 配置烦恼?🤯 这款桌面工具支持五大助手统一管理,一键切换 50+ 服务商,MCP 和 Skills 集中管理 🛠️,跨平台支持,让你的 AI 编程更高效 ⚡

XiaoqiangClub的博客 913

Filter初步认识,解决中文乱码

Servlet学习——Filter初步认识,解决中文乱码

while(true){ study } 1204

5.6华为OD机试真题 新系统 - 匹配命令行前缀关键字 (Java/Py/C/C++/Js/Go)

5.6华为OD机试真题 新系统 - 匹配命令行前缀关键字本文整理华为 OD 机试新系统机考真题库,涵盖高频考点精析与完整题目内容,提供 C 语言、Java、C++、Python、Go、JavaScript 多语言源码实现,搭配详细解题思路讲解,并支持在线 OJ 刷题练习,助力高效备考华为 OD 机试新系统。

算法大师! 2125

利用插件扩展 Qt 应用程序

不仅 Qt 本身可以通过插件进行扩展,而且 Qt 应用程序也可以通过插件来扩展,这需要应用程序使用 `QPluginLoader` 检测和加载插件。

青春不老,奋斗不止! 1万+

Spring Cloud Gateway 响应出现中文乱码?

前言: 记一次 Gateway 读取响应内容时导致中文乱码。 问题还是比较严重的,因为这个问题导致系统全局中文出现偶发性乱码,经过 debug 追踪,最终确认了是在 gateway 获取响应内容重写时出现了问题。 场景复现: 先看代码,方法的功能是读取响应结果,并记录响应结果。 /** * 记录响应日志 * * @param exchange * @return */ private ServerHttpResponseDecorator logR

For-的博客 5200

软考中级-软件设计师 23种设计模式(最详细解析!!)

软考中级-软件设计师 23种设计模式

片言可决讼,半纸能缚龙 2万+

通过过滤器Filter解决web项目的中文乱码问题

事先说明:这里的问题解决是针对web项目中怎么通过Filter过滤器解决当前项目下所有Servlet资源的中文乱码问题。 一是post请求出现的中文乱码; 二是respose输出字符流出现的中文乱码问题; 一、配置Filter的拦截路径 为了能过使得当前项目下所有的Servlet资源都能解决乱码问题,我们配置了Filter的注解为@WebFilter("/"),“/”代表当前项目的所有Ser...

干嘛卷来卷去的博客 3051

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SSH项目中,解决中文请求参数乱码,Filter过滤器不起作用的问题

1.web.xml配置如下(必须放在Struts2配置之前) <!-- 字符编码过滤器配置--> <filter> <filter-name>CharEncodingFilter</filter-name> <filter-class>com.crm.tools.CharEncodingFilter</f...

aipyt6002的博客 237

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

在jsp中过滤器的用法(简单解决中文乱码问题)

一.配置web.xml文件,形势如下: filter com.filter filter /* 注意:1.filter与filter-mapping节点下的filter-name一定要一致。      2.filter-class节点指的是过滤器的pa

ImKing 1310

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Javaweb之Filter案例练习-项目全局编码过滤器

Filter全局编码过滤器这篇来做一个Filter在全局编码过滤器练习,这篇新建一个web项目来做练习。web项目创建先创建一个叫GlobalFilter的web动态项目,把前面文章出现过的login.jsp复制过来,改成如下代码。<%@pagelanguage="java"contentType="text/html; charset=UTF-8" page...

byj4352的博客 202

JavaWeb学习-Filter-5-Filter实现全局编码过滤器

这篇来做一个Filter在全局编码过滤器练习,这篇新建一个web项目来做练习。 web项目创建 先创建一个叫GlobalFilter的web动态项目,把前面文章出现过的login.jsp复制过来,改成如下代码。 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UT...

Anthony_tester的博客 1752

Servlet Filter实现全站统一编码,解决中文乱码问题

在开发 Web 项目时,解决中文乱码问题是不可避免的。在前面所学的知识中,解决乱码的通常做法是在 Servlet 程序中设置编码方式,但是,当多个 Servlet 程序都需要设置编码方式时,就会书写大量重复的代码。

unber的博客 1184

过滤器之中文乱码解决

在我们做项目时,总会遇到一些乱码问题 ,为了解决中文乱码的问题 我们通常会在Servlet控制器中增加这么一句话 :request.setCharacterEncoding("utf-8"); 使得我们在加载项目的时候不至于会感到由于该死的外国人设计的程序语言 总有那么多弊端,会让我们的国语造成乱码问题。 哈哈 玩笑了  !!!想想,要是在一个大项目中  有很多个Servlet  我们是不是在每一个Servlet中都要去增加这段代码呢?这样就造成了不必要的冗余,我们为什么不用Servlet提供给我们的很好的

JeelonXu.feng 1万+

java过滤器解决乱码_过滤器解决JavaWeb里面的中文乱码问题为什么失效?

我在javaWeb项目里面的src目录下定义了一个Filter过滤器,用来解决中文乱码问题,又定义了一个类实现HttpServletRequestWrapper接口来实现request得到请求参数的方法的各种增强。但是却实现不了.气人的是,我的一个测试类用post和get提交都可以解决中文乱码,但是唯独login.servlet不行。断点跟进去发现,过滤器处理的时候,要么找不到增强request方...

weixin_31556371的博客 474

Filter解决中文乱码问题

JavaWeb中交中文经常会出现乱码,想必各位都遇到过吧。今天跟大家聊聊一种比较常用的方式——Filter过滤。Filter就是起到一个过滤器的作用,当提交或者获取信息的时候,都会经过Filter,然后Filter会将你传递的信息转换成你设置好的编码格式,从而避免一些中文乱码的情况。 使用Filter过滤需要添加两部分代码,一是配置文件里关于Filter的配置信息;另一个就是Filter里面的过...

weixin_33937778的博客 148

16、Filter、Listener

文章目录FilterListener Filter Filter:过滤器,用来过滤网站的请求。 处理中文乱码(截止目前我们都是在每个Servlet上处理POST请求的中文乱码,和Response响应的中文乱码) 坏的请求等 创建一个Maven的Web项目。 pom.xml <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifact

ShawnYue_08的博客 250

JSP的几种中文解决方案

学习J2EE至今,项目也只做了两个,中途遇到一些问题,最多的可能要数中文显示及插入数据库的中文问题。现总结如下:(一)定义中文转换方法:新建JSP页面,命名为toChinese.jsp 也可以是别的;定义方法为:String toChinese(String str) {  String rs = null;  byte[] temp;  try {    te

阿影的黄金时代 1276

解决Spring框架新增内容时中文乱码问题

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

weixin_44246032的博客 302
上一篇: 计算机基础_程序是怎样跑起来的_06_亲自尝试压缩数据
下一篇: MySQL_3_DQL语句和约束
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

窝在角落里学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值