JavaWeb中文乱码问题

javaweb中用过滤器Filter处理所有页面中文乱码问题 文章目录一、项目结构二、过滤器—处理字符编码三、测试servlet四、部署及运行 一、项目结构 写一个过滤器,处理所有页面的字符编码; 写一个servlet,测试过滤器的功能。 二、过滤器—处理字符编码 CharacterFilter.java package net.test.filter; import javax.servlet.*; import javax.servlet.annot... 阅读详情

要想使我们做的网站不出现中文乱码问题要明白出现这个问题都是因为客户端和服务端传递数据时引起的编码不一致问题。数据编码的位置一共有一下几个方面:

数据库方面:数据库方案的编码、数据库数据表的编码

jsp页面的: 每个jsp页面的首行<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>、

jsp和servlet传递的数据:即post和get请求的数据传递

解决第一个问题:

(1)  查看数据库方案的编码方式:show variables like 'character_set_database';

            我们只需要进入到想要查询的数据库方案中执行该语句即可,例如:

              

          修改数据库方案的编码方式:alter database 数据库方案名称  character set utf8;

          

(2)查看数据库的数据表的编码方式:show create table 数据表名

      

        修改数据库的数据表的编码方式:alter table 数据表名 character set utf8;

       

解决第三个问题:

写一个过滤器:

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;

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.HttpServletRequestWrapper;

public class EncodingFilter implements Filter {

	public void init(FilterConfig filterConfig) throws ServletException {

	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {

		// 处理请求乱码
		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
		HttpServletRequest myRequest = new MyRequest(httpServletRequest);

		// 处理响应乱码
		response.setContentType("text/html;charset=utf-8");

		chain.doFilter(myRequest, response);

	}

	public void destroy() {

	}

}

// 自定义request对象
class MyRequest extends HttpServletRequestWrapper {

	private HttpServletRequest request;

	private boolean hasEncode;

	public MyRequest(HttpServletRequest request) {
		super(request);// super必须写
		this.request = request;
	}

	// 对需要增强方法 进行覆盖
	@Override
	public Map getParameterMap() {
		// 先获得请求方式
		String method = request.getMethod();
		if (method.equalsIgnoreCase("post")) {
			// post请求
			try {
				// 处理post乱码
				request.setCharacterEncoding("utf-8");
				return request.getParameterMap();
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
		} else if (method.equalsIgnoreCase("get")) {
			// get请求
			Map<String, String[]> parameterMap = request.getParameterMap();
			if (!hasEncode) { // 确保get手动编码逻辑只运行一次
				for (String parameterName : parameterMap.keySet()) {
					String[] values = parameterMap.get(parameterName);
					if (values != null) {
						for (int i = 0; i < values.length; i++) {
							try {
								// 处理get乱码
								values[i] = new String(
										values[i].getBytes("ISO-8859-1"),
										"utf-8");
							} catch (UnsupportedEncodingException e) {
								e.printStackTrace();
							}
						}
					}
				}
				hasEncode = true;
			}
			return parameterMap;
		}

		return super.getParameterMap();
	}

	@Override
	public String getParameter(String name) {
		Map<String, String[]> parameterMap = getParameterMap();
		String[] values = parameterMap.get(name);
		if (values == null) {
			return null;
		}
		return values[0]; // 取回参数的第一个值
	}

	@Override
	public String[] getParameterValues(String name) {
		Map<String, String[]> parameterMap = getParameterMap();
		String[] values = parameterMap.get(name);
		return values;
	}
}

web.xml配置过滤器:

 <filter>
      <filter-name>EncodingFilter</filter-name>
      <filter-class>com.syh.filter.EncodingFilter</filter-class>
  </filter>
  
  <filter-mapping>
      <filter-name>EncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>


JavaWeb之Response——重定向与解决中文乱码问题 1)HttpServletResponse 概述 我们在创建 Servlet 时会覆盖 service() 方法,或 doGet()/doPost(),这些方法都有两个参数,分别是代表请求的 request 和代表响应 response。(今天我们主要来说说 response) service 方法中的 response 的类型是 ServletResponse,而 doGet/doPost 方法的 response 的类型是 HttpServletResponse,HttpServletRespons 阅读详情

相关推荐

Javaweb 响应字节流输出中文乱码问题

文章目录问题:使用字节流输出,产生了中文乱码?举个栗子原因:存和取用的不是同一个码表解决办法:把存和取的码表统一第一种解决办法:第二种解决办法: (不建议使用,因为不好记)第三种解决办法:第四种解决办法:我们推荐使用的办法案例上述四种解决办法的案例:问题解决后案例:正常输出中文 问题:使用字节流输出,产生了中文乱码? 举个栗子 如下面的形式就会输出中文乱码 public class ResponseDemo1 extends HttpServlet { /** * 演示字节流输出的乱码问

流楚丶格念的博客 4885

别再死记硬背Dijkstra了!用C语言邻接矩阵实现最短路径,我画了张图帮你彻底搞懂

本文通过C语言邻接矩阵实现和动态图解,详细解析了Dijkstra算法的核心原理与应用。从初始化到分步骤迭代,再到完整代码实现,帮助读者彻底理解最短路径算法的执行过程与优化技巧,适用于数据结构学习与算法实践。

weixin_33728268的博客 329

SMIC Memory配置与Library Compiler实战:从lib到db的高效转换

本文详细介绍了SMIC Memory Compiler的配置要点与使用Library Compiler将.lib文件高效转换为.db文件的完整流程。文章深入解析了关键配置参数对性能和面积的影响,并提供了从交互式操作到自动化脚本的实战指南,帮助数字芯片设计工程师顺利完成存储器模型的生成与集成,确保Design Compiler能正确调用。

weixin_28314575的博客 336

【JavaWeb】web乱码总结

web乱码总结:请求 响应 tomcat IDEA-sout html 乱码

Orion 3506

Arduino跑通ssd1306_spi显示屏

代码首先,您需要下载两个库:● Adafruit GFX库,这是核心图形库,提供了一组通用的图形基元(点、线、圆等)。它需要与特定于硬件的库对应。● Adafruit SSD-1306 OLED显示库,这是基于SSD1306驱动程序的OLED显示器的库。解压缩这两个库并将它们添加到Arduino库文件夹中,然后运行Arduino IDE并从OLED库中打开SPI示例。

Leo ICer的博客 1494

HDMI与DisplayPort混搭方案:如何用Xilinx Video PHY Controller实现多协议视频接口转换

本文详细解析了如何利用Xilinx Video PHY Controller IP核实现HDMI与DisplayPort协议转换,涵盖混合视频接口架构设计、GT收发器动态重配置策略及跨协议时钟域处理方案。通过实战案例和配置技巧,帮助开发者构建高性能多协议视频转换系统,适用于医疗影像、工业控制等场景。

weixin_30776273的博客 447

Java Web中文乱码,解决方法!!

本编文章列举了Java Web编程中所有可能导致中文乱码的问题以及解决方法

m0_70470868的博客 1万+

【图像超分】论文复现:Pytorch实现SRCNN!保姆级复现教程!提供完整代码和最优权重模型(x2、x3、x4)!科研级论文曲线图!计算平均PSNR和SSIM!代码Windows和Linux都可用!

由于很多同学反应没用过jupyter notebook,更习惯用pycharm项目的形式跑代码。于是,本文将用pycharm项目的形式,重新复现SRCNN!【图像超分】论文复现:新手入门!Pytorch实现SRCNN,数据预处理、模型训练、测试、评估全流程详解,注释详细,简单修改就可以训练你自己的图像数据,有训练好的模型下载地址,随取随用。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 4704

Java乱码问题总结

一、编码的基础概念 首先,要想解决java中文乱码问题就有必要了解一下什么是字符,字符集,编码的概念。 字符:是文字与符号的总称,包括文字、图形符号、数学符号等。 字符集:就是一组抽象字符的集合。字符集常常和一种具体的语言文字对应起来,该文字中的所有字符或者大部分常用字符就构成了该文字的字符集,比如英文字符集。繁体汉字字符集、日文汉字字符集等等。 计算机要处理各种字符,就需要将字符和二进...

weixin_34326179的博客 2752

在blender中安装vtk插件

Blender 是一个开源的、功能强大的3D计算机图形软件,广泛用于创建动画片、视觉效果、艺术作品、3D打印模型、互动3D应用程序和视频游戏。Blender 是由 Blender 基金会开发和维护的,具有丰富的功能和灵活的扩展性。在github上下载zip插件。

如果想成为中心,那么就到中心去吧。 294

YOLOv13保姆级教程+AKConv模块:可变形卷积+自适应核优化,mAP提升3.23%,召回率&mAP50~95显著提升(论文涨点模块已验证)

本文介绍了一种改进的YOLOv13-AKConv模型,通过引入AKConv模块显著提升了目标检测性能。实验结果表明,优化后的模型(绿色曲线)相比原模型(蓝色曲线)在mAP指标上提升了3.23个点,同时召回率、mAP50-95等指标均有明显提升。作者详细阐述了模型移植过程,包括创建yolov13-AKConv.yaml配置文件,修改tasks.py和modules/init.py文件,以及实现AKConv模块的核心代码。该模块采用可变形卷积思想,通过动态生成采样点位置来增强特征提取能力,并集成了BN和SiLU

FJN110的博客 2611

Java中文乱码问题几种常见的解决方法

4. **IO流操作**:在进行文件读写操作时,应该使用支持指定编码的IO流类,如`FileInputStream`和`FileOutputStream`配合`InputStreamReader`和`OutputStreamWriter`,并指定编码为UTF-8。1. **设置JVM编码**:在启动Java程序时,可以通过`-Dfile.encoding=UTF-8`参数来指定JVM使用的字符编码为UTF-8。在处理编码相关问题时,一致性是关键。7. **字体支持**:确保使用的字体支持中文字符显示。

weixin_63378697的博客 2501

Electron - Electron failed to install correctly, please delete node_modules/electron and try install

Electron安装失败:Electron failed to install correctly, please delete node_modules/electron and try installing again,electron安装报错:Electron failed to install correctly...解决方案,Electron 未能正确安装,请删除 node_modules/electron,然后再次尝试安装,如何解决这个问题,手把手教你解决,在yarn dev时报错,electr

🏆 前端领域优质创作者 4370

巧妙解决JavaWeb开发中中文乱码问题

<br />此文章并非含技术量高,只是解决JavaWeb开发中中文乱码问题,在JavaWeb开发过程中很多程序员都遇到过中文乱码的情况,比如说直接访问Servlet出现乱码,如图:<br /> <br /><br />很多程序员又会说这还不简单,直接在Servlet中加上“response.setContentType("text/html;charset=GBK");”不就解决了吗?但是有些是不起作用的,那这时有什么更好的方法解决呢?有,写一个过滤器来过滤编码格式,自己写一个类(Filter.java),

z511273571的专栏 703

uniApp微信小程序:error: 60001 request:fail errcode:-101 cronet error code:-101error_msg:net::ERR CONNECTI

uni-app微信小程序域名访问报error 60001 request:fail errcode:-101,解决Uniapp微信小程序报600001错误,uni.request()接口请求报错,服务器更换SSL证书后,uniapp微信小程序出现`request:fail errcode:-101`问题分析与解决,服务器更换ssl证书后,手机访问微信小程序异常,微信小程序更换SSL证书后出现请求报错,服务器更换SSL证书,微信小程序报600001,小程序反应偶尔出现request:fail errcode:

✅ 精选推荐文章 4584

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JavaWeb项目插入数据至Mysql数据库,中文乱码问题

JavaWeb项目插入数据至Mysql数据库,中文乱码问题 今天在实际项目中遇到了javaWeb项目中保存数据至Mysql数据库,出现中文乱码问题如中文数据保存为:???? 问题 数据库中保存的数据如下图所示: 我首先查看了数据库编码格式是否存在问题,如下图: 查看数据库编码,确定没有问题,然后查看了数据库配置中数据库地址是否加上了编码格式配置,代码如下: url: jdbc:mysql://...

非专业Bug开发工程师的博客 2134

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

JavaWeb工程在Linux下的中文乱码问题汇总

在windows下开发的JavaWeb项目,运行测试没有任何问题,后来部署到阿里云租来的linux服务器上,结果遇到了各种问题,解决也花费了不少时间,还是来总结一下。     1、secureCRT的中文乱码          我用的终端是secureCRT,发现tomcat日志不停的打印中文乱码,这里要先修改终端软件的编码,我这里就是修改secureCRT的编码,打开“选项”--》“会话选项

在梅边的专栏 3053

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

JavaWeb过滤器解决中文乱码问题

javaweb项目实现过滤器Filter解决前端表单提交的信息出现的中文乱码问题 Javaweb三大组件是:Servlet,Filter,Listener。1、ServletServlet作为中转处理的容器,连接了客户端和服务器端的信息交互和处理。2、Filter拦截用户请求,在服务器作出响应前,可以在拦截后修改request和response,实现开发者想得到的功能。3、Listener。

weixin_51604181的博客 2311

JavaWeb——Get、Post请求中文乱码问题

最近在重温JavaWeb基础内容,碰到了之前也时常遇到的中文乱码问题,想着反正是经常要处理的,不如当即就把它整理出来放在博客里,省得遇到时再去到处搜。   1. Post请求乱码的解决方案:    手工创建一个过滤器实现javax.servlet.Filter接口: public class CharacterEncodingFilter implements Filter { ...

养猪专业户 1427

JavaWeb完美解决中文乱码问题

PS:之前写JavaWeb项目的时候,中文乱码这个问题一直困扰着我,我明明就在WorkSpace里设置了字符集,为什么还乱码?我数据库设置了编码格式,为什么还乱码?我是谁?我在哪?我在做什么?别担心!博主已经为你量身写好了防止乱码的拦截请求,从此拒绝乱码!无死角!import java.io.IOException; import javax.servlet.ServletException; i...

Black_YeJing的博客 592

JavaWeb解决中文乱码问题

tomcat的server.xml文件中,在Connector 节点中添加useBodyEncodingForURI="true" 属性 使用请求体的编码,然后在获取请求内容之前使用request.setCharacterEncoding("UTF-8")tomcat的get请求默认使用ISO-8859-1来编码,可以在获取的时候进行转码,new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8")

Lxn2zh的博客 513

解决idea中maven的javaweb项目,输出在控制台上的中文乱码问题

在idea中创建一个maven的javaweb项目,当有中文输出到控制台的时候,就会出现乱码(下图) 第一张图是我们要输出的中文,但是我们通过servlet访问之后,控制台打印出来的都是乱码。而且我们使用的是maven自带的tomcat,所以暂时无法修改Tomcat的配置。 我们可以在 File -->setting --> maven --> runner 里面的 ...

qq_40910952的博客 7662

JavaWeb(Servlet, SpringMVC, SSM)中文乱码问题总结

JavaWeb(Servlet, SpringMVC, SSM)中文乱码问题总结

一个初学者的博客 717

javaweb教程 中文乱码问题总结

中文乱码问题 编码解码,与乱码问题原因Servlet响应中文乱码问题与处理Servlet请求乱码的问题与处理Servlet Get请求乱码问题与处理Servlet Post请求乱码问题与处理Servlet 文件下载文件名乱码问题与处理 编码解码,与乱码问题原因 字符编码的概念 将字符转换成成二进制数据的过程,称为编码。 字符解码的概念 将二进制数据转换成字符的过程,称为解码。 中文乱...

qq_36723759的博客 427
上一篇: HTML之定位position
下一篇: JSP-EL表达式
JavaWeb_Hao
博客等级 码龄9年 21粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值