Android连接Tomcat服务器

本文介绍了如何从Android客户端发送GET和POST请求到Tomcat服务器,同时解决请求过程中的乱码问题。在GET请求中,参数通过URL传递,而POST请求则通过额外的流传递,允许传递更大的数据量。对于乱码问题,服务器端需统一编码为UTF-8,并在必要时进行编码转换。在Tomcat的server.xml中配置URIEncoding="UTF-8"以及在服务端和客户端设置字符编码可以有效防止乱码。
摘要由CSDN通过智能技术生成

在保证服务器是正常状态时,将从Android模拟器上发送请求给服务端并接收服务端返回来的响应。

保证HttpServlet配置正常。可以通过在浏览器输入配置的地址,若能正常响应,那么在Android中去请求的话也是能正常响应的。

这里列举的Demo是在activity中有两个按钮,分别执行get请求和post请求的同时传递参数到服务端,并将服务端返回的信息显示到textview上。

客户端

一、get请求:

第一步:建立请求,连接服务器。

<span style="white-space:pre">			</span>String name = URLEncoder.encode("小红", "utf-8");   //中文输入先指定编码,不然会出现乱码
			//get请求带参数的URL地址   http://192.168.1.112:8080/app/myweb?username=小红&password=abcd  
			URL url = new URL(httpUrl+"?username="+name+"&password=abcd"); 
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod("GET");	//请求方式
			conn.setConnectTimeout(15000);  //设置连接超时
			conn.setReadTimeout(10000);  //设置读取超时
			conn.connect();  //建立连接
这里已经将参数加进去了。由于get请求的参数是直接加在URL地址之后,形式如同 http://192.168.1.112:8080/app/myweb?username=小红&password=abcd    问号后面就是携带的参数,中文参数需要先指定编码集,防止乱码。若没有参数则构造URL时就只需要协议地址。

第二步:服务器请求连接成功后,服务器接到参数,并作出响应,客户端只需从连接中的流中读出响应即可。

<span style="white-space:pre">			</span>InputStream in = conn.getInputStream();
			BufferedReader br = new BufferedReader(new InputStreamReader(in, "utf-8"));  //得到连接服务器的缓冲流
			String line;
			StringBuilder sb = new StringBuilder();
			while((line=br.readLine()) != null){    //从服务中读取请求返回的数据
				sb.append(line);
			}

最后看看get请求的完整Demo:

<span style="white-space:pre">	</span>/*get请求方式连接服务器   get请求传递参数在url后面加参数*/
	public String getHttpDoget(String httpUrl){
		try {
			String name = URLEncoder.encode("小红", "utf-8");   //中文输入先指定编码,不然会出现乱码
			//get请求带参数的URL地址   http://192.168.1.112:8080/app/myweb?username=小红&password=abcd  
			URL url = new URL(httpUrl+"?username="+name+"&password=abcd"); 
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod("GET");	//请求方式
			conn.setConnectTimeout(15000);  //设置连接超时
			conn.setReadTimeout(10000);  //设置读取超时
			conn.connect();  //建立连接
			
			InputStream in = conn.getInputStream();
			BufferedReader br = new BufferedReader(new InputStreamReader(in, "utf-8"));  //得到连接服务器的缓冲流
			String line;
			StringBuilder sb = new StringBuilder();
			while((line=br.readLine()) != null){    //从服务中读取请求返回的数据
				sb.append(line);
			}
			return sb.toString();
			
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

按钮监听中,由于请求服务器连接是耗时操作,需要放到子线程中,这里采用的是AsyncTask异步操作实现,若需要学习AsyncTask异步操作请参见:http://blog.csdn.net/tom_xiaoxie/article/details/49803413

<span style="white-space:pre">		</span>mConnecyBtn = (Button) findViewById(R.id.http_doget_btn);
		mConnecyBtn.setOnClickListener(new OnClickListener() {
			String httpUrl = "http://192.168.1.112:8080/app/myweb";
			@Override
			public void onClick(View v) {
				new AsyncTask<String, Void, String>(){
					@Override
					protected String doInBackground(String... params) {
			
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值