导读:不管是之前做.NET还是现在做Java的项目,都有涉及到get和post请求,第一次遇到的时候,应该是在人事系统的时候,那时候说要总结,结果一直没有总结。现在,做一个初步的总结,连着总结一下提交请求时的乱码问题!
一、联系和区别
一般在浏览器中输入网址访问资源都是通过GET方式;在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交。那么结合到项目中的运用,这两者最本质的区别,大概就是get一般用于获取资源信息,而post一般用于更新资源信息。
联系:
参数的大小都是没有限制的。在HTTP协议规范中,没有对URL的长度进行限制,不存在参数的上限问题,有限制的,是浏览器或者服务器对于整个URL的长度限制。
区别:
1,get提交将参数放到了URL的后面,以?分离,如:query_student_list.jsp?pageNo=1&pageSize=10。post不会将参数放到URL的后面,而是放到HTTP的协议体中。
2,获取get和post请求的方式不同,对于get来说,可以通过HttpServletRequest的getRequestURL方法和getQueryString方法,得到请求路径和参数。而对于post请求,需要用getParameterMap方法遍历得到。
3,post的安全性比post安全性要高。这一点和两种提交方式的参数放置位置有关,get方式中,参数将出现在URL上,这样容易泄露一些信息。
二、乱码问题
解决乱码问题,首先看在那些地方进行了编码和解码,如图:
通过GET方式提交的数据都是拼接在URL后面来提交的,tomcat服务器会根据设置的URIEncoding来进行解码,如果没有设置则会使用默认的ISO-8859-1来解码。假如我们在页面将编码设置为UTF-8,而URIEncoding设置的不是或者没有设置,那么服务器进行解码时就会产生乱码。这个时候我们一般可以通过new String(request.getParameter("name").getBytes("iso-8859-1"),"utf-8")
的形式来获取正确数据。除了这个方法意外,也可以在tomcat服务器中进行编码配置,来解决get方式提交的乱码问题,打开tomcat目录下的conf文件夹,找到server.xml文件,找到代码段:<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="GB18030" />修改其中的URIEncoding参数为UTF-8.
对于POST方式,它采用的编码也是由页面来决定的即contentType。当我通过点击页面的submit按钮来提交表单时,浏览器首先会根据ontentType的charset编码格式来对POST表单的参数进行编码然后提交给服务器,在服务器端同样也是用contentType中设置的字符集来进行解码,我们也可以自己设置字符集编码:request.setCharacterEncoding(charset) 。
三、总结
对于get和post这两种提交方式,应该分情况而具体应用,一味的使用get方式提交或者一味的使用post方式提交,都是不可取的。(PS:貌似自己在使用的过程中,都是只管结果的,别人怎么用,自己就怎么写,唉!)