Servlet接收JSP参数乱码问题解决办法(转)

《供应链金融风控模型设计:多维度数据整合与动态风险预警机制》 注:方案突出供应链金融「三流合一」(资金流、物流、信息流)的风控逻辑,通过多维度数据整合与动态预警,解决传统风控中中小企业信用评估难、链条风险传导监测滞后的问题。◦ 构建供应链拓扑图,计算「核心企业违约对上下游企业的影响系数」(如某电子厂商违约时,其前五大供应商的风险权重自动提升40%)• 区块链应用:将核心企业应付账款上链存证,防止「一票多融」欺诈(如某供应商用同一应收账款在多家银行融资)◦ 财务数据:核心企业审计报告、上下游企业纳税数据(增值税发票频次/金额) 阅读详情

--------------------------------------------------------------------------------

环境:
apache-tomcat-6.0.24.zip
jdk1.6.0_16
WindosXP 简体中文版
Netbeans6.8

目标:
解决Servlet接收到JSP传递的参数后乱码问题,乱码发生在Servlet一方。

JSP向Serlvet传递参数有两种方式,一种是GET方式,另一种是POST方式,为了解决乱码问题,必须对这两种方式工作原理有个深刻理解才行。

这里先写一个简单的JSP(工程所有的源代码文件编码均为GBK),里面有两种提交参数的方式:

Java代码 复制代码
  1. <%@page contentType="text/html" pageEncoding="GBK"%>    
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"    
  3.      "http://www.w3.org/TR/html4/loose.dtd">    
  4.   
  5. <html>    
  6.         <head>    
  7.                 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">    
  8.                 <title>JSP Page</title>    
  9.         </head>    
  10.         <body>    
  11.                 <h1>页面提交中文测试!</h1>    
  12.                 <h2>GET方式</h2>    
  13.                 <a href="/testweb/TestServlet?param=中文">GET方式提交中文测试</a>    
  14.                 <h2>POST方式</h2>    
  15.                 <form action="/testweb/TestServlet" method="post">    
  16.                         <input type="text" name="param" value="中文"/>    
  17.                         <button type="submit" name="提交中文参数测试" value="提交中文参数测试"/>    
  18.                 </form>    
  19.         </body>    
  20. </html>   
<%@page contentType="text/html" pageEncoding="GBK"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
     "http://www.w3.org/TR/html4/loose.dtd"> 

<html> 
        <head> 
                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
                <title>JSP Page</title> 
        </head> 
        <body> 
                <h1>页面提交中文测试!</h1> 
                <h2>GET方式</h2> 
                <a href="/testweb/TestServlet?param=中文">GET方式提交中文测试</a> 
                <h2>POST方式</h2> 
                <form action="/testweb/TestServlet" method="post"> 
                        <input type="text" name="param" value="中文"/> 
                        <button type="submit" name="提交中文参数测试" value="提交中文参数测试"/> 
                </form> 
        </body> 
</html> 

然后定义一个Servlet接收提交的参数。

这里强调一点,在此使用的tomcat没有经过任何的修改与配置。
当页面通过两种方式请求Servlet的时候,参数的编码原本为GBK,在通过HTTP服务将请求发送出去的时候,会将参数重新按照ISO-8859-1编码后发送。因此,不管GET或POST方式,Servlet接收到的参数数据的编码均为ISO-8859-1,必须重新转码为GBK,才能正确显示中文参数。


1、GET方式的请求与接收过程
页面中参数“param=中文”的编码原本为GBK,当用GET方式发送参数的时候,参数值会被Web服务器从GBK转码为ISO-8859-1。
Servlet接收到的GET请求参数的编码当然为ISO-8859-1了,对于中文肯定显示不了,因此要将ISO-8859-1转换为GBK就可以正常显示中文了。
Java代码 复制代码
  1. String param = request.getParameter("param");    
  2.                String x = new String(param.getBytes("ISO-8859-1"), "GBK");    
  3.                System.out.println("GET方式获取的中文参数值:" + x);    
 String param = request.getParameter("param"); 
                String x = new String(param.getBytes("ISO-8859-1"), "GBK"); 
                System.out.println("GET方式获取的中文参数值:" + x); 
 

            

2、POST方式请求与接收过程
页面中参数“param=中文”的编码原本为GBK,当点击页面中提交按钮后,参数会以GBK编码格式发送给Servlet,因此Servlet接收参数的时候必须将请求的编码明确设定为GBK,这样才能正确接收中文。
Java代码 复制代码
  1. request.setCharacterEncoding("GBK");    
  2.                String param = request.getParameter("param");    
  3.                System.out.println("POST方式获取的中文参数值:" + param);   
 request.setCharacterEncoding("GBK"); 
                String param = request.getParameter("param"); 
                System.out.println("POST方式获取的中文参数值:" + param); 

              

或者,可以按照get方式来接收post的参数:
Java代码 复制代码
  1. String param = request.getParameter("param");    
  2.                String x = new String(param.getBytes("ISO-8859-1"), "GBK");    
  3.                System.out.println("GET方式获取的中文参数值:" + x);   
 String param = request.getParameter("param"); 
                String x = new String(param.getBytes("ISO-8859-1"), "GBK"); 
                System.out.println("GET方式获取的中文参数值:" + x); 


疑问:为什么在GET方式下不设定请求的编码格式呢?原因是GET方式使用的编码为ISO-8859-1,用GBK、UTF-8等接收效果都是一样的(都是一堆字母和符号),编不编都一个样,如果指定ISO-8859-1编码是多一翻手续,如果指定了非ISO-8859-1编码,是脑子还不清醒,没搞明白这个原理,因此,GET方式就不要指定请求的编码了。

下面看看Servlet的写法:
Java代码 复制代码
  1. package jweb.lavasoft;    
  2.   
  3. import java.io.IOException;    
  4. import java.io.PrintWriter;    
  5. import javax.servlet.ServletException;    
  6. import javax.servlet.http.HttpServlet;    
  7. import javax.servlet.http.HttpServletRequest;    
  8. import javax.servlet.http.HttpServletResponse;    
  9.   
  10. public class DealPageParamServlet extends HttpServlet {    
  11.   
  12.         protected void doGet(HttpServletRequest request, HttpServletResponse response)    
  13.                         throws ServletException, IOException {    
  14.                 String param = request.getParameter("param");    
  15.                 String x = new String(param.getBytes("ISO-8859-1"), "GBK");    
  16.                 System.out.println("GET方式获取的中文参数值:" + x);    
  17.         }    
  18.   
  19.         protected void doPost(HttpServletRequest request, HttpServletResponse response)    
  20.                         throws ServletException, IOException {    
  21.                 request.setCharacterEncoding("GBK");    
  22.                 String param = request.getParameter("param");    
  23.                 System.out.println("POST方式获取的中文参数值:" + param);    
  24.         }    
  25. }   
package jweb.lavasoft; 

import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class DealPageParamServlet extends HttpServlet { 

        protected void doGet(HttpServletRequest request, HttpServletResponse response) 
                        throws ServletException, IOException { 
                String param = request.getParameter("param"); 
                String x = new String(param.getBytes("ISO-8859-1"), "GBK"); 
                System.out.println("GET方式获取的中文参数值:" + x); 
        } 

        protected void doPost(HttpServletRequest request, HttpServletResponse response) 
                        throws ServletException, IOException { 
                request.setCharacterEncoding("GBK"); 
                String param = request.getParameter("param"); 
                System.out.println("POST方式获取的中文参数值:" + param); 
        } 
} 


其实,只要搞明白了编码过程,遇到乱码问题就能从容应对了。
常常见到有人遇到乱码了,就开始修改Tocmat的server.xml的配置文件,或者添加过滤器等等,糊里糊涂搞,大多数情况问题都能解决掉,其实也仅仅是个瞎猫逮住个死耗子。



版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
[url]http://lavasoft.blog.51cto.com/62575/274527 [/url]

本文原文出自 “熔 岩” 博客,博主: leizhimin,原文链接: http://lavasoft.blog.51cto.com/62575/274527

模型检测--工具KeYmaera 论文:KeYmaera: A Hybrid Theorem Prover for Hybrid Systems 作者:Andre Platzer and JanKeYmaera摘要1 介绍2用于混合系统的KeYmaera验证工具3混合系统,混合自动机和混合程序 摘要 KeYmaera是一种用于混合系统的混合验证工具,它结合了演绎,实数代数和计算机代数证明者技术。它是自然的自动和交互式定理证明器 混合系统的规范和验证逻辑。 KeYmaera支持差分动态逻辑,它是用于混合程序的实值一阶动态逻辑,是混合自动机的程 阅读详情

相关推荐

成本会计(第九版)王忠孝课后习题答案解析

在掌握了基础知识之后,我们还需要培养自己的实际操作能力。此外,在学习过程中,遇到困难时,要及时向老师、同学请教,不要害怕暴露自己的不足。三人行,必有我师,每个人都有值得学习的地方。首先,我们需要认真阅读教材,把基础知识掌握牢固。在这里,我建议大家使用《成本会计(第九版)》的配套练习册,这样可以帮助我们检查学习效果。同时,网上的一些优质课程和论坛也是不错的学习资源,例如网易云课堂、中国大学MOOC等。别担心,这里我给大家推荐一些实用的学习资料和方法,帮助你更好地掌握这门课程。出版社: 大连理工大学出版社。

weixin_58833001的博客 1888

关于处理JavaWeb中Servlet中返回jsp乱码问题

主要对javaweb里面的编码进行处理,防止乱码的出现。

郑敏 2364

Badcase归因分析“四部曲”

badcase是业内的专业名词,简单解释一下。bad是坏,case是案例,说白了就是模型或者具体规则无法很好预测的那些案例。以分类模型为例,本来一个样本应该是负类的,结果预测为正类,那这个样本就能被称为bad case。那相对应的就是good case就是优秀案例。

qq_25438419的博客 3524

解决JSP Servlet中文乱码问题

一、出现乱码的原因   传输方和接收方采用的编码不一致。传输方对参数采用的是UTF-8编码而接收方却用GBK进行解析,当然是乱码,且Tomcat服务器默认采用的ISO8859-1编码得到参数值,如果没有设置也可能会出现乱码。 二、乱码的类型以及解决办法 1、 response乱码 01 02 03 response.setHeader("content-type", "text/html;charset=UTF-8"); respons

Lydia868的专栏 1138

PFC胶结模型实战:从线性到平行粘结的力学行为解析

本文深入解析了PFC中线性接触与平行粘结(pb模型)的核心差异与应用。平行粘结模型通过模拟胶结层的力学行为,能够有效传递拉力和抵抗弯矩,是模拟岩石、混凝土等胶结材料的关键。文章详细介绍了其变形与强度参数的设置、法向与切向行为的验证方法,并揭示了全量与增量力计算中易出现的“幽灵力”问题及其解决方案,为复杂模型的构建与调试提供了实用策略。

weixin_29230773的博客 1208

OpenFeign, Zuul, Gateway相互不兼容的问题总结

版本 Lib Vresion spring-cloud-starter-gateway 3.1.0 spring-cloud-dependencies 2021.0.0 spring-cloud-starter-netflix-zuul 2.2.6.RELEASE spring-cloud-starter-openfeign 3.1.0 1. Zuul 与OpenFeign 一起使用的问题 错误信息 jav.

Harry的博客 4132

解决Servlet请求中的中文乱码问题,详解

从原理上去分析servlet接收中文参数出现乱码的原因及解决方案,从而提升大家的编程水平。知其然亦要知其所以然。

ZGJLZL的博客 5715

Keil MDK-ARM v5.43a 部署 STM32F103 开发环境全流程

嵌入式开发环境是 Cortex-M 微控制器工程落地的基础支撑,其核心在于编译器链、设备支持包(DFP)与调试驱动的协同一致性。Keil MDK-ARM 作为工业级 ARM Cortex-M 开发套件,依托 Arm Compiler 和 CMSIS 标准,提供从代码编译、外设抽象到实时调试的全栈能力。其技术价值体现在对 STM32 等主流 MCU 的深度适配、高可靠性 SWD 调试支持,以及与 HAL 库、CubeMX 工程的无缝集成。典型应用场景涵盖温湿度传感终端、工业 PLC 子模块及低功耗边缘节点开发

weixin_33750664的博客 892

Servlet接收中文乱码

Servlet接收中文乱码 1.接收乱码原因 浏览器在提交表单时,会对中文参数值进行自动编码。当Tomcat服务器接收到浏览器请求后自动 解码,当编码与解码方式不一致时,就会导致乱码。 2.解决POST接收乱码 接收之前设置编码方式: request.setCharacterEncoding(“utf-8”) 提示: 必须在调用request.getParameter(“name”)之前设置 3.解决GET接收乱码 将接收到的中文乱码重新编码: // 接收到get请求的中文字符串 S...

舞鹤白沙编码日志 523

HDMI端口辐射(EMI)超标解决方案

HDMI端口辐射(EMI)超标解决方案 一、HDMI EMC设计要求: 1、HDMI EMC设计原理图 ( 图 一 ) 2、HDMI元件选型及参数说明:(图一所示) a.L510、L511、L512、L513使用专业EMI共模滤波器(普通共模电感寄生电容太大,会导致TMDS差分阻抗匹配测试失败),阻抗值为90Ω~100Ω(两路共模滤波器型号:CMF1210DH900MFR;四路共模滤波器型号:CMF2010DH101MFR), b.U1、U2为排式ESD(ESD排型号:ESD0524PA),越低的结电容

ltqdxl的博客 1万+

【FPGA教程案例87】加解密1——基于FPGA的AES加解密算法verilog实现

DES已走到了它生命的尽头。56比特密钥实在太小,虽然三重DES可以解决密钥长度的问题,但是DES的设计主要针对硬件实现,而今在许多领域,需要用软件方法来实现它,在这种情况下,它的效率相对较低。1997年4月15日美国国家标准和技术研究所(NIST)发起征集AES(Advanced Encryption Standard)算法的活动,并成立了AES工作组。目的是为了确定一个非保密的、公开披露的、全球免费使用的加密算法,用于保护下一世纪政府的敏感信息。这里,我们对AES的基本原理进行介绍:

FPGA/MATLAB学习教程/源码/项目合作开发 2546

史上最全Servlet中的中文乱码分析与解决问题

在Servlet中接收浏览器的数据以及发送数据到浏览器的时候容易遇到一些中文显示乱码的问题,下面是博主对这类问题的一个总结,希望能帮到大家! 一、问题分析 当我们的Servlet程序从客户端接收到一个中文数据或者发送一个中文数据到服务器端的时候,默认情况下会显示为乱码,这是由于编码方式的不同造成的,tomcat从浏览器接收到数据时默认的编码方式是ISO-8859-1的编码格式,这个格式是单字节编码,是不能解析中文的,而当数据接收到服务器的时候又没有按照相同的编码去解析数据,这就导致了中文乱码问题的出现。(这

空圆小生的博客 1716

AWR1843+DCA1000通过mmwave studio采集数据遇到的问题及解决方法

确保DCA1000的拨钮拨在了RADAR_5V_IN一边,这代表DCA1000通过与其相连的雷达板子供电,如果拨到了DC_JACK5V_IN一边,表示DCA1000用单独的电源供电。

qq_50974341的博客 4165

解决Servlet中文乱码问题

一、出现乱码的原因   由于浏览器默认使用UTF-8码表进行编码,而servlet使用ISO-8859-1码表进行编码,传输和接收方编码不一致导致乱码的产生。中文乱码就是因为编码不符,可能出现乱码有四个地方: 1 JSP编码乱码 2 HTML编码乱码 3 request获取数据乱码 4 response输出信息乱码 二、乱码的类型以及解决办法 1、Html中文乱码问题。 ...

一名北漂Java程序员的学习记录! 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jsp中request接收中文参数乱码问题解决办法

在利用表单提交数据时发现,获得的中文参数会发生乱码,解决方法如下:<body> <% Strings=request.getParameter("uname"); s=newString(s.getBytes("ISO-8859-1"),"utf-8");//解决乱码问题 %> <%=s%> </bod...

weixin_34409703的博客 1461

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

关于Servlet,JSP,HTML中文乱码的问题

首先说明一点,以下的测试方法只有一个HttpServletRequest.forward,但是基于原理上的讲解,其他乱码问题应该也可以从中得到一些启示。不敢保证百分百正确,但能提供一个大致的方向。 下面为测试入口servlet的代码,其中的getWriter被注释掉,后面讲其作用。 protected void doGet(HttpServletRequest req, HttpSe...

qq_27368993的博客 1341

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

jsp servlet 中文乱码问题

我们在使用servlet的时候经常会遇到一个头疼的问题,那就是中文乱码问题,总结了一下常见的乱码场景以及解决方式. 先直接上干货吧. JSP和Servlet的中文乱码处理 总结: jsp   (get请求)  →  servlet       出现场合:表单get 提交  超链接(get)    String  stuname = request.getParameter("

听风暖的博客 1556

html输入表单jsp返回数据中文乱码,JSP/Servlet页面中文显示为乱码的解决方式

经过网上搜索和自己的经验,JSP/Servlet页面的中文显示为乱码的问题可以细分为5类:1. JSP页面显示乱码。2. Servlet接收Form/Request传递的参数时显示为乱码3. JSP接收Form/Request传递的参数时显示为乱码4. 用时页面显示乱码5. 数据库存取的时候产生乱码。解决方式:1. JSP页面显示乱码的解决方式:第一种方式为在页面的开头加上:注:有时候如果不再页面...

weixin_34618077的博客 1012

jsp页面中文乱码问题

问题描述:JSP页面的中文乱码问题产生的原因非常之多,下面给出解决思路和解决办法。 解决思路:JSP的流程是:页面-&gt;Servlet-&gt;数据库-&gt;Servlet-&gt;页面,所以一旦出现页面乱码,我们需要一步一步的判断。 1、首先是判断从页面到Servlet后乱码是否已经出现,怎么判断?很简单,在Servlet中获取页面参数后打印输出看一下。 2、如果Servlet中取到...

高级CtrlCV工程师 1652

jsp/servlet取参数乱码问题分析

1、问题的来源和根本原因:这个话题是个很古老的话题,从jsp/servlet一出现就有了,对经常和汉字打交道的朋友来说,遇到最多的就是表单页面提交的中文参数 在服务器端直接用String myparam=request.getParameter("myparam");这里myparam的值将会是乱码。于是,有了这个解决方案:String myparam=new String(request.get

weoln的专栏 718

JSP以及Servlet中文乱码问题

JSP以及Servlet中文乱码问题 关于在 JavaWeb 中经常会出现乱码的状况,下面总结一下会出现乱码的情况: 一、JSP乱码 这种是最常见的,设置编码的位置位于 JSP 的第一行,如果在 Eclipse 中新建一个 JSP 默认 是下面这种: &lt;%@ page language=“java” contentType=“text/html; charset=ISO-8859-1” pa...

慕白博客 9045

servlet跳转到JSP页面会出现乱码

问题描述:servlet跳转到JSP页面的时候会出现乱码。但是直接访问JSP页面不会出现乱码,乱码情况如图所示 servlet情况 我发现去掉servlet上面的那两句话,JSP乱码情况是没有的, 或者写成下面情况的servlet也可以的 这样也不会出现乱码! 或者把上面四句话全部去掉也不会出现乱码 本人分析(不一定正确)是因为:response.s

沸沸腾的专栏 6366

jsp与servlet中文乱码问题(转)

大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着大家,现把JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考。首先了解一下Java中文问题的由来: Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱

搬家啦x 689

JSP,servlet和数据库之间传值出现乱码的问题

最近困扰我很久的一个问题终于解决了,为他我头疼了好几天,问题是JSP通过servlet向数据库传值,查询显示在页面的时候出现了乱码,原先我数据库中有两行带有中文的数据,查询的时候倒是没有出现乱码,我debug一下,发现JSP和servlet中所有接受中文字符集的变量都没有出现乱码,我去数据库查看,所有添加的中文字符都是问号,问题发现了,我就百度什么原因,有人说改变tomcat字符集,通过更

月色荒凉了天明 3998

关于JSP,servlet乱码问题集

做WEB项目是长遇到这个问题,,我知道过滤器能解决,,但是有时候过滤器它就是解决不了。。 一、JSP页面显示乱码 二、表单提交中文时出现乱码 三、数据库连接 大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着您,我现在把我在JSP开发中遇到 的中文乱码的问题及解决办法写出来供大家参考。 一、JSP页面显示乱码 下面的显示页面(disp

1935

JSP/ Servlet常见的中文乱码原因

在开发中,我们常常遇到中文乱码的问题,比如: &浏览器中看到的 Jsp/Servlet 页面中的汉字成了 ’?’ ?     &浏览器中看到的 Servlet 页面中的汉字都成了乱码     &sp/Servlet 页面无法显示 GBK 汉字。 &Jsp/Servlet 不能接收 form 提交的汉字。 &JSP/Servlet 数据库读写无法获得正确的内容。 隐藏在

u014419512的专栏 1840
上一篇: JSP学习日记
下一篇: Jquery技巧
Peditable
博客等级 码龄16年 11粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值