SSH中post提交表单action中文乱码问题
2017-03-04 12:06
549 查看
原 文
我的问题对应的解决方案是:web.xml中filter的顺序问题【置顶】。需要将编码过滤器放置在所有过滤器之前。
在解决这个问题途中学习到的东西:
解决方案总结(post中文乱码):
前后台编码方式一致;
结合过滤器的使用;
表单传输方式的指定;
Tomcat的server.xml;
1.前台:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<%
request.setCharacterEncoding("UTF-8");
%>
2.后台Struts.xml配置文件:
<constant name="struts.i18n.encoding" value="UTF-8"/>
3.web.xml中的过滤器(以下两个都可以,择一即可)
<!-- spring的中文乱码拦截器(必须置顶) -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 自定义的struts2的中文乱码拦截器(置顶) -->
<filter>
<filter-name>CharEncodingFilter</filter-name>
<filter-class>com.sram.filter.CharEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
package com.sram.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharEncodingFilter implements Filter{
String encoding;
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
req.setCharacterEncoding(encoding);
chain.doFilter(req, resp);
}
@Override
public void init(FilterConfig config) throws ServletException {
// TODO Auto-generated method stub
encoding = config.getInitParameter("encoding");
if(encoding==null||encoding.equals("")){
encoding = "UTF-8";
}
}
}
4.将form表单提交方式变为post方式,即添加method="post"
5.Tomcat的server.xml没有配置编码,添加URIEncoding="UTF-8"就可以了
<Connector port="6060" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"
useBodyEncodingForURI="true"
/>
6.在action中重编码,在指定参数的set方法中,将编码设会“UTF-8",例如:需要修改每个参数的set方法,比较麻烦(不推荐)
public void setCopyRight(String copyRight){
try {
this .copyRight = java.net.URLDecoder.decode (copyRight, "UTF-8" );
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
补充post方式:
补充get方式:
如果提交方式为get,设置request对象的编码是无效的,想不乱码,只能手工转换。
1. String data = "???????";//乱码字符串
byte source [] = data.getBytes("iso8859-1");//得到客户机提交的原始数据
data = new String (data.getBytes("iso8859-1"),"UTF-8");//解决乱码
//等同于
data = new String (source,"UTF-8");
2.get方式的乱码,还可以通过更改服务器配置的方式实现。更改Tomact的conf目录下的server.xml文件。
2.1
这种方式并不推荐,因为更改了服务器且并不灵活。
2.2
这么设置后,request的setCharacterEncoding设置什么编码,连接器就用什么编码,虽然比上一种更改灵活,但依然会导致我们的应用程序牢牢依赖于服务器,也不被推荐。
参考网址:http://www.cnblogs.com/yyz666/p/4051294.html
http://www.cnblogs.com/wanggangblog/p/3477525.html
http://www.cnblogs.com/chenssy/p/4220400.html
Struts2拦截器解决乱码问题http://blog.csdn.net/a9529lty/article/details/7069040
我的问题对应的解决方案是:web.xml中filter的顺序问题【置顶】。需要将编码过滤器放置在所有过滤器之前。
在解决这个问题途中学习到的东西:
解决方案总结(post中文乱码):
前后台编码方式一致;
结合过滤器的使用;
表单传输方式的指定;
Tomcat的server.xml;
1.前台:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<%
request.setCharacterEncoding("UTF-8");
%>
2.后台Struts.xml配置文件:
<constant name="struts.i18n.encoding" value="UTF-8"/>
3.web.xml中的过滤器(以下两个都可以,择一即可)
<!-- spring的中文乱码拦截器(必须置顶) -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 自定义的struts2的中文乱码拦截器(置顶) -->
<filter>
<filter-name>CharEncodingFilter</filter-name>
<filter-class>com.sram.filter.CharEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
package com.sram.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharEncodingFilter implements Filter{
String encoding;
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
req.setCharacterEncoding(encoding);
chain.doFilter(req, resp);
}
@Override
public void init(FilterConfig config) throws ServletException {
// TODO Auto-generated method stub
encoding = config.getInitParameter("encoding");
if(encoding==null||encoding.equals("")){
encoding = "UTF-8";
}
}
}
4.将form表单提交方式变为post方式,即添加method="post"
5.Tomcat的server.xml没有配置编码,添加URIEncoding="UTF-8"就可以了
<Connector port="6060" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"
useBodyEncodingForURI="true"
/>
6.在action中重编码,在指定参数的set方法中,将编码设会“UTF-8",例如:需要修改每个参数的set方法,比较麻烦(不推荐)
public void setCopyRight(String copyRight){
try {
this .copyRight = java.net.URLDecoder.decode (copyRight, "UTF-8" );
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
补充post方式:
补充get方式:
如果提交方式为get,设置request对象的编码是无效的,想不乱码,只能手工转换。
1. String data = "???????";//乱码字符串
byte source [] = data.getBytes("iso8859-1");//得到客户机提交的原始数据
data = new String (data.getBytes("iso8859-1"),"UTF-8");//解决乱码
//等同于
data = new String (source,"UTF-8");
2.get方式的乱码,还可以通过更改服务器配置的方式实现。更改Tomact的conf目录下的server.xml文件。
2.1
这种方式并不推荐,因为更改了服务器且并不灵活。
2.2
这么设置后,request的setCharacterEncoding设置什么编码,连接器就用什么编码,虽然比上一种更改灵活,但依然会导致我们的应用程序牢牢依赖于服务器,也不被推荐。
参考网址:http://www.cnblogs.com/yyz666/p/4051294.html
http://www.cnblogs.com/wanggangblog/p/3477525.html
http://www.cnblogs.com/chenssy/p/4220400.html
Struts2拦截器解决乱码问题http://blog.csdn.net/a9529lty/article/details/7069040
相关文章推荐
- SSH中post提交表单action中文乱码问题
- 提交表单乱码问题 action 中文接收的参数乱码
- 提交表单乱码问题 action 中文接收的参数乱码
- html向action提交表单,中文乱码问题的解决
- ssh整合ajax提交表单中文乱码问题详解!
- Struts之post提交表单出现中文乱码问题的解决方案
- struts2中jsp页面表单提交到action中文乱码问题
- 在jsp编程中,用get提交表单提交正常,而用post方式出现中文乱码-问题
- strurs2中jsp页面表单提交到action中文乱码问题
- 解决表单Post方式提交的中文乱码问题
- 【解决方案】nodejs关于post提交表单的中文乱码问题
- 解决在Unity3D中通过Post向服务器提交请求,表单中带有中文导致的乱码问题!
- struts2中表单提交后action中文乱码问题
- struts2中jsp页面表单提交到action中文乱码问题
- Spring MVC 3 表单中文提交post请求和get请求乱码问题的解决方法
- spring mvc 3.0 中解决post表单提交出现的中文乱码问题
- 解决用jquery的get或者post提交方式提交到struts2中的action中文乱码问题
- JSP中,AJAX使用POST方式提交中文乱码问题解决
- 关于Struts里提交中文表单到ActionForm后的乱码问题
- JSP中,AJAX使用POST方式提交中文乱码问题解决