文章目录

  • 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. vue+ivew-admin开发项目,内存占用过大解决办法
  2. FastDFS分布文件系统
  3. 遵义医科大学计算机专业好吗,遵义医科大学专业评价
  4. [vue] 说说你对proxy的理解
  5. 如何使用搜索技巧来成为一名高效的程序员
  6. 2个recordset合并_史上最全!8种办法玩转Excel文字合并,总有一款适合你!
  7. github 搜索_如何通过GitHub快速的搜索资源?
  8. linux下安装软件后的环境变量设置
  9. vs2005下使用ASPNetPage分页的例子1
  10. 漫游飞行_涨知识了,手机的飞行模式还能这么用?
  11. matlab电力建模仿真软件,MATLAB/Simulink电力系统建模与仿真
  12. 关灯游戏 Lights out (二)(首行枚举+位运算,搜索全部解)
  13. multisim安装完成后显示安装程序损坏的免费解决方案
  14. 批处理删除指定文件夹中的指定类型文件
  15. Java代码审计学习笔记
  16. linux图形加速驱动下载,Linux 安装emby 并开启nvidia nvenc 硬件加速转码
  17. Kubernetes--k8s---存活探针和就绪探针的最佳实践
  18. Win10浏览器闪退问题解决(所有类型的浏览器都会发生闪退、包括chrome、firefox)
  19. 山顶应试流V1.0——中国应试教育备考方法
  20. 狭义相对论的时空几何 --闽科夫斯基时空

热门文章

  1. 电脑连接电视以后只有桌面没有图标?快捷键一步搞定
  2. 用JAVA实现基于Actor模型的RPC
  3. 如何获得腾讯聊天窗口的绿色小勾?(官方解释)
  4. 干货:行政与人事管理的区别在哪里?
  5. Vulnhub靶机:BOREDHACKERBLOG: SOCIAL NETWORK
  6. mysql srid_如何修改Postgresql中空间字段的SRID
  7. 性格分类--从唐僧四师徒看性格
  8. Ubantu系统设置不挂起
  9. 力扣题解-1046. 最后一块石头的重量
  10. pvcreate出现错误:Device /dev/sdb1 not found (or ignored by filtering).