URL ---- 类加载器

URL u = new URL("http://127.0.0.1:8080/home/indext?name=aaa&pwd=123");
u.getProtocol();获取协议 http
u.getHost();获取ip 127.0.0.1
u.getPort(); 获取端口 8080
u.getDefaultPort(); 获取默认端口 80
u.getPath(); 获取路径 /home/indext
u.getQuery(); name=aaa&age=123

下载图片:

方法1
URLConnection c = u.openConnection();链接方法
c.getInputStream(); 返回从链接读取输入流
方法2: 常用方法
u.openStream(); 读取链接内容
例如:
 URL url = new URL("http://127.0.0.1:8080/hello/1.jpg");
 InputStream input = url.openStream();
 FileOutputStream out = new FileOutputStream("F:\\aaa\\美女.jpg" );
         
          byte[] b = new byte[1024*10];
          int len = 0;
          while((len =input .read(b ))!=-1){
                 out.write( b, 0, len);
         }
          out.close();

上传:

Socket  ServerSocket
          // 客户端上传
         Socket socket = new Socket("127.0.0.1" , 10086);
         OutputStream out = socket .getOutputStream();
          // 服务端接收
         ServerSocket ss = new ServerSocket(10086);
         Socket s = ss.accept();
         InputStream input = s .getInputStream();

CS架构: Client Server 客户端服务端架构
要求: 有两套代码,客户端,服务端
缺点:维护性成本高
优点: 可以帮服务端减小压力

BS架构: Browser Server 浏览器 服务端
要求:只需要服务端即可,而浏览器作为客户端
优点: 维护性号,成本低
缺点: 服务器压力大

jvm运行机制:
1.java文件编译为.class 文件到bin目录
2.编译后的文件是在硬盘上的,那么我们运行时需在内存中看到效果,通过jvm类加载器ClassLoader把硬盘中的class文件加载到内存中,被夹在到内存中的class文件会变成一个Class对象

jvm 调用类加载器
类加载器: ClassLoader
1.Bootstrap 根类加载器 JRE/lib/rt.jar 加载API所有的类
2.ExtClassLoader 扩展类加载器 JRE/lib/ext/*.jar jdk使用的
3.AppClassLoader 应用加载器 ClassPath配置.class 文件路径,也就是bin目录下的所有class,eclipse中classpath是workspace中的bin目录

获取类加载器:
Class clazz = 类名.class;
ClassLoader l = clazz.getClassLoader(); AppClassLoader
ClassLoader parent = l.getParent(); ExtClassLoader
ClassLoader gradP = parent.getParent(); null 因为Bootstrap不属于java中的一个类,他是使用c++实现的
AppClassLoader 类加载器被父类ExtClassLoader加载,ExtClassLoader被Bootstrap加载

方法区保证只有一个.class文件: 全盘负责委托机制

全盘负责:当一个ClassLoader(加载器)加载一个类的时候,那么在这个类中所引用的所有其他类通常也都有这个类加载器加载
委托机制:,先让parent类加载器寻找,只有在Parent找不到的时候,才从自己的范围查找
Cache 缓存机制:如果这个类中已经用过这个类了,放在cache缓存中,下次用的时候就不用加载了
任何一个类,只会被加载一次

用类加载器加载配置文件:
把配置文件放在src中,会自动拷贝一份在bin目录中, bin目录相当于classpath

用类加载器加载配置文件:

把配置文件放在src中,会自动拷贝一份在bin目录中, bin目录相当于classpath

ClassLoader loader = 类名.class.getClassLoader();
InputStream is =loader.getResourceAsStream(name); 返回读取指定资源输入流
name:表示当前要加载的配置文件名,而这里的相对路径是classpath就是bin目录

Properties p = new Properties();
p.load(is);

         ClassLoader loader = URLDemo. class.getClassLoader();
         InputStream s = loader.getResourceAsStream( "loader.ini");
         
         Properties p = new Properties();
          p.load( s);
         
         String name = p.getProperty( "username");
         String pwd = p.getProperty( "pwd");
         System. out.println(name +"----------" +pwd );

你可能感兴趣的:(URL ---- 类加载器)