您的位置:首页 > 理论基础 > 计算机网络

Android学习笔记---27_网络通信之通过GET和POST方式提交参数给web应用,以及使用httpClient,来给web项目以post方式发送参数

2013-03-26 23:43 1111 查看
[align=center]Android学习笔记---27_网络通信之通过GET和POST方式提交参数给web应用,以及使用httpClient,来给web项目以post方式发送参数[/align]

27_网络通信之通过GET和POST方式提交参数给web应用

-------------------------------------------------

1.把数据提交到web应用中:

应用的界面:

视频名称:

text框

时长:

text框

button:保存

b.当用户点击保存的时候,会把这两项参数,提交到web应用中.

----------------------

2.http://localhost:6118/WebGetSetTest/ManagerServlet?title=xiaofeng&timelength=80

这个地址是用来测试的,当用户访问这个地址的时候,会在控制台上打印出:

视频名称:xiaofeng

时长:80

------------------------------

ManagerServlet

public class ManagerServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse

response) throws ServletException, IOException {

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

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

System.out.println("视频名称:"+title);

System.out.println("时长:"+timelength);

}

说明可以正常接收参数.

---------------------------------------------------------

3.当数据小于2kb的时候,可以使用get,post方法往web应用传输数据,当数据大于2kb的时候

最好使用post方法传输数据,因为,很多服务器对地址栏传输的数据长度是有限制的,一般

为2kb,当大于2kb的时候,会截取.那么就会出现数据不能完全接收的情况

--------------------------------------------------------------------

4.a.把刚刚实现的android部署到模拟器上

b.打开tomcat服务器

c.在应用上填写参数点击保存

d.看控制台信息:

视频名称:xixi

时长:87

视频名称:

时长:87

e.问题:当输入中文的时候出现乱码

-------------------------------------------------------

5.乱码问题的解决:

a.乱码产生的原因:在提交时候,没有对中文参数进行URL编码

b.Tomcat服务器默认采用的事ISO8859-1编码得到的参数值

-----------------------------------------------------------

6.03-23 14:49:02.514: WARN/System.err(690): java.net.SocketException: Permission

denied

//权限不够,没有添加访问网络的权限.

-------------------------------------------

7.url.append(URLEncoder.encode(entry.getValue(), coding));//这样可以解决对中文

参数进行编码的问题.

----------------------------------

8.下面是使用android应用程序,利用get,set方法,给web服务器传送数据的所有代码

----------------------------------------------------------------------

11.在代码中:

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

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

如果程序中有大量的参数需要解码,那么会写很多这种代码,很麻烦,所以可以使用过滤器

进行处理

-------------------------------------------------

12.新建过滤器Filter,在项目名上,右键新建Filter,然后输入所在包名和类名(Filter名)

点击NEXT,在filter mapping标签下,点击Add,然后输入/*,表示对所有路径过滤

-----------------------------------------------------------------------------

2013-03-26

-----------------

1.编写过滤器,然后测试,首先执行web应用,然后运行android程序,输入点击提交后

将通过get方式给web应用传值.

-----------------------------------------------

2.在这个过程中使用源码如下:

a.新建Android项目:NewsGetSetManager

b./NewsGetSetManager/src/com/credream/newmanager/NewsGetSetManagerActivity.java

package com.credream.newmanager;

import com.credream.service.NewsService;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.EditText;

import android.widget.Toast;

public class NewsGetSetManagerActivity extends Activity {

/** Called when the activity is first created. */

private
EditText titleText;

private
EditText timelengthText;

@Override

public void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

titleText=(EditText) this.findViewById(R.id.title);

timelengthText= (EditText)this.findViewById(R.id.timelength);

}

public void save(View v){

String title= titleText.getText().toString();

String length=timelengthText.getText().toString();

boolean result=NewsService.save(title,length);//用这样业务类,进行保存

if(result){

Toast.makeText(getApplicationContext(), R.string.success, 1).show();

}else {

Toast.makeText(getApplicationContext(), R.string.error, 1).show();

}

}

}

-------------------------------------------------------------------------------

c./NewsGetSetManager/src/com/credream/service/NewsService.java

package com.credream.service;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLEncoder;

import java.util.HashMap;

import java.util.Map;

public class NewsService

{

/**

* 保存数据

* @param title 标题

* @param length 时长

* @return

*/

public static boolean save(String title, String length)

{

String

path="http://192.168.1.110:6118/WebGetSetTest/ManagerServlet";

Map<String, String> params=new HashMap<String, String>();

params.put("title", title);

params.put("timelength", length);

try{

//return sendGetRequest(path,params);

return sendGetRequest(path,params,"UTF-8");

}catch(Exception e){

e.printStackTrace();

}

return false;

}

//组拼字符串http://localhost:6118/WebGetSetTest/ManagerServlet?

title=xiaofeng&timelength=80

/**

* 发送GET请求

* @param path 请求路径

* @param params 请求参数

* @return 请求是否成功

* @throws Exception

*/

//private static boolean sendGetRequest(String path,Map<String, String>

params)throws Exception{

//没有修改前会出现乱码

private static boolean sendGetRequest(String path,Map<String, String>

params,String coding)throws Exception{

StringBuilder url=new StringBuilder(path);

url.append("?");

for(Map.Entry<String, String> entry:params.entrySet()){

url.append(entry.getKey()).append("=");

//url.append(entry.getValue());

url.append(URLEncoder.encode(entry.getValue(), coding));

//乱码的第一个因素,对传来的字符串进行编码

//

url.append("&");

}

url.deleteCharAt(url.length()-1);

HttpURLConnection conn=(HttpURLConnection)new URL(url.toString

()).openConnection();

conn.setConnectTimeout(5000);

conn.setRequestMethod("GET");

if(conn.getResponseCode()==200){

return true;

}

return false;

}

}

----------------------------------------------------------------------

d./NewsGetSetManager/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.credream.newmanager"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" />

<application

android:icon="@drawable/ic_launcher"

android:label="@string/app_name" >

<activity

android:label="@string/app_name"

android:name=".NewsGetSetManagerActivity" >

<intent-filter >

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

<!--访问网络权限-->

<uses-permission android:name="android.permission.INTERNET"/>

</manifest>

---------------------------------------------------------------------------

e./NewsGetSetManager/res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/title" />

<EditText

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:id="@+id/title"

/>

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/timelength" />

<EditText

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:numeric="integer"

android:id="@+id/timelength"

/>

<!-- android:numeric="integer",指定时长只能输入整形的数据 -->

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/button"

android:onClick="save"

android:id="@+id/button"

/>

<!-- android:id="@+id/button"当点击button的时候执行这个方法 -->

</LinearLayout>

-----------------------------------------------------------

f./NewsGetSetManager/res/values/strings.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="hello">Hello World, NewsGetSetManagerActivity!</string>

<string name="app_name">利用getSet方法给web应用传值</string>

<string name="title">视频标题</string>

<string name="timelength">时长</string>

<string name="button">保存</string>

<string name="success">保存成功</string>

<string name="error">保存失败</string>

</resources>

-----------------------------------------------------------------------------

3.下面是web项目:

a.新建web项目:WebGetSetTest

b./WebGetSetTest/src/com/credram/servlet/ManagerServlet.java

package com.credram.servlet;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

* Servlet implementation class ManagerServlet

*/

public class ManagerServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse

response) throws ServletException, IOException {

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

//当使用了filter就没必要再转码了:

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

//1.这样可以使得tomcat改变以iso8859-1的编码对接收到的数据进行解码

.以解决乱码问题

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

System.out.println("视频名称:"+title);

System.out.println("时长:"+timelength);

}

/**

* @see HttpServlet#doPost(HttpServletRequest request,

HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request, HttpServletResponse

response) throws ServletException, IOException {

// TODO Auto-generated method stub

}

}

---------------------------------------------------------

c./WebGetSetTest/src/com/credream/filter/EncodingFilter.java

package com.credream.filter;

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;

import javax.servlet.http.HttpServletRequest;

public class EncodingFilter implements Filter {

public void destroy() {

// 销毁的时候调用

}

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

//每一次请求到来的时候都会调用这个方法

HttpServletRequest req=(HttpServletRequest) request;

if("GET".equals(req.getMethod())){

EncodingHttpServletRequest wrapper=new

EncodingHttpServletRequest(req);

chain.doFilter(wrapper, response);

}else {

chain.doFilter(request, response);

}

//--request请求对象--->Filter--->wrapper包装后的request对象--

>servlet-->这时候调用的request是包装后的request

}

public void init(FilterConfig fConfig) throws ServletException {

// 当web应用启动的时候就会调用这个方法

}

}

--------------------------------------------------------------------------

d./WebGetSetTest/src/com/credream/filter/EncodingHttpServletRequest.java

package com.credream.filter;

import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;

public class EncodingHttpServletRequest extends HttpServletRequestWrapper

{

private HttpServletRequest request;

public EncodingHttpServletRequest(HttpServletRequest request)

{

super(request);

this.request=request;

}

@Override

public String getParameter(String name)

{

String value=request.getParameter(name);

if(value!=null){

try

{

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

} catch (UnsupportedEncodingException e)

{

e.printStackTrace();

}

}

return value;

}

}

--------------------------------------------------------

e./WebGetSetTest/WebContent/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee ;

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">

<display-name>VideoNews</display-name>

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

<servlet>

<description></description>

<display-name>ListServlet</display-name>

<servlet-name>ListServlet</servlet-name>

<servlet-class>com.credram.servlet.ListServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>ListServlet</servlet-name>

<url-pattern>/ListServlet</url-pattern>

</servlet-mapping>

<servlet>

<description></description>

<display-name>ManagerServlet</display-name>

<servlet-name>ManagerServlet</servlet-name>

<servlet-class>com.credram.servlet.ManagerServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>ManagerServlet</servlet-name>

<url-pattern>/ManagerServlet</url-pattern>

</servlet-mapping>

<filter>

<filter-name>myfilter</filter-name>

<filter-class>com.credream.filter.EncodingFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>myfilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

</web-app>

--------------------------

这样就可以完全解决这个问题.

-----------------------------------------------------------------

5.下面用post的方式给web项目传值:

-----------------------------------------

6.需要了解http协议.

-------------------------

7.这里可以通过http watch了解协议内容:

---------------------------------------------

HTTP协议详解之请求篇

http请求由三部分组成,分别是:请求行、消息报头、请求正文

1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下

:Method Request-URI HTTP-Version CRLF

其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的

HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字

符)。

请求方法(所有方法全为大写)有多种,各个方法的解释如下:

GET 请求获取Request-URI所标识的资源

POST 在Request-URI所标识的资源后附加新的数据

HEAD 请求获取由Request-URI所标识的资源的响应消息报头

PUT 请求服务器存储一个资源,并用Request-URI作为其标识

DELETE 请求服务器删除Request-URI所标识的资源

TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT 保留将来使用

OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

应用举例:

GET方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获

取资源,eg:GET /form.html HTTP/1.1 (CRLF)

POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。

eg:POST /reg.jsp HTTP/ (CRLF)

Accept:image/gif,image/x-xbit,... (CRLF)

...

HOST:www.guet.edu.cn (CRLF)

Content-Length:22 (CRLF)

Connection:Keep-Alive (CRLF)

Cache-Control:no-cache (CRLF)

(CRLF) //该CRLF表示消息报头已经结束,在此之前为消息报头

user=jeffrey&pwd=1234 //此行以下为提交的数据

HEAD方法与GET方法几乎是一样的,对于HEAD请求的回应部分来说,它的HTTP头部中包含的信

息与通过GET请求所得到的信息是相同的。利用这个方法,不必传输整个资源内容,就可以得

到Request-URI所标识的资源的信息。该方法常用于测试超链接的有效性,是否可以访问,以

及最近是否更新。

----------------------------------------------------------

7.用post方式给web项目传值的所有源码

-------------------------------------------------------------------

a.只需修改Android项目NewsGetSetManager中的这个类:

/NewsGetSetManager/src/com/credream/service/NewsService.java

package com.credream.service;

import java.io.OutputStream;

import java.io.UnsupportedEncodingException;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLEncoder;

import java.util.HashMap;

import java.util.Map;

import android.media.MediaRecorder.OutputFormat;

import android.provider.ContactsContract.Contacts.Data;

public class NewsService

{

/**

* 保存数据

* @param title 标题

* @param length 时长

* @return

*/

public static boolean save(String title, String length)

{

String

path="http://192.168.1.110:6118/WebGetSetTest/ManagerServlet";

Map<String, String> params=new HashMap<String, String>();

params.put("title", title);

params.put("timelength", length);

try{

//return sendGetRequest(path,params);

//return sendGetRequest(path,params,"UTF-8");

return sendPOSTRequest(path,params,"UTF-8");

}catch(Exception e){

e.printStackTrace();

}

return false;

}

/**

* 发送post请求

* @param path 请求路径

* @param params 请求参数

* @param string 编码

* @return 请求是否成功

* @throws Exception

*/

//----------------------------------------添加了这个类---------------------------

private static boolean sendPOSTRequest(String path,

Map<String, String> params, String coding) throws

Exception

{

//title=lidewei&timelength=90

StringBuilder data=new StringBuilder();

if(params!=null && !params.isEmpty()){

for(Map.Entry<String, String> entry:params.entrySet()){

data.append(entry.getKey()).append("=");

//url.append(entry.getValue());

data.append(URLEncoder.encode(entry.getValue(), coding));

//乱码的第一个因素,对传来的字符串进行编码

data.append("&");

}

data.deleteCharAt(data.length()-1);

}

byte[] entity=data.toString().getBytes();//得到实体数据

HttpURLConnection conn= (HttpURLConnection) new URL(path).openConnection();

conn.setConnectTimeout(5000);

conn.setRequestMethod("POST");

conn.setDoOutput(true);//允许

conn.setRequestProperty("Content-Type", "application/x-www-form-

urlencoded");

conn.setRequestProperty("Content-Length", String.valueOf(entity.length));

OutputStream outputStream=conn.getOutputStream();

outputStream.write(entity);//数据写到了缓存中

//只有在我们取得响应的http协议的某个部分的时候,请求才会真正的发送出去.

if (conn.getResponseCode()==200)

{

return true;

}

return false;

}

//----------------------------------------添加了这个类------------end----------

//组拼字符串http://localhost:6118/WebGetSetTest/ManagerServlet?

title=xiaofeng&timelength=80

/**

* 发送GET请求

* @param path 请求路径

* @param params 请求参数

* @return 请求是否成功

* @throws Exception

*/

//private static boolean sendGetRequest(String path,Map<String, String>

params)throws Exception{

//没有修改前会出现乱码

private static boolean sendGetRequest(String path,Map<String, String>

params,String coding)throws Exception{

StringBuilder url=new StringBuilder(path);

url.append("?");

for(Map.Entry<String, String> entry:params.entrySet()){

url.append(entry.getKey()).append("=");

//url.append(entry.getValue());

url.append(URLEncoder.encode(entry.getValue(), coding));

//乱码的第一个因素,对传来的字符串进行编码

//

url.append("&");

}

url.deleteCharAt(url.length()-1);

HttpURLConnection conn=(HttpURLConnection)new URL(url.toString

()).openConnection();

conn.setConnectTimeout(5000);

conn.setRequestMethod("GET");

if(conn.getResponseCode()==200){

return true;

}

return false;

}

}

--------------------------------------

b.修改web项目WebGetSetTest中的类:

/WebGetSetTest/src/com/credream/filter/EncodingFilter.java

package com.credream.filter;

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;

import javax.servlet.http.HttpServletRequest;

public class EncodingFilter implements Filter {

public void destroy() {

// 销毁的时候调用

}

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

//每一次请求到来的时候都会调用这个方法

HttpServletRequest req=(HttpServletRequest) request;

if("GET".equals(req.getMethod())){

EncodingHttpServletRequest wrapper=new

EncodingHttpServletRequest(req);

chain.doFilter(wrapper, response);

}else {

//--------------------------------------添加了这个部分解决乱码问题----------

req.setCharacterEncoding("UTF-8");

//--------------------------------------添加了这个部分解决乱码问题--------end--

//解决乱码问题

chain.doFilter(request, response);

}

//--request请求对象--->Filter--->wrapper包装后的request对象--

>servlet-->这时候调用的request是包装后的request

}

public void init(FilterConfig fConfig) throws ServletException {

// 当web应用启动的时候就会调用这个方法

}

}

-------------------------------------------------------------------------

8.可以用httpClient这个开源项目,来跟web应用打交道的话,那么会方便很多

但是理论上性能不如直接组拼http协议好,要访问cookie,session的时候,使用开源项目的

httpClient的时候,会提高开发速度.

------------------------------------------------------------------

9.使用httpClient进行post请求发送的源码:

a.需要修改android项目类中的代码:

/NewsGetSetManager/src/com/credream/service/NewsService.java

package com.credream.service;

import java.io.IOException;

import java.io.OutputStream;

import java.io.UnsupportedEncodingException;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLEncoder;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.apache.http.HttpResponse;

import org.apache.http.NameValuePair;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.message.BasicNameValuePair;

import android.media.MediaRecorder.OutputFormat;

import android.provider.ContactsContract.Contacts.Data;

public class NewsService

{

/**

* 保存数据

* @param title 标题

* @param length 时长

* @return

*/

public static boolean save(String title, String length)

{

String

path="http://192.168.1.110:6118/WebGetSetTest/ManagerServlet";

Map<String, String> params=new HashMap<String, String>();

params.put("title", title);

params.put("timelength", length);

try{

//return sendGetRequest(path,params);

//return sendGetRequest(path,params,"UTF-8");

//return sendPOSTRequest(path,params,"UTF-8");

return sendHttpClientRequest(path,params,"UTF-8");

}catch(Exception e){

e.printStackTrace();

}

return false;

}

/**通过httpClient的时候,发送post请求

*使用httpClient的时候,不需要导入jar文件,因为android,已经集成了这个功能

* @param path

* @param params

* @param string

* @return

* @throws IOException

*/

private static boolean sendHttpClientRequest(String path,

Map<String, String> params, String coding) throws

IOException

{

List<NameValuePair> pairs=new ArrayList<NameValuePair>();//存放请

求参数

if(params!=null && !params.isEmpty()){

for(Map.Entry<String, String> entry:params.entrySet()){

pairs.add(new BasicNameValuePair(entry.getKey(),

entry.getValue()));

}

}

//采用

//编码

UrlEncodedFormEntity entity=new UrlEncodedFormEntity

(pairs,coding);

HttpPost httpPost=new HttpPost(path);

httpPost.setEntity(entity);

DefaultHttpClient client=new DefaultHttpClient();

//可以看做一个浏览器

HttpResponse response=client.execute(httpPost);

if (response.getStatusLine().getStatusCode()==200)

{

return true;

}

return false;

}

/**

* 发送post请求

* @param path 请求路径

* @param params 请求参数

* @param string 编码

* @return 请求是否成功

* @throws Exception

*/

private static boolean sendPOSTRequest(String path,

Map<String, String> params, String coding) throws

Exception

{

//title=lidewei&timelength=90

StringBuilder data=new StringBuilder();

if(params!=null && !params.isEmpty()){

for(Map.Entry<String, String> entry:params.entrySet()){

data.append(entry.getKey()).append("=");

//url.append(entry.getValue());

data.append(URLEncoder.encode(entry.getValue(), coding));

//乱码的第一个因素,对传来的字符串进行编码

data.append("&");

}

data.deleteCharAt(data.length()-1);

}

byte[] entity=data.toString().getBytes();//得到实体数据

HttpURLConnection conn= (HttpURLConnection) new URL(path).openConnection();

conn.setConnectTimeout(5000);

conn.setRequestMethod("POST");

conn.setDoOutput(true);//允许

conn.setRequestProperty("Content-Type", "application/x-www-form-

urlencoded");

conn.setRequestProperty("Content-Length", String.valueOf(entity.length));

OutputStream outputStream=conn.getOutputStream();

outputStream.write(entity);//数据写到了缓存中

//只有在我们取得响应的http协议的某个部分的时候,请求才会真正的发送出去.

if (conn.getResponseCode()==200)

{

return true;

}

return false;

}

//组拼字符串http://localhost:6118/WebGetSetTest/ManagerServlet?

title=xiaofeng&timelength=80

/**

* 发送GET请求

* @param path 请求路径

* @param params 请求参数

* @return 请求是否成功

* @throws Exception

*/

//private static boolean sendGetRequest(String path,Map<String, String>

params)throws Exception{

//没有修改前会出现乱码

private static boolean sendGetRequest(String path,Map<String, String>

params,String coding)throws Exception{

StringBuilder url=new StringBuilder(path);

url.append("?");

for(Map.Entry<String, String> entry:params.entrySet()){

url.append(entry.getKey()).append("=");

//url.append(entry.getValue());

url.append(URLEncoder.encode(entry.getValue(), coding));

//乱码的第一个因素,对传来的字符串进行编码

//

url.append("&");

}

url.deleteCharAt(url.length()-1);

HttpURLConnection conn=(HttpURLConnection)new URL(url.toString

()).openConnection();

conn.setConnectTimeout(5000);

conn.setRequestMethod("GET");

if(conn.getResponseCode()==200){

return true;

}

return false;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐