输出内容
在Servlet代码中用response的方法来设置输出内容的编码方式,有以下三个方法(转载):
1、response.setCharacterEncoding("UTF-8");
2、response.setContentType("text/html;charset=UTF-8");
3、response.setLocale(new java.util.Locale("zh","CN"));
下面对以上3种方法进行差异分析:
第一种方法只能用来设置out输出流中所采用的编码,但是它的优先权最高,可以覆盖后面两种方法中的设置;
第二中方法可以设置out输出流中字符的编码方式,也可以设置浏览器接收到这些字符后以什么编码方式来解码,它的优先权低于第一种方法,
但高于第三种方法;
第三种方法只能用来设置out输出流中字符的编码方式,但是它的优先权最低,在已经使用前两种方法中的一个设置了编码方式以后,它就被覆盖而不起作用了。
以上方法都得在getWriter()方法前设置;
输入内容
在Servlet代码中设置取得参数的编码方式(学得):
1.对于doPost()方法,用request.setCharacterEncoding("utf-8")指定取得post的请求参数编码,而对于doGet()方法没有效果。
有一个问题是,如果form表单所在页面与setCharacterEncoding("utf-8")的编码不一样的话,也会出错!
2.对于doGet()方法,就麻烦点,方法如下(假设参数是value):(网上查的,不过如果直接在url上写参数就没成功,求高人指点)
第一种,查看tomcat下conf目录,找到server.xml,如果里面的
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"/>没有编码,则在servlet里用
response.setContentType("text/html;charset=utf-8");
String name=request.getParamenter("name");
name=new String(name.getBytes("ISO-8859-1"),"UTF-8");
这样就可以取得中文参数
第二种,如果server.xml里面的没编码,则添加上编码,然后一定要重启服务器如下
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="gb2312"/>
再在doGet()方法里设置输出编码即可response.setContentType("text/html;charset=utf-8")。