表单传输后台乱码是什么原因?表单数据获取方法中get/post区别解析
在JSP传输数据时,不管是表单传输或者ajax操作,它们的method或者type都是get或者post,并且它们的默认传输编码为”ISO8859-1”.
1.GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,URL有长度限制,所以表单要传输大量数据不建议用get方式
2.POST把提交的数据则放置在是HTTP包的包体中。
总结一下,Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为”GET”,实质上,GET和POST只是发送机制不同,并不是一个取一个发!
上面浅显的解释只是为了理解为什么这么来解决乱码。
当我们用get时,form表单默认get传输,URL传输方式。
过滤器:是在javaweb中,你传入的request、response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action
所以当你使用过滤器时是不能过滤设置URL数据里的编码的,但是可以过滤post这种HTTP包体里的数据,所以做项目的时候可以写个编码过滤器很多编码问题都能解决
第一种解决方案:
过滤器代码:
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 EncodingFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); chain.doFilter(request, response); } public void init(FilterConfig fConfig) throws ServletException { } }
第二种解决方案:
对于get方式的乱码,一般都是通过修改tomcat里面的conf文件夹server.xml文件来解决的
在指定位置加上一句 URIEncoding=”UTF-8” 注意:是URI不是URL,它们两个区别不懂的同学建议查一下,挺重要的。
我以前就写成URLEncoding导致一直解决不了乱码问题。
第三种解决方案
当get方式的乱码,不想通过服务器解决,有的人不用UTF-8的编码,因为你设置的服务器编码就默认一直是这种编码了
就可以通过手工强转的方式
String data = "需要转码的数据"; byte source [] = data.getBytes("iso8859-1");//得到客户端提交的原始数据 data = new String (data.getBytes("iso8859-1"),"UTF-8");//转换成目标编码
上一篇: HTML5利用json对象来存取复杂数据
下一篇: HTML5面向对象的游戏开发简单实例总结