Android通过get方法访问Tomcat服务器,发送账号密码,检测登陆是否成功。

之前讲过Android通过socket与后台服务器通信,后台程序可开启多线程响应不同客户端需求。现采用第三方web服务器Tomcat做后台服务器,利用servlet进行业务处理。
Http通信存在两种方法,一个是get方式,另一种是post方式。本文介绍get方式。
本文android客户端通过重写url的方式,利用java中的URL和HttpURLConnection两个网络传输类。
android端利用java中的io输入输出流InputStream()来读取数据到缓冲数组中去。有时候可能检测不到输入流的大小,可先申请大点内存,然后利用String(data,0,len).trim()去生成新的string。
用模拟器测试固定ip为10.0.2.2.端口号与tomcat设置的访问端口一致即可。访问域名具体看tomcat中web.xml文件的关于servlet-mapping的设置。`

public void login(View v){
final String nameString = userName.getText().toString();
final String password = userPassword.getText().toString();
new Thread(new Runnable(){
public void run(){
//要访问的HttpServlet
String urlStr=”http://10.0.2.2:8080/myHttp/LoginServlet?”;
//要传递的数据
String query = “username=”+nameString+”&password=”+password;
urlStr+=query;
try{
URL url =new URL(urlStr);
//获得连接
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
if(true){
//获得输入流
InputStream in = conn.getInputStream();
//创建一个缓冲字节数
byte[] buffer = new byte[1024];
// byte[] buffer = new byte[in.available()]读取不了数//据。
//在输入流中读取数据并存放到缓冲字节数组中
int len=in.read(buffer);
//将字节转换成字符串
String msg = new String(buffer).trim();
System.out.println(“返回消息:”+msg+”消息长度:”+len);
//如果传输是boolean型数据,则利用函数boolean // String temp=new String(buffer,0,len).trim();
//flag=Boolean.parseBoolean(temp);
in.close();//关闭数据流

}
else{
    //否则就关闭连接
    conn.disconnect();
    System.out.println("连接失败");
}
}catch(Exception e){
    System.out.println("错误信息:"+e.getMessage());
}
    }
}).start();

}
服务器端利用tomcat-web服务器来响应前台的请求。服务器端只需实现基于HttpServlet的类中的get方法,利用HttpServletRequest来获取请求,然后将处理过的结果通过PrintWriter给HttpServletResponse,返回给客户端。
public class LoginServlet extends HttpServlet{
protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,
IOException{
String username = request.getParameter(“username”);
String password = request.getParameter(“password”);
System.out.println(username+”:”+password);
response.setContentType(“text/html”);
response.setCharacterEncoding(“utf-8”);
PrintWriter out = response.getWriter();
String msg = null;
if(username != null && username.equals(“lg”) && password != null && password.equals(“123”)){
msg=”登录成功”;
}
else {
msg = “登录失败”;
}
System.out.println(“返回消息:”+msg);
out.print(msg);
out.flush();
out.close();
System.out.println(“out.close”);
}
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
doGet(request,response);
}
}
“`

对比socket通信和第三方web服务器框架通信方式,我们可以发现,客户端实现基本相同,而服务器端则有很大不同。Tomcat已帮助开发者解决了多用户同时访问的性能容器问题,而且只需要开发者实现doget和dopost方法,即可返回响应,对具体的通信细节完成隐藏。
总结:客户端采用Url访问,利用url.openConnection()方法去访问(如同new socket(ip,port))同时若成功就返回HttpUrlConnection对象(当然java中特有的差错检测机制会检测联网是否成功。太神奇了。。。。)
服务器端重写Get方法(参数通过url传递过来,只允许少量数据传输),处理数据,返回即可。注意Tomcat中servlet的配置和访问域名部署,通过设置返回的数据类型response.setContentType(“text/html”)和编码类型,使得浏览器测试可以成功,否则浏览器显示的为乱码,android客户端数据接收已是乱码(待定)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一种方法 使用标准的JAVA接口 1 将用户名和密码等用Map泛型封装 再使用StringBuffer 转换成一串字符串 然后新建URL打开openConnection 得到 httpURLConnection 设置最长连接时间和setRequestMethod请求方法 用GET还是POST 提交数据用POST 打开输入和输出流 获取上传信息 字节大小以及长度 设置请求体的类型是文本类型 获得输出流 向服务器输出数据 获得服务器响应的结果和状态码 如果 返回码等于200 得到服务器返回的输入流 将输入流转换成指定编码的字符串并返回 就可以成功提交并得到服务器返回的信息 第二种方法 使用标准Apache接口 02 03 15 19 30 + 06 12 02 03 15 19 30 31 + 06 12 1 将用户名和密码等用Map泛型封装 再使用List<NameValuePair> list new ArrayList<NameValuePair> ; 转换成一串字符串 然后新建URL打开openConnection 得到 httpURLConnection 设置最长连接时间和setRequestMethod请求方法 用GET还是POST 提交数据用POST 打开输入和输出流 获取上传信息 字节大小以及长度 设置请求体的类型是文本类型 获得输出流 向服务器输出数据 获得服务器响应的结果和状态码 如果 返回码等于200 得到服务器返回的输入流 将输入流转换成指定编码的字符串并返回 就可以成功提交并得到服务器返回的信息">第一种方法 使用标准的JAVA接口 1 将用户名和密码等用Map泛型封装 再使用StringBuffer 转换成一串字符串 然后新建URL打开openConnection 得到 httpURLConnection 设置最长连接时间和setRequestMethod请求方法 用GET还是POST 提交数据用POST [更多]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值