……天天向上

好的想法总是无穷无尽

统计

留言簿(1)

阅读排行榜

评论排行榜

GET和POST两种提交表单的方式说明

1.Get方式
这种方式是最简单的参数传递方式。例如:
http://www.javaweb.cc/get.do?a=3&b=5&c=7

这个url中,a、b和c是url参数,具体的说是参数名,与之用“=”隔开的是对应的参数值。也就是说参数a的值为3、参数b的值为5、参数c的值为7。get.do是请求地址,紧跟这个地址的参数a需要用“?”作为分隔符,其余参数用“&”做分隔符。

这种get请求发起后,服务器端可以通过request.getParameter()方法来获得参数值。如要获得参数a的值可以通过request.getParameter("a");


2.Post方式
相比get方式,post方式更为隐蔽。例如:http://www.javaweb.cc/post.do
在这个url中,你看不到任何参数,真正的参数隐藏在Http请求的数据体中。如果了解网络监听的话,就会对这一点深有体会。
我们举一个简单的例子:通过表单做登录操作。
我们简化一个登录表单:

<form action="login.do" method="post">
<ul>
<li><label for="username">用户名</label><input id="username" name="username" type="text" /></li>
<li><label for="password">密码</label><input id="password" type="password" /></li>
<li><label><input type="submit" value="登录" /> <input
type="reset" value="重置" /></label></li>
</ul>
</form>
表单中有2个字段,用户名(username)和密码(password)
注意form标签中的method参数值是post!

即便是表单,在服务器端仍然可以通过request.getParameter()方法来获得参数值。
Post方式,其实是将表单字段和经过编码的字段值经过组合以数据体的方式做了参数传递。

经过一番阐述,相信大家对两种网络参数传递方式都有所了解了。
Get方式比较简单,通过构建一个简单HttpURLConnection就可以获得,我们暂且不说。
我们主要来描述一下如何通过java代码构建一个表单提交。
仔细研究表单提交时所对应的http数据体,发现其表单字段是以如下方式构建的:

arg0=urlencode(value0)&arg1=urlencode(value1)
当然,尤其要注意字段名,参数名只不能使用中文这类字符。
3、通过httpclient来模拟POST提交表单:


import java.util.Random;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

/**
 * Example how to use multipart/form encoded POST request.
 
*/

public class ClientMultipartFormPost {



    
public static void ExecuClient(String userName, String wlanuserip2,
            String wlanacip2) 
throws Exception {
        DefaultHttpClient httpclient 
= new DefaultHttpClient();
        String a1
="http://172.21.16.38:8080/bpss/jsp/do_login.jsp";
        
try {
            HttpGet httpget 
= new HttpGet(a1);
            HttpResponse response 
= httpclient.execute(httpget);
            HttpEntity entity 
= response.getEntity();
            System.out.println(
"Login form get: " + response.getStatusLine());
            EntityUtils.consume(entity);
            
//这里需要生成并传递一个COOKIE过去
            System.out.println("Initial set of cookies:");
            List
<Cookie> cookies = httpclient.getCookieStore().getCookies();
            
if (cookies.isEmpty()) {
                System.out.println(
"None");
            }
 else {
                
for (int i = 0; i < cookies.size(); i++{
                    System.out.println(
"" + cookies.get(i).toString());
                }

            }

            HttpPost httppost 
= new HttpPost(a1);

            List
<NameValuePair> nvps = new ArrayList<NameValuePair>();
            nvps.add(
new BasicNameValuePair("local""zh_CN"));
            nvps.add(
new BasicNameValuePair("USER", userName));
            nvps.add(
new BasicNameValuePair("PWD""123456"));
            nvps.add(
new BasicNameValuePair("pwdtype""1"));
            nvps.add(
new BasicNameValuePair("actiontype""LOGIN"));
            nvps.add(
new BasicNameValuePair("logonsessid"""));

            httppost.setEntity(
new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

            response 
= httpclient.execute(httppost);
            entity 
= response.getEntity();
            System.out.println(
"测试地址: " + a1);
            System.out.println(
"Login form get: " + response.getStatusLine());
            EntityUtils.consume(entity);
            
            
//读出COOKIE信息
            System.out.println("Post logon cookies:");
            cookies 
= httpclient.getCookieStore().getCookies();
            
if (cookies.isEmpty()) {
                System.out.println(
"None");
            }
 else {
                
for (int i = 0; i < cookies.size(); i++{
                    System.out.println(
"" + cookies.get(i).toString());
                }

            }


        }
 finally {
            
try {
                httpclient.getConnectionManager().shutdown();
// 总是关闭连接
            }
 catch (Exception ignore) {
                System.out.println(ignore.getMessage());
            }

        }

    }


posted on 2012-06-06 17:09 japper 阅读(4451) 评论(1)  编辑  收藏 所属分类: Java

评论

# re: GET和POST两种提交表单的方式说明[未登录] 2014-05-05 14:08 dd

youyong  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: