javaWeb解决中文乱码的一点小总结

简介: 不同形式的请求及携带参数问题导致的乱码及解决

①enctype="multipart/form-data"  上传文件使用的表头,内容input等以二进制传递,可以一定程度上避免表单提交中文乱码(针对的是前后端编码一致的情况)。

②  

Struts2的上述标签,可以设置编码格式,针对的是post请求。

相当与request.setCharacterEncoding("GBK"); 

③关于请求方式。Get请求和post请求的区别及说明。

1. Get请求为url请求方式,携带的参数会在url后边以?Name=张三&age=18这种形式存在。如果包含中文,由于浏览器无法传递中文,需要先进行编码,这时候经历了浏览器编码----》服务器中间件解码的过程。因为没有指定请求头的编码格式,服务器中间件默认是用iso-8859-1编码进行解码的,此时后端可通过 new String(aa.getbytes(“iso-8859-1”),’”gbk”)等方式重新组合编码获取正确的编码格式。

对于单独的url加参数的请求方式(非表单提交),我们可以将中文参数进两次encodeURI,第一次编码得到的是UTF-8形式的URL,第二次编码得到的依然是UTF-8形式的URL,但是在效果上相当于首先进行了一 次UTF-8编码(此时已经全部转换为ASCII字符),再进行了一次iso-8859-1编码,因为对英文字符来说UTF-8编码和ISO- 8859-1编码的效果相同。后端在用常规接收接收的时候web中间价会自动进行一次解码,即用ISO- 8859-1进行了解码,然后我们在用URLDecoder.decode(aa,’”gbk”)即可解码为正确的中文。

对于tomcat来说,我们可以在server.xml的<Connector port 中添加URIEncoding="gbk" 标签来进行设置tomcat的默认解码格式(紧针对get方式有效),weblogic也有相似的配置。 tomcat还有一个标签:useBodyEncodingForURI="true",添加的位置和上边相同,但是并不意味着这两个标签可以同时使用。useBodyEncodingForURI="true"标签告诉tomcat解码的时候用请求体指定的编码(即post请求编码)格式进行get请求的解码,此时适用post请求解决中文乱码问题。

2. 对于post请求来说,最常用的即:

request.setCharacterEncoding("gbk"),

response.setCharacterEncoding("gbk"),

只针对post请求方式有效。

的方式进行指定post请求的编解码解决中文乱码。需要注意的问题是:此设置只对于此次请求没有进行任何request.getparmer()操作的请求才有效,response同理要在返回之前设置。因此我们常用spring的encodingFilter拦截器进行编码格式的设置,跟踪源码会发现其本质就是request.setCharacterEncoding("gbk"),但是拦截器能保证一定设置在request.getparmer()之前,而且不用我们每个方法都啰嗦的写上边的东西。

编解码问题还涉及到请求头contentype以及jsp页面的pageEncoding等等,此处不再详细说明。

相关文章
|
19天前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
55 7
|
2月前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
39 4
|
2月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
83 9
|
3月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
113 7
Spring Boot 入门:简化 Java Web 开发的强大工具
|
4月前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
92 7
|
4月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
121 4
|
6月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
553 37
|
5月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
49 2
|
6月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
|
4月前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
97 0

热门文章

最新文章