黑马程序员-- TCP协议程序,多线程的并发上传,反射技术,反射由来,反射实现通过配置文件运行程序,反射的泛型擦除。

来源:互联网 发布:网页sql注入检测工具 编辑:程序博客网 时间:2024/05/20 22:26

  1. ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ------

1.      第二十七天学习内容 TCP协议程序,客户端服务器程序Socket  ServerSocket 之间的数据通信,文件的上传,多线程的并发上传。JavaWeb应用程序Apache Tomcat,利用网络TCI程序,正则表达式,抓去互联网中的数据。反射技术,反射由来,4个类 Class,Constructor,Method,Field类,反射实现通过配置文件运行程序,反射的泛型擦除。

 

2.      客户端服务器

  客户端:都是一台主机而已,安装的都是客户端的软件,IE,从服务器上进行数据的获取。

  服务器:也是一台主机而已,配置不同,安装有服务器端的应该软件 ServerSocket程序,很多的客户机可以从这个服务器上获取需要的数据

 

3.      TCP的客户端

  java.net.Socket类,就是实现TCP数据传输的客户端的程序。TCP程序必须建立连接后才能使用,因此创建Socket类的对象的时候,去连接服务器

  构造方法中,IP地址,端口号,两个参数,String类型IP,int类型的端口号

  运行构造方法,就会去连接服务器,如果服务器没有打开,抛出异常

  连接成功后,使用连接对象Socket,获取数据传输的IO流对象

  OutputStreamgetOutputStream() 从连接对象中,获取字节输出流,将数据写到服务器

  InputStreamgetInputStream()从连接对象中,获取字节输入流,读取服务器发来的数据

 

4.      TCP服务器

 java.net.ServerSocket类,实现TCP的服务器程序,让客户端进行连接

  构造方法,传递int端口号,打开这个端口,等待客户端连接。

  如果连接成功,获取IO流,读取客户端的数据,写数据给客户端

  服务器端必须先知道是哪一个客户端连接上了,ServerSocket类中,有一个方法

  Socket accept()获取到连接的客户端的对象,这个方法线程阻塞效果,等待客户端,不连接永久等待。

  就可以使用客户端的连接对象获取IO流

 

5.      TCP的案例

  要求:客户端通过键盘输入,输入一些字母,将字母传递到服务器,服务器将字母转成大写后,写会客户端,客户端读取服务器发回的大写数据

  键盘输入:字符缓冲区,转换流,字节输入流

  客户端发给服务器,字节输出流,打印流

  服务器读取客户端数据,字节输入流,转换流,字符缓冲区

  服务器大写数据写回客户端:字节输出流,打印流

  客户端读取服务器大写数据:字节输入流,转换流,字符缓冲区

 

6.      TCP实现文件上传--文本文件

   要求:客户端读取一个文本文件,发送到服务器,接收文本文件,保存到指定的D盘下的upload目录,上传成功四个字返回客户端

 

7.      TCP实现图片上传

   图片不能使用字符流,纯字节流

   多线程同时上传:客户端单线程,代码不需要任何改动。服务器程序是多线程程序,同时允许多个客户端一起上传,服务端的程序修改为线程程序,run方法。

   服务器端的ServerSocket由main创建,main方法中再次获取客户端对象,将客户端对象传递给线程的run方法

 

8.      Tomcat Web服务器

  把写好的Java程序,部署到Tomcat软件的一个指定的目录下,客户端就可以使用浏览器访问Tomcat,从Tomcat软件中,获取到我们自己的写Java程序

  启动Tomcat服务:建立ServerSocket,打开8080端口

   Tomcat 三大技术  Socket ,Thread , IO

   猎豹,腾讯TT 360 遨游 世界之窗 百度  IE FF opera safari chrome

 

9.      利用网络技术TCP,正则表示,抓取互联网中的数据

  本地有一个文本,写的是很多的电子邮件地址

  程序,在这个文本中个,提取出符号电子邮件格式的内容

  正则表达式,查找Pattern Matcher类

 

  java.net.URL 类 描述统一资源定位符的类

  构造方法,传递字符串的地址

  URLConnection openConnection()打开与次URL的连接

  一旦连接成功,连接同路中,IO流对象,已经建立好了

  URLConnection类的方法InputStreamgetInputStream

 

10.  反射技术的由来

  提升程序的扩展性

  Fu fu = new Zi();

  List list = newArrayList();

  反射可以实现,用户自定义运行哪个类,哪个方法

  反射:将一个类的字节码文件(class)封装成一个对象,冲这个字节码文件对象中,直接获取内部的构造方法,成员方法,并运行起来。解剖一个类

  一切都是对象 class文件也是对象,对象的描述类是 java.lang.Class

  构造方法也是对象,对象的描述类 java.lang.reflect.Constructor

  成员变量也是对象,对象的描述类 java.lang.reflect.Field

  成员方法也是对象,对象的描述类 java.lang,reflect.Method

 

  学习反射技术,掌握的内容是:获取class文件对象。通过这个class文件对象,获取类中的构造方法,成员方法,并运行起来。通过配置文件运行用户指定的类和方法,利用反射实现泛型的擦除

 

11.  获取字节码文件对象的三个方式

l  使用对象获取到,每个类都有个方法 getClass(),写在Object类中的方法,返回一个Class类的类型,Class描述字节码文件对象的类

l  使用类的静态属性class获取

使用Class类的静态方法forName获取,方法中写String类型的类名

 

12.  通过字节码文件对象获取构造方法并运行

  必须获取这个类的class文件对象

  使用class文件对象,获取类中的构造方法

  Constructor[] get Constructors()获取构造方法,包含公共的

  Constructor get Constructor(Class...p)根据参数列表获取指定的构造器

  运行构造方法,使用Constructor类的方法实现

  Object newInstance(Object...p)运行获取到的构造方法,运行构造方法的时候,实际传递的参数

  注意:如果这个类的字节码文件对象中,有空参数,public权限的构造器,创建对象的快捷方式,不用获取构造方法,Class类中,有一个方法newInstance()直接运行构造方法了

   使用Class类,获取字节码文件对象中的私有构造方法

   ConstructorgetDeclaredConstructor(Class...p)获取指定参数的构造方法,包含私有

   Constructor类的有一个父类,AccessibleObject,有一个方法setAccessible(booleanb)暴力访问

   单例设计模式

 

13.  通过字节码文件对象获取成员方法并运行

  必须获取这个类的class文件对象

  使用class文件对象的方法,获取字节码文件对象中的成员方法

  Method[]  getMethods()获取字节码文件对象中的成员方法,包括共有,继承的

  Method   getMethod(String 方法名,Class...p)获取指定的成员方法

  运行获取到的方法Method类中,提供一个运行方法的方法

  Objectinvoke(Object obj,Object...o),运行指定的方法,需要对象的支持,运行方法传递具体的参数

  获取私有方法并运行

  使用class文件对象的方法getDeclaredMethod获取指定的私有构造方法

  运行的时候,加上暴力访问

 

14.  反射通过配置文件运行指定的类

  配置文件,键值对方式写Properties

  读取配置文件,IO流,字节,字符都行,IO集合关联

  通过集合的方法getProperty获取指定键值对。

  键值对当作参数,传递给反射需要的内容

 

15.  反射绕过编译器检查,将不同数据类型存储到带有泛型的集合中

   集合泛型是String,把整数,存储到集合

      List<String> list = newArrayList<String>();

   考点:在于你是否会使用反射技术,不是让你真正用集合

   泛型是编译期间的检查,编译后的class没有有泛型
0 0
原创粉丝点击