文章目录

  • Android与Servlet的互联
    • 手机本地向服务器上传图片
      • client
      • servlet
    • 从服务器下载文件
      • client
      • servlet

Android与Servlet的互联

手机本地向服务器上传图片

client

package net.onest.androidandservletpractice;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;public class MainActivity extends AppCompatActivity {/****实例一、  向服务器上上传图片* 所以应该是Android先读取该文件然后使用输出流向服务器端进行输出,所以应该是网络输出流* 那么这个文件应该是Android上的,所以我们应该在data--》data-->code-cache-->创建文件夹--》引入图片* 由于上传图片是一个耗时任务,所以需要使用子线程来完成* 这里我们就是用handle+message的方法** 在说完客户端后我们就需要考虑服务器端了,首先服务器端应该的获取请求* 然后获取文件的输入流,并将其采用输出流输出到本地* @param savedInstanceState*/private Button btnDownPicture;//2.创建handler对象Handler handler = new Handler(Looper.getMainLooper()){@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);switch (msg.what){case 1:Toast.makeText(getApplicationContext(),"上传图片成功",Toast.LENGTH_LONG);break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//1.获得控件idfindViews();//3.给按钮设置点击事件监听器btnDownPicture.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//上传图片upPicture();}});}上传图片private void upPicture() {//4.创建子线程new Thread(){@Overridepublic void run() {super.run();try {//a.获取网络输出流,地址是服务器的地址URL url = new URL("http://you/AndroidAndServlet/uploadimg");HttpURLConnection con = (HttpURLConnection)url.openConnection();//设置在服务器端的请求方式con.setRequestMethod("POST");OutputStream out = con.getOutputStream();//b.读取手机上的图片然后使用网络输出流输出到网络上//得到图片的绝对路径String file = getFilesDir().getAbsolutePath()+"bg.jpg";InputStream in = new FileInputStream(file);int len=0;while ((len=in.read())!=-1){out.write(len);out.flush();}in.close();out.close();//c.上传完成后,让handle处理ui界面Message msg = handler.obtainMessage();msg.what = 1;handler.sendMessage(msg);} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}.start();}//获得控件idprivate void findViews() {btnDownPicture = findViewById(R.id.btn_downpicture);}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:orientation="vertical"><Buttonandroid:id="@+id/btn_downpicture"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="上传图片" /></LinearLayout>

servlet

 package net.onest.servlet;import java.io.File;
import java.io.FileInputStream;
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;/*** Servlet implementation class UploadImg*/
@WebServlet("/uploadimg")
public class UploadImg extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public UploadImg() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    //1.根据请求获得输入流InputStream in = request.getInputStream();//2.获得输出流,考虑将文件写到位置OutputStream out = new FileOutputStream("F:/copy.jpg");//3.循环写出int len = 0;while((len=in.read())!=-1) {out.write(len);out.flush();}out.close();in.close();}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

从服务器下载文件

client

package net.onest.androidandservletpractice;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;public class DownText extends AppCompatActivity {/*** 示例二、从服务器下载文本到手机并显示* 客户端:所以应该是输入流,将获得到的文本显示在text view框内** 服务器端:采用网络输出流将文件输出* @param savedInstanceState*/private TextView tvDownText;private Button btnDownText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_down_text);//1.获得控件idfindViews();//2.创建异步类对象btnDownText.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Down down = new Down(getApplicationContext(),tvDownText);down.execute("http://192.168.1.100:8080/AndroidAndServlet/DownloadtextServlet");}});//3.调用方法}//获得控件idprivate void findViews() {tvDownText = findViewById(R.id.tv_dowmText);btnDownText = findViewById(R.id.btn_downText);}
}
package net.onest.androidandservletpractice;import android.content.Context;
import android.os.AsyncTask;
import android.widget.TextView;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;public class Down extends AsyncTask<String,Void,String> {private  Context context;private TextView tvDownText;private String result;public Down(Context context, TextView tvDownText) {this.context = context;this.tvDownText = tvDownText;}@Overrideprotected String doInBackground(String... strings) {/*** 在该方法内完成下载文件*/try {//1.获得网络输入流URL url = new URL(strings[0]);InputStream in = new FileInputStream(String.valueOf(url));String file = context.getFilesDir()+"/copy.txt";OutputStream out = new FileOutputStream(file);int str=-1;StringBuffer buf = new StringBuffer();while((str=in.read())!=-1){out.write(str);out.flush();buf.append(str+"\n");}in.close();out.close();result = buf.toString();} catch (MalformedURLException | FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return result;}
}

servlet

package net.onest.servlet;import java.io.FileInputStream;
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;/*** Servlet implementation class DownloadtextServlet*/
@WebServlet("/downloadtext")
public class DownloadtextServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public DownloadtextServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.获取本地输入流InputStream in = new FileInputStream("F:/3.txt");//2.获取本地输出流OutputStream out = response.getOutputStream(); //3.循环读写int len=0;while((len=in.read())!=-1) {out.write(len);out.flush();}in.close();out.close();}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

Android和servlet的互联相关推荐

  1. android servlet 登陆,Android Studio+Servlet+MySql实现登录注册

    一.Android 项目当中设置明文传输 1.设置明文传输的xml 2.引入上述创建的xml android:networkSecurityConfig="@xml/network_secu ...

  2. 徕卡 sl android app,随时随地无缝互联 徕卡发布最新版FOTOS App

    今日,徕卡宣布徕卡FOTOS应用程序(Leica FOTOS)发布最新版本,徕卡摄影师们可以更有效地将日常工作流程整合到使用iOS或Android系统的移动设备中.该应用直观.便捷且快速--可通过WL ...

  3. 手机互联功能 android,亿连手机互联app下载

    亿连手机互联app为爱车人士们设计,有着非常全面的地图导航功能和相关的生活场景服务功能,为用户带来日常行车途中的定位导航.娱乐影视.通话语音.人工呼叫等服务,功能十分的强大,欢迎大家下载体验. 亿连手 ...

  4. android之使用QQ互联实现qq账号登录App

    原文地址:http://www.apkbus.com/android-87615-1-1.html

  5. 无线互联缺的是应用 我更看好Android

    http://dev.chinamobile.com/news/peopletracking/2809.html?from=home 无线互联不缺市场,缺的是应用.其原因,我在N年前就探讨过:应用的需 ...

  6. android系统开发实验,基于Android智能手机的实验管理系统的设计与实现

    摘要: 移动互联时代已经全面向我们走来,渗透到高校学习,生活的每一个角落.智能手机可以随时随地使用的特性,给人们的生活带来了很大的方便.高校实验室建设一直对培养学生的动手能力,增强科研意识和提高独立分 ...

  7. 疯狂Android讲义(第2版)

    <疯狂Android讲义(第2版)> 基本信息 作者: 李刚 [作译者介绍] 出版社:电子工业出版社 ISBN:9787121194856 上架时间:2013-3-5 出版日期:2013 ...

  8. 疯狂Android讲义(第2版)重印10次的超级畅销书

    查看书籍详细信息: 疯狂Android讲义(第2版)(重印10次的超级畅销书-- 编辑推荐 本书第一版荣获"电子工业出版社最畅销图书奖":累计印刷10次,销售码洋二百余万,是And ...

  9. Android操作HTTP实现与服务器通信

    出处:http://www.cnblogs.com/hanyonglu/archive/2012/02/19/2357842.html 本示例以Servlet为例,演示Android与Servlet的 ...

最新文章

  1. cvs linux权限,Linux下CVS+ACL的权限控制是什么? 爱问知识人
  2. 函数声明末尾的“ const”是什么意思? [重复]
  3. 机械学python_机械学习 · python深度学习 · 看云
  4. c语言让电脑发出滴滴声代码,centos命令行控制电脑发出滴滴声——使用beep把警告变为music...
  5. 【华为云技术分享】Linux内核编程环境 (2)
  6. 第 6 章 存储 - 039 - Data Volume 之 bind mount
  7. Android Paint类属性说明
  8. 怎么批量抠复杂的图_抠图怎么抠?一次教你五招!
  9. mysql数据库连接失败_mysql数据库连接失败是什么原因
  10. kalilinux装到u盘上的弊端_暗黑系统安装盘高达14G!kali linux在它面前顿然失色
  11. AJAX from S3 CORS fails on preflight OPTIONS with 403
  12. 修改R语言安装包的默认路径
  13. elementui的分页中的页面查看详情后返回当前页
  14. google注册账号使用手机号提示注册此号码无法用于验证
  15. 【参赛作品65】MOGDB/openGauss的txid_snapshot 数据类型和相关函数
  16. 【C++PTA】7-1 运算符重载 分数类 约分
  17. Unity中的3D数学—02向量与矩阵
  18. Echarts实现中国地图线路图特效(一对多发射点)
  19. python大规模获取豆瓣影评_python爬取豆瓣电影排行榜(requests)
  20. 不同的语言讲述“元旦快乐“

热门文章

  1. 搞死虚拟机-永恒之蓝和shift后门
  2. 看看我们以后谁混得好
  3. js 乱码 反斜杠_js 转义字符及URI编码详解
  4. traceroute的原理与使用
  5. SAM大模型遥感领域测评
  6. pycharm快捷键完整版
  7. 【科研订阅】逐步详解订阅本领域重要的期刊,使其推送新的论文和摘要信息
  8. 腾达t886虚拟服务器怎么设置,腾达(Tenda)T886路由器怎么设置
  9. Redis 过期 key 清理删除策略汇总
  10. static关键字的用法与作用