Form 的GET与POST的区别


转自: http://joe5456536.blog.163.com/blog/static/8537477320123176154590/

表单form中的“method=get”与“method=post”的区别:

使用get时,form数据集被附加到form元素的action属性所指定的URI后面。使用post时,form数据集被包装在请求的body中并被发送。

区别:

1、  安全性
如果用get提交一个验证用户名和密码的form,一般认为是不安全的,因为用户名和密码将出现在URL上,进而出现在浏览器的历史记录中。显然,在对安全性有要求的情况下,应该使用post。

2、  编码

get只能向服务器发送ASCII字符,而post则可以发送整个ISO10646(Unicode)中的字符。

3、  提交的数据长度

IE将请求的URL长度限制为2083个字符,从而限制了get提交的数据长度,如果URL超出了这个限制,提交form时IE不会有任何反映。

4、  缓存

由于一个get得到的结果直接对应到一个URI,所以get的结果页面有可能被浏览器缓存。而post一般则不能

5、  引用和SEO

可以用一个URI引用一个get的结果页面,而post的结果则不能,所以必然不能被搜索引擎搜到。



请求中的中文显示

  由于Tomcat/Jboss Server 对请求字符串的编码为ISO8895-1,而ISO8859-1只支持英文和西欧文字,不支持中文字符,所以当为中文字符时,会出现乱码。为了解决这种问题通常有以下的办法:

①  当form表单中的method=”GET”时,要在Tomcat/JBoss6.0 中的server.xml 中的

<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443"/>

添加 URIEncoding="UTF-8"

<a href="welcome.jsp?name=王二">王二</a> 用上面的方法也能显示中文

②  当form表单中的method=”POST”时,需要在Servlet Class 文件中添加request.setCharacterEncoding("UTF-8");

或是写个Filter Class 文件:

public class SetCharacterEncodingFilter implements Filter {

          protected String encoding = null;
     protected FilterConfig filterConfig = null; 
     protected boolean ignore = true;

          @Override 
     public void destroy() { 
        this.encoding = null; 
        this.filterConfig = null; 
     }

   @Override 
     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws 
            IOException,ServletException{

      if (ignore || (request.getCharacterEncoding() == null)) { 
           String characterEncoding = selectEncoding(request); 
           if (characterEncoding != null)  
             request.setCharacterEncoding(characterEncoding); 
        }

      // Pass control on to the next filter 
        chain.doFilter(request, response);

   }

   @Override 
     public void init(FilterConfig fConfig) throws ServletException {

           this.filterConfig = fConfig; 
        this.encoding = fConfig.getInitParameter("encoding"); 
        String value = fConfig.getInitParameter("ignore");

            if (value == null) this.ignore = true;

            else if (value.equalsIgnoreCase("true")) this.ignore = true;

            else if (value.equalsIgnoreCase("yes")) this.ignore = true;

            else this.ignore = false;

   }

   protected String selectEncoding( @SuppressWarnings("unused") ServletRequest request){

               return (this.encoding);

   }

}

然后在web.xml中添加:

<filter>
              <filter-name>Set Character Encoding</filter-name>
              <filter-class>com.demo.filters.SetCharacterEncodingFilter</filter-class>
              <init-param>
                       <param-name>encoding</param-name>
                       <param-value>UTF-8</param-value>
              </init-param>
       </filter>
   <filter-mapping>
              <filter-name>Set Character Encoding</filter-name>
              <url-pattern>/*</url-pattern>
   </filter-mapping>

③ 在Servlet Class 文件中 添加:

String username = request.getParameter("username");

username = new String(username.getBytes("ISO8859-1"),"UTF-8");

这种方法对“GET”和“POST”都有效。

在JPS文件中要把所有的charSet值都要改为“UTF-8”:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">



字符集兼容顺序:ASCII →ISO8859-1→GB2312→GBK→GB18030→ISO10646/Unicode(UTF-8)

ASCII:只支持英文。ISO8859-1支持英文和西欧文字。BG2312、GBK、GB18030支持英文、西欧文、中文。

ISO10646/Unicode(UTF-8)支持全球所有文字。

你可能感兴趣的:(form)