本文介绍了如何使用Android与Servlet进行简单交互,使App拥有自己的服务器。本文的技术主要是使用网络连接来实现交互。
1.Android从服务器中下载字符串
Android端:
/**
* 接收服务端发送的字符串
*/
private void getDownStr(final String s) {
//android中无法进行耗时操作,这个操作应放在线程中
new Thread(){
@Override
public void run() {
//从网络上获取str
URL url= null;
try {
url = new URL(s);
Log.e("a",s);
//获取网络输入流
URLConnection urlConnection=url.openConnection();
InputStream in= urlConnection.getInputStream();
Log.e("msg","出错了");
//创建字符流读取数据
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(in, "utf-8"));
String str=bufferedReader.readLine();
Log.e("str",str);
//关闭流
bufferedReader.close();
in.close();
//子线程无法更改UI界面,这里使用Handler+Message的方式进行交互
//创建Message对象
Message message=new Message();
message.what=1;
message.obj=str;
//发送message
handler.sendMessage(message);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
服务器端:
package net.xyz.connandroid;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 向客户端传输字符串
* @author lenovo
*
*/
@WebServlet("/DownStr")
public class DownStr extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DownStr() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码方式
response.setContentType("text/html;charset=utf-8");
String str="张三:123456";
//获取PrinterWriter对象
PrintWriter printWriter=response.getWriter();
//向客户端发送数据
printWriter.write(str);
System.out.println("字符串发送完毕");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
2.Android从服务器端下载图片
android:
/**
* 接收服务端发送的图片
*/
private void getDownImg(final String s ) {
new Thread(){
@Override
public void run() {
try {
//获取网络上的资源
URL url=new URL(s);
URLConnection urlConnection=url.openConnection();
InputStream in=urlConnection.getInputStream();
//把输入流解析成一个Bitmap对象
Bitmap bitmap= BitmapFactory.decodeStream(in);
//用message将bitmap对象显示在客户端
Message message=new Message();
message.what=2;
message.obj=bitmap;
handler.sendMessage(message);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
服务器:
package net.xyz.connandroid;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 向客户端发送图片
*/
@WebServlet("/DownImgServlet")
public class DownImgServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DownImgServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码方式
response.setContentType("text/html;charset=utf-8");
//获取本地输入流读取图片,输出流发送图片
FileInputStream in=new FileInputStream("D:\\学习\\图片\\1.jpg");
OutputStream out=response.getOutputStream();
//用字节流读取文件
int len=-1;
while((len=in.read())!=-1) {
out.write(len);
}
//关闭连接
out.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
3.客户端向服务器上传键值对信息(以url的方式传送)
Andorid端
/**
* 向服务器发送键值对信息
*/
private void upKeyValue(final String s) {
new Thread(){
@Override
public void run() {
try {
//设置键值对信息
String keyValue="?name=张三&password=123";
Log.e("key",s+keyValue);
//获取URL对象
URL url=new URL(s+keyValue);
//打开url连接
url.openStream();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
服务器端:
package net.xyz.connandroid;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 接收客户端发送的键值对信息
*/
@WebServlet("/UpKeyValueServlet")
public class UpKeyValueServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UpKeyValueServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码方式
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取上传的键值对信息
String name=request.getParameter("name");
String password=request.getParameter("password");
response.getWriter().write(name+":"+password);
System.out.println(name+":"+password);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
4.向服务器上传字符串信息
Android端:
/**
* 向服务器提交敏感字符信息
*/
private void upStr(final String s) {
new Thread(){
@Override
public void run() {
try {
//使用URL和httpURLConnection进行网络连接
URL url=new URL(s);
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
//设置编码方式
conn.setRequestMethod("POST");
//获取网络输出流
OutputStream outputStream=conn.getOutputStream();
//获取待发送的字符串
String str=editText.getText().toString().trim();
outputStream.write(str.getBytes());
//必须要获取网络输入流保证客户端与服务端建立连接
conn.getInputStream();
outputStream.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
服务器端:
扫描二维码关注公众号,回复:
11366008 查看本文章
package net.xyz.connandroid;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 接收客户端发送的敏感字符串
*/
@WebServlet("/UpStr")
public class UpStr extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UpStr() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码方式
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取网络输入流
InputStream in=request.getInputStream();
//用字符流读取数据
BufferedReader read=new BufferedReader(new InputStreamReader(in,"utf-8"));
String str=read.readLine();
if(str!=null) {
response.getWriter().write(str);
}
System.out.println(str);
in.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
5.向服务器端上传图片
Android端:
/**
* 向服务端上传图片信息
* @param s
*/
private void UpImg(final String s) {
new Thread(){
@Override
public void run() {
try {
URL url=new URL(s);
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
//设置编码方式
conn.setRequestMethod("POST");
//获取输入流
InputStream in=getResources().openRawResource(R.raw.fish);
//获取网络输出流
OutputStream out=conn.getOutputStream();
//循环读写
int len=-1;
while((len=in.read())!=-1){
out.write(len);
}
//获取连接
conn.getInputStream();
//关闭流
in.close();
out.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
服务器端:
package net.xyz.connandroid;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 获取客户端上传的图片
*/
@WebServlet("/UpImg")
public class UpImg extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UpImg() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码方式
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String path=this.getServletContext().getRealPath("/");
//获取网络输入流
InputStream in=request.getInputStream();
//获取本地输出流
OutputStream out=new FileOutputStream(path+"b.jpg");
//循环读写
int len=-1;
while((len=in.read())!=-1) {
out.write(len);
}
//关闭流
out.close();
System.out.println("图片接收完毕");
response.getWriter().write("OK");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}