欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

表单传输后台乱码是什么原因?表单数据获取方法中get/post区别解析

程序员文章站 2022-05-10 22:42:42
在JSP传输数据时,不管是表单传输或者ajax操作,它们的method或者type都是get或者post,并且它们的默认传输编码为”ISO8859-1”....

在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文件来解决的
表单传输后台乱码是什么原因?表单数据获取方法中get/post区别解析
在指定位置加上一句 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");//转换成目标编码