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获取
l 使用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
考点:在于你是否会使用反射技术,不是让你真正用集合
泛型是编译期间的检查,编译后的class没有有泛型