怎么设置修改tomcat的编码格式式

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
Love nature.
Love kelly.
Happy forever!!
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
&由于没有用page命令指定JSP响应的MIME类型,因此,浏览器使用它默认的ISO8859-1对响应的结果进行编码,导致了乱码。在JSP最上方添加如下语句:
&%@ page language="java" contentType="text/ charset=UTF-8"&&& pageEncoding="UTF-8"%&&!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ""&
指定响应的类型是text/html,编码字符集使用UTF-8,就不会出现中文乱码的问题了。
2、表单提交乱码
问题描述:表单提交时(POST和GET方法都有),使用request.getParameter方法得到乱码。
原因:(1)、Tomcat的J2EE实现对表单提交即POST方法提交时,处理参数采用默认的ISO8859-1来处理
&&&&&&&&&& (2)、Tomcat对GET方法提交的请求在query-string处理时采用了和POST方法不一样的处理方式(与Tomcat4不一样,所以设置setCharacterEncoding("gbk")不起作用。
解决方案:
(1)、对POST方法提交的表单通过编写一个过滤器(filter)的方法解决,过滤器在用户提交的数据被处理之前被调用,可以在这里改变参数的编码方式(目标编码方式可以通过参数指定)。过滤器(SetCharacterEncodingFilter.java)的代码如下:
红色框中:chain.doFilter(request,response);一定不能缺,要把request、response传给下一个过滤器,否则jsp页面或者servlet无响应
编译后把class文件放在classes目录下,并在Web应用的web.xml文件中添加如下代码:
这里指定目标编码方式是GBK,任何请求都要经过这个过滤器(url-pattern为“/*”)。再重新启动Tomcat后就可以了。
&&(2)、对GET方法提交的表单,Tomcat对其的处理方法与POST方法不一样。所以,上面设置的过滤器对GET方法提交的表单并没有作用,它需要在其他地方设置。
打开&TOMCAT_HOME&\conf目录下的server.xml文件,找到对8080端口进行服务的Connector组件的设置部分,给这个Connector组件添加一个属性:URIEncoding=“GBK”。修改后的Connector组件设置如下:
&这样修改后,重启Tomcat就可以正确处理GET方法提交的表单数据了。编写一个JSP文件测试配置是否正确(保存为test.jsp):
3、数据库应用乱码
&&&& 不同的数据库往往支持不同的编码,造成了应用是比较混乱,不同的数据库往往又有不同的解决方法。下面介绍MySQL数据库的中文问题并提供解决方案。
(1)、MySQL的解决办法之一
&&&&&& 修改MySQL的配置文件,打开&MYSQL_HOME&\my.init文件,把[mysqld]区的如下语句:
&&&&&&&&&&&&& default-character-set=latin1
修改为:default-character-set=gbk
在[client]区增加:
&&&&&&&&&&&&&&&&&&&&&&&&&&& default-character-set=&修改后,数据库默认支持的编码格式就改为GBK,这样就根本解决了MySQL的数据库乱码问题,也就不需要在程序中进行各种编码转换了。
(2)、解决办法二
&&&&&& MySQL不支持UNICODE,所以如果要想表中插入中文,必须首先把中文字符重新编码。下面的JSP页面实现向表test中插入数据,然后把数据再读出来的功能。JSP文件的代码如下:&
将str字段插入数据库中,把str的编码转换为ISO8859-1:
String str="陈毅";&
&str=new String(str.getBytes("gb2312"),"ISO8859-1");
&& 解决这类问题关键是要了解操作对象的编码方案,例如对于MySQL而言,默认编码是ISO8859-1,而JSP的Request的默认编码也是ISO8859-1。所以,如果要把请求参数插入数据库,如下:
String sql2="INSERT INTO student VALUES('"+request.getParameter("name")+"')";
stmt.executequery(ssql2);
当二者编码不一致时,就要使用编码转换了!注意:从数据看中取出数据时,若二者编码不一致也要进行编码转换,否则在页面中会出现乱码:
new String(rs.getString(1).getBytes("ISO8859-1"),"gb2312");
4、其他应用的编码问题与解决方案
(1)、Tomcat5的include页面出现乱码如何解决?
&&&&&&& 在Tomcat4中,被include的页面文件中不需要也不能指定页面编码方式。但在Tomcat5.0x中,被include的文件需要指定编码方式,否则可能出现乱码。即主页面文件和被包含页面文件中,都需要加入:
&&&&&&&&&&&&&&& 这样的页面使用JBuilder7编译是不能通过的!为了让Tomcat5.0x能想4那样处理include页面,保证JBuilder的正常编译,需要修改项目WEB-INFO/web.xml文件。把默认的字符集设置成GBK或GB2312就可以了。
&page-encoding&GBK&/page-encoding&
(2)、是否需要设置HTML的默认编码集
&&&&&&&在开发的过程中,如果不设置html的默认编码集,往往默认的是西欧的编码集,对于许多英文版的IE来说尤为明显,还有就是一部分汉化不够彻底的IE.
(3)、Struts应用中的参数中文编码问题
&&&&&&&&&&在使用struts提供的ActionForm过程中,无论表单采用的是STRUTS标签还是HTML标签,都可以用ActionForm的GETTER、SETTER来获取和设置表单的元素值(它们的作用和效果与Request.getParameter()方法一样,但如果要正确地显示和获取中文,则必须满足下面条件之一:
1、表单采用method=“POST” enctype="multipart/form-data"方式提交。
2、表单采用method=“GET”方式提交。
&&&&&&&参数会通过URL传递,这样必须在服务器端对参数进行中文编码转换,而且在ActionForm的setter中也要进行转换才能正确显示和获取。
3、表单采用method=“POST”方式提交。
&&&&&&&参数会通过request流传递,这样必须在服务器端对参数进行中文编码转换,而且在ActionForm的setter中也要进行转换才能正确显示和获取。此类方式同上一种。采用编码的方式可以使用如下函数:
public static String asc2gb(String asc)
&&&&&&&if(asc==null)
&&&&&&&try{
&&&&&&&&&&&&&&ret=new String(asc.getBytes("ISO8859-1"),"GB2312");
&&&&&&&}catch(Exception e){
&&&&&&&&&&&&&&ret=
阅读(240)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'Tomcat常见Web应用乱码的解决方案',
blogAbstract:'
&&&& Tomcat常见Web应用中遇到的中文编码问题主要有JSP页面显示、表单提交和数据库应用等。下面对他们做一简单介绍。
1、JSP页面显示中文乱码
问题描述:在JSP页面内输出中文时出现乱码。
原因:没有指定JSP文件的相应结果的MIME类型。默认的字符编码是ISO8859-1,而这个字符集是不能包含中文的。
解决方案:在JSP文件中使用page命令指定相应结果的MIME类型,例如JSP文件
&由于没有用page命令指定JSP响应的MIME类型,因此,浏览器使用它默认的ISO8859-1对响应的结果进行编码,导致了乱码。在JSP最上方添加如下语句:',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:1,
publishTime:6,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'Love nature.\r\nLove kelly.\r\nHappy forever!!',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}修改tomcat默认的编码方式 - web之家 - 博客园
随笔 - 434
tomcat8以后默认编码格式是utf-8;7之前的都是iso8859-1
如果默认情况下,tomcat使用的的编码方式:iso8859-1
修改tomcat下的conf/server.xml文件
找到如下代码:&&&&&Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /&这段代码规定了Tomcat监听HTTP请求的端口号等信息。
可以在这里添加一个属性:URIEncoding,将该属性值设置为UTF-8,即可让Tomcat(默认ISO-8859-1编码)以UTF-8的编码处理get请求。
修改完成后:
&Connector port="8080"& protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"&URIEncoding="UTF-8" /&
&&一:form在前台以post方式提交数据:
&&&&浏览器将数据(假设为“中国”)发送给服务器的时候,将数据变成0101的二进制数据(假设为98 99)时必然要查码表,浏览器以哪个码表打开网页,浏览器就以哪个码表提交数据。数据到达服务器后,数据(98 99)要封装到request中,在servlet中调用Request的getParameter方法返回的是字符串(“中国”),方法内部拿到数字后要转成字符,一定要查码表,由于request的设计者是外国人,所以默认查的是他们常用的ISO8859-1,这就是请求数据产生乱码的根源。
package com.yyz.
import java.io.IOE
import java.io.PrintW
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
//以post方式提交表单
public class RequestDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//请求数据的中文乱码问题
request.setCharacterEncoding("UTF-8");//客户端网页我们控制为UTF-8
String username = request.getParameter("username");
//获取数据正常,输出数据时可以查阅不同码表
response.setCharacterEncoding("gb2312");//通知服务器发送数据时查阅的码表
response.setContentType("text/charset=gb2312");//通知浏览器以何种码表打开
PrintWriter out = response.getWriter();
out.write(username);
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
二:form在前台以get方式提交数据:&
&& get方式提交的数据依然是浏览器用什么码表打开就用什么码表发送。不同的是,以get方式提交数据时,request设置编码无效。即使设置了UTF-8还是会去查ISO8859-1。得到(? ?),要解决这个问题,需要拿着(??)反向查ISO8859-1,拿到(98 99)后,再去查正确码表。
1 package com.yyz.
3 import java.io.IOE
4 import java.io.PrintW
6 import javax.servlet.ServletE
7 import javax.servlet.http.HttpS
8 import javax.servlet.http.HttpServletR
9 import javax.servlet.http.HttpServletR
10 //以get方式提交表单
11 public class RequestDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//请求数据的中文乱码问题
request.setCharacterEncoding("UTF-8");//以get方式提交数据时,request设置编码无效。即使设置了UTF-8还是会去查ISO8859-1
String username = request.getParameter("username");
System.out.println(username);
byte source [] = username.getBytes("iso8859-1");
username = new String (source,"UTF-8");
System.out.println(username);
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
三:提交数据中文乱码问题总结:
1.如果提交方式为post,想不乱码,只需要设置request对象的编码即可。
&&&&& 注意:客户机数据是以哪种方式提交的,request就应该设成什么编码。
2.如果提交方式为get,设置request对象的编码是无效的,想不乱码,只能手工转换。
&&&& String&data =&"???????";//乱码字符串&&&& byte source [] = data.getBytes("iso8859-1");//得到客户机提交的原始数据&&&&&data = new String (data.getBytes("iso8859-1"),"UTF-8");//解决乱码
&&&& //等同于
&&& data = new String (source,"UTF-8");
3.get方式的乱码,还可以通过更改服务器配置的方式实现。更改Tomact的conf目录下的server.xml文件。
&&&&& 3.1&&&&这种方式并不推荐,因为更改了服务器且并不灵活。
&&&&& 3.2这么设置后,request的setCharacterEncoding设置什么编码,连接器就用什么编码,虽然比上一种更改灵活,但依然会导致我们的应用程序牢牢依赖于服务器,也不被推荐。
四:最后的最后,提一个小细节:URL地址后面如果跟了中文数据,一定要经过URL编码。表单提交的参数有中文数据,浏览器会自动帮我们编码,但如果是通过链接直接带中文参数,浏览器是不会帮我们编码的,这时想通过上述第二种方式解决中文乱码问题就时灵时不灵了,应该通过URLEncoding.encode(,"UTF-8")先编码。
阅读(...) 评论()
Copyright & web之家
Powered by:
模板提供:编写网站时,页面通过服务器传递参数,有时遇到页面或后台出现乱码却找不到出处时(即JSP、IDE、controller或servlet全部编码格式都是UTF-8时),可以考虑是不是服务器的编码出现了问题,现给出修改Tomcat服务器默认编码格式的方法
找到Tomcat目录下的conf文件夹,打开编辑其中的server.xml,通过搜索找到
&Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/&
一行信息,在其中添加一个属性URIEncoding=“UTF-8”,添加后为
&Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" /&
服务器默认编码格式即改变,保存重启服务器再次尝试问题可能就会解决
注:Tomcat原本默认编码格式为ISO8859-1
本文已收录于以下专栏:
相关文章推荐
修改tomcat默认编码格式:
修改tomcat下的conf/server.xml文件,找到如下代码:
   
               connectionTimeout...
在实际开发中我们经常遇到request请求的中文乱码,那么如何解决中文乱码问题?
方法一:对请求参数进行编码转换
String userName=request.getParamter(&userNa...
tomcat7.0.70升级为7.0.76后异常 Invalid character found in the request target. 解决
第一,存文件必须以一种编码存;读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。
从.java-&.class过程是,先编写.java文件并按莫种编码方式...
在学习使用Tomcat的时候,了解一下Tomcat的默认端口修改和默认编码方式修改,方便以后更深入的学习。
默认情况下,tomcat使用的的编码方式:iso8859-1
修改tomcat下的conf/server.xml文件
找到如下代码:   
这段代码规定了Tomcat监听HTTP请求的端口...
默认情况下,tomcat使用的是iso8859-1的编码编码方式,浏览器的embed标签中src指向的地址要通过tomcat去解析。如果包含中文,采用这种编码方式就会出现乱码问题,而在这种情况下,乱码...
利用request.setCharacterEncoding(&UTF-8&);来设置Tomcat接收请求的编码格式,只对POST方式提交的数据有效,对GET方式提交的数据无效!
要设置GET的...
我们在程序编写的过程中总是会遇到一些中文编码的问题,需要在程序中很多环节中去进行过滤和转义,依旧有可能遇到中文乱码的问题,下面是我的一个同事告诉我的方法,百时不灵,当然是针对于tomcat服务器来说的...
转自http://www.jb51.net/article/33569.htm
mysql数据库的默认编码并不是utf-8。
安装mysql后,启动服务并登陆,使用show varia...
他的最新文章
讲师:王哲涵
讲师:王渊命
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)tomcat中设置编码格式
& &maxThreads="150"
minSpareThreads="25" maxSpareThreads="75"
& &enableLookups="false"
redirectPort="8443" acceptCount="100"
& &connectionTimeout="20000"
&useBodyEncodingForURI="true"
& &disableUploadTimeout="true"
URIEncoding="utf-8" /&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 tomcat设置编码格式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信