Java核心类库篇8——网络编程

Java核心类库篇8——网络编程

1、七层网络模型

  • OSI(Open System Interconnect),即开放式系统互联,是ISO(国际标准化组织)组织在1985 年研究的网络互连模型。

  • 当发送数据时,需要对发送的内容按照上述七层模型进行层层加包后发送出去。

  • 当接收数据时,需要对接收的内容按照上述七层模型相反的次序层层拆包并显示出来

在这里插入图片描述

2、协议

计算机在网络中实现通信就必须有一些约定或者规则,这种约定和规则就叫做通信协议,通信协议 可以对速率、传输代码、代码结构、传输控制步骤、出错控制等制定统一的标准。

2.1、TCP(传输控制协议Transmission Control Protocol)

  • 面向连接的协议
  • 建立连接 => 进行通信 => 断开连接
  • 在传输前采用"三次握手"方式
  • 在通信的整个过程中全程保持连接,形成数据传输通道
  • 保证了数据传输的可靠性和有序性
  • 是一种全双工的字节流通信方式,可以进行大数据量的传输
  • 传输完毕后需要释放已建立的连接,发送数据的效率比较低

2.2、UDP(用户数据报协议User Datagram Protocol)

  • 非面向连接的协议
  • 在通信的整个过程中不需要保持连接,其实是不需要建立连接
  • 不保证数据传输的可靠性和有序性
  • 是一种全双工的数据报通信方式,每个数据报的大小限制在64K内
  • 发送数据完毕后无需释放资源,开销小,发送数据的效率比较高,速度快

3、IP与端口

  • IP地址是互联网中的唯一地址标识,本质上是由32位二进制组成的整数,叫做IPv4,当然也有128 位二进制组成的整数,叫做IPv6,目前主流的还是IPv4
  • 端口号本质上是16位二进制组成的整数,表示范围是:0 ~ 65535,其中0 ~ 1024之间的端口号通 常被系统占用,建议编程从1025开始使用
  • IP地址 - 可以定位到具体某一台设备
  • 端口号 - 可以定位到该设备中具体某一个进程
  • 网络编程需要提供:IP地址 + 端口号,组合在一起叫做网络套接字(InetSocketAddress):Socket

4、TCP网络编程

ServerSocket

方法声明功能介绍
public ServerSocket(int port)根据参数指定的端口号来构造对象
public Socket accept()侦听并接收到此套接字的连接请求
public void close()用于关闭套接字

Socket

方法声明功能介绍
public Socket(String host, int port)根据指定主机名和端口来构造对象
public InputStream getInputStream()用于获取当前套接字的输入流
public OutputStream getOutputStream()用于获取当前套接字的输出流
public void close()用于关闭套接字

4.1、客户端发给服务器端

public class Server {public static void main(String[] args) {ServerSocket serverSocket = null;Socket socket = null;InputStream inputStream=null;try {serverSocket = new ServerSocket(8099);System.out.println("等待客户端连接");socket = serverSocket.accept();System.out.println("终于等到你");//Thread.sleep(10000);inputStream = socket.getInputStream();int len=0;byte[] buffer = new byte[1024];while ((len=inputStream.read(buffer))!=-1){System.out.println(new String(buffer,0,len));}} catch (IOException | InterruptedException e) {e.printStackTrace();} finally {if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}if (serverSocket!=null){try {serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
}
public class Client {public static void main(String[] args) {Socket socket = null;OutputStream outputStream=null;try {socket = new Socket("127.0.0.1", 8099);outputStream = socket.getOutputStream();outputStream.write("hello, i am ruoye!".getBytes());outputStream.flush();socket.shutdownOutput();} catch (IOException e) {e.printStackTrace();} finally {if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}

4.2、服务器响应

字节输入输出流会出现问题read无法读到-1,此时应当

outputStream.flush();
socket.shutdownOutput();

但在多次通信时,关闭流显然不合适

public class Server {public static void main(String[] args) {ServerSocket serverSocket = null;Socket socket = null;InputStream inputStream=null;OutputStream outputStream=null;try {serverSocket = new ServerSocket(8099);System.out.println("等待客户端连接");socket = serverSocket.accept();System.out.println("终于等到你");
//            Thread.sleep(10000);inputStream = socket.getInputStream();int len=0;byte[] buffer = new byte[1024];while ((len=inputStream.read(buffer))!=-1){System.out.println(new String(buffer,0,len));}System.out.println("服务器收到消息");outputStream = socket.getOutputStream();outputStream.write("i know".getBytes());outputStream.flush();socket.shutdownOutput();System.out.println("服务器发送消息");} catch (IOException e) {e.printStackTrace();} finally {if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}if (serverSocket!=null){try {serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
}
public class Client {public static void main(String[] args) {Socket socket = null;OutputStream outputStream=null;InputStream inputStream=null;try {socket = new Socket("127.0.0.1", 8099);outputStream = socket.getOutputStream();outputStream.write("hello, i am ruoye!".getBytes());System.out.println("客户端发送消息成功");outputStream.flush();socket.shutdownOutput();inputStream = socket.getInputStream();int len=0;byte[] buffer = new byte[1024];while ((len=inputStream.read(buffer))!=-1){System.out.println(new String(buffer,0,len));}System.out.println("客户端接收消息");} catch (IOException e) {e.printStackTrace();} finally {if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}

4.3、DataInputStream流

public class Server {public static void main(String[] args) {ServerSocket serverSocket = null;Socket socket = null;InputStream inputStream=null;OutputStream outputStream=null;try {serverSocket = new ServerSocket(8099);System.out.println("等待客户端连接");socket = serverSocket.accept();System.out.println("终于等到你");
//            Thread.sleep(10000);inputStream = socket.getInputStream();DataInputStream dataInputStream=new DataInputStream(inputStream);System.out.println(dataInputStream.readUTF());System.out.println("服务器收到消息");outputStream = socket.getOutputStream();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF("i know!");System.out.println("服务器发送消息");} catch (IOException e) {e.printStackTrace();} finally {if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}if (serverSocket!=null){try {serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
}
public class Client {public static void main(String[] args) {Socket socket = null;OutputStream outputStream=null;InputStream inputStream=null;try {socket = new Socket("127.0.0.1", 8099);outputStream = socket.getOutputStream();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF("i am ruoye!");System.out.println("客户端发送消息成功");System.out.println("================="+outputStream);outputStream.write("hello, i am ruoye!".getBytes());inputStream = socket.getInputStream();DataInputStream dataInputStream=new DataInputStream(inputStream);System.out.println(dataInputStream.readUTF());System.out.println("客户端接收消息");} catch (IOException e) {e.printStackTrace();} finally {if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}

4.4、简易聊天室

public class Server {public static void main(String[] args) {ServerSocket serverSocket = null;Socket socket = null;InputStream inputStream=null;OutputStream outputStream=null;try {serverSocket = new ServerSocket(8099);System.out.println("等待客户端连接");socket = serverSocket.accept();System.out.println("终于等到你");while (true) {inputStream = socket.getInputStream();DataInputStream dataInputStream=new DataInputStream(inputStream);String s = dataInputStream.readUTF();System.out.println(s);if ("bye".equalsIgnoreCase(s)){break;}outputStream = socket.getOutputStream();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF("收到"+s);}} catch (IOException e) {e.printStackTrace();} finally {if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}if (serverSocket!=null){try {serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
}
public class Client {public static void main(String[] args) {Socket socket = null;OutputStream outputStream=null;InputStream inputStream=null;Scanner scanner=new Scanner(System.in);try {socket = new Socket("127.0.0.1", 8099);outputStream = socket.getOutputStream();while (true) {String next = scanner.next();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF(next);if ("bye".equalsIgnoreCase(next)){break;}inputStream = socket.getInputStream();DataInputStream dataInputStream=new DataInputStream(inputStream);System.out.println(dataInputStream.readUTF());}} catch (IOException e) {e.printStackTrace();} finally {if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}

4.5、多人聊天室

public class Server {public static void main(String[] args) {ServerSocket serverSocket = null;try {serverSocket = new ServerSocket(8099);while (true){System.out.println("等待客户端连接");Socket socket = serverSocket.accept();System.out.println("终于等到你");new Thread(new Conversation(socket)).start();}} catch (IOException e) {e.printStackTrace();} finally {if (serverSocket!=null){try {serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
}
public class Conversation implements Runnable {private Socket socket;public Conversation(Socket socket) {this.socket = socket;}@Overridepublic void run() {InputStream inputStream=null;OutputStream outputStream=null;try {while (true) {inputStream = socket.getInputStream();DataInputStream dataInputStream=new DataInputStream(inputStream);String s = dataInputStream.readUTF();System.out.println("收到 "+socket.getInetAddress()+" "+socket.getPort()+"的消息:"+s);if ("bye".equalsIgnoreCase(s)){break;}outputStream = socket.getOutputStream();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF("收到 "+socket.getInetAddress()+" "+socket.getPort()+":"+s);}} catch (IOException e) {e.printStackTrace();} finally {if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}
public class Client {public static void main(String[] args) {Socket socket = null;OutputStream outputStream=null;InputStream inputStream=null;Scanner scanner=new Scanner(System.in);try {socket = new Socket("127.0.0.1", 8099);outputStream = socket.getOutputStream();while (true) {String next = scanner.next();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF(next);if ("bye".equalsIgnoreCase(next)){break;}inputStream = socket.getInputStream();DataInputStream dataInputStream=new DataInputStream(inputStream);System.out.println(dataInputStream.readUTF());}} catch (IOException e) {e.printStackTrace();} finally {if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}

5、UDP网络编程

DatagramSocket

用于描述发送和接收数据报的套接字(包裹投递服务的发送或接收点)

方法声明功能介绍
public DatagramSocket()使用无参的方式构造对象
public DatagramSocket(int port)根据参数指定的端口号来构造对象
public void receive(DatagramPacket p)用于接收数据报存放到参数指定的位置
public void send(DatagramPacket p)用于将参数指定的数据报发送出去
public void close()关闭Socket并释放相关资源

DatagramPacket

要用于描述数据报(用来实现无连接包裹投递服务)

方法声明功能介绍
public DatagramPacket(byte[] buf, int length)根据参数指定的数组来构造对象,用于接 收长度为length的数据报
public DatagramPacket(byte[] buf, int length, InetAddress address, int port)根据参数指定数组来构造对象,将数据报 发送到指定地址和端口
public InetAddress getAddress()用于获取发送方或接收方的通信地址
public int getPort()用于获取发送方或接收方的端口号
public int getLength()用于获取发送数据或接收数据的长度

InetAddress

方法声明功能介绍
public static InetAddress getLocalHost()用于获取当前主机的通信地址
public static InetAddress getByName(String host)根据参数指定的主机名获取通信地址

5.1、简易广播

public class Receive {public static void main(String[] args) {DatagramSocket datagramSocket = null;try {datagramSocket = new DatagramSocket(8099);byte[] bytes=new byte[512];DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length);System.out.println("等待发送消息");datagramSocket.receive(datagramPacket);System.out.println("等待到的内容"+new String(bytes));} catch (IOException e) {e.printStackTrace();} finally {if (datagramSocket!=null){datagramSocket.close();}}}
}
public class Send {public static void main(String[] args) {DatagramSocket datagramSocket = null;try {datagramSocket = new DatagramSocket(8100);String str="hello udp!";DatagramPacket datagramPacket = new DatagramPacket(str.getBytes(), str.length(),new InetSocketAddress("127.0.0.1",8099));datagramSocket.send(datagramPacket);} catch (IOException e) {e.printStackTrace();} finally {if (datagramSocket!=null){datagramSocket.close();}}}
}

5.1、带回复的广播

public class Receive {public static void main(String[] args) {DatagramSocket datagramSocket = null;try {datagramSocket = new DatagramSocket(8099);byte[] bytes=new byte[512];DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length);System.out.println("等待发送消息");datagramSocket.receive(datagramPacket);System.out.println("等待到的内容"+new String(bytes,0,datagramPacket.getLength()));String str = "i know";DatagramPacket datagramPacket1 = new DatagramPacket(str.getBytes(), str.length(),datagramPacket.getAddress(),datagramPacket.getPort());datagramSocket.send(datagramPacket1);} catch (IOException e) {e.printStackTrace();} finally {if (datagramSocket!=null){datagramSocket.close();}}}
}
public class Send {public static void main(String[] args) {DatagramSocket datagramSocket = null;try {datagramSocket = new DatagramSocket(8100);String str="hello udp!";DatagramPacket datagramPacket = new DatagramPacket(str.getBytes(), str.length(),new InetSocketAddress("127.0.0.1",8099));datagramSocket.send(datagramPacket);byte[] bytes=new byte[512];DatagramPacket datagramPacket1 = new DatagramPacket(bytes,bytes.length);System.out.println("等待回复消息");datagramSocket.receive(datagramPacket1);System.out.println("等待到的回复内容"+new String(bytes,0,datagramPacket1.getLength()));} catch (IOException e) {e.printStackTrace();} finally {if (datagramSocket!=null){datagramSocket.close();}}}
}

6、URL

统一资源定位器

<传输协议>://<主机名>:<端口号>/<资源地址>
方法声明功能介绍
URL(String spec)根据参数指定的字符串信息构造对象
String getProtocol()获取协议名称
String getHost()获取主机名称
int getPort()获取端口号
String getPath()获取路径信息
String getFile()获取文件名
URLConnection openConnection()获取URLConnection类的实例

URLConnection

方法声明功能介绍
InputStream getInputStream()获取输入流
void disconnect()断开连接
public class Test {public static void main(String[] args) {try {URL url = new URL("https://www.baidu.com/");System.out.println(url.getProtocol());System.out.println(url.getHost());System.out.println(url.getPort());} catch (MalformedURLException e) {e.printStackTrace();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux同花顺乱码,打开同花顺软件全是问号

官方答案&#xff1a;字体库字体乱码【原因分析】&#xff1a;系统字体缺失&#xff0c;损坏。【解决方案】方案一&#xff1a;使用360电脑门诊进行修复1.打开【360安全卫士】—【电脑专家】搜索乱码&#xff0c;然后会弹出如下六个解决方案&#xff0c;根据当前计算机的故障现…

嵌入式linux组件,嵌入式Linux系统的几大组件!

原标题&#xff1a;嵌入式Linux系统的几大组件&#xff01;本文概述了Linux系统的几大组件&#xff0c;描述了这些组件之间的关系。文章解释了术语&#xff0c;并描述看似很基础的细节。每个Linux系统都有许多主要组件。其中一个组件(引导加载程序)从技术上讲是Linux之外的&…

c语言字符串strchr,Strchr()C语言字符串处理功能

strchr()函数不如strcpy()&#xff0c;strcat()&#xff0c;strcmp()&#xff0c;strupr()&#xff0c;strlwr()&#xff0c;strlen()直观c strchr函数&#xff0c;因此需要代码理解:代码来自C语言开发入门和项目实战书:#include#includeint main(){字符字符串[50];char * str&…

Java数据库篇1——数据库配置

Java数据库篇1——数据库配置 1、数据库 数据库(DataBase) 就是存储和管理数据的仓库本质是一个文件系统, 还是以文件的方式,将数据保存在电脑上 2、数据库的优点 存储方式优点缺点内存速度快不能够永久保存,数据是临时状态的文件数据是可以永久保存的使用IO流操作文件, 不…

c语言里寄存器.1说明意思,C语言复习+寄存器地址名称映射

C语言复习寄存器地址名称映射一.参考资料探索者STM32F4开发板&#xff1a;**《STM32F4开发指南-库函数版本》4.1小节C语言基础知识复习4.6小节 MDK中寄存器地址名称映射**STM32F4xx官方资料&#xff1a;《STM32F4xx中文参考手册》-第7章通用IO二.C语言复习位操作GPIOA->ODR|…

android--多线程,android多线程

线程的基本用法&#xff1a;android多线程编程其实并不比java多线程特殊&#xff0c;基本都是使用相同的语法&#xff0c;比如说&#xff0c;定义一个线程只需要新建一个类继承自Thread&#xff0c;然后重写父类的run()方法&#xff0c;并在里面编写耗时的逻辑即可&#xff0c;…

android的ui怎么做到流畅,android提高UI的流畅度

android提高UI的流畅度Android中所有的界面绘制工作都是在UI线程中进行的&#xff0c;提高UI流畅度的最核心根本在于释放UI线程。即:不在主线程中做耗时的操作。很多人都知道&#xff0c;耗时的操作要放到子线程中去做&#xff0c;比如访问网络&#xff0c;比如读写sd卡。像这类…

android商品数量加减,微信小程序实现一个简单的商品数量加减案例

简介这是一个用微信小程序原生代码实现的数量加减demo&#xff0c;主要是用于商品购物车或者商品详情修改数量使用&#xff0c;很简单哦~~~。核心js方法说明addCount(增加数量)delCount (减少数量)getCount(获取数量)实现效果如下图所示&#xff1a;微信小程序实现一个简单的商…

android plugin 镜像,cordova-plugin-screen-orientation

标题说明屏幕方向设置屏幕方向AppVeyor Travis CI Cordova屏幕方向插件Cordova插件以通用方式为 iOS。安卓和 windows UWP设置/锁定屏幕方向。 这个插件基于屏幕定向 API&#xff0c;所以API是当前的规范。插件将以下内容添加到屏幕对象( window.screen ):// lock the device o…

JAVA WEB篇1——初识JAVAWEB

JAVA WEB篇1——初识JAVAWEB JavaWeb主要指使用Java语言进行动态Web资源开发技术的统称&#xff0c;是解决相关Web互联网领域的技术总和 1、Http协议 HTTP协议&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是由W3C&#xff08;万维网联盟…

JAVA WEB篇4——Filter、Listener

JAVA WEB篇4——Filter、Listener 1、Filter Filter本意为”过滤“的含义&#xff0c;是JavaWeb的三大组件之一&#xff0c;三大组件为&#xff1a;Servlet、Filter、 Listener过滤器是向 Web 应用程序的请求和响应处理添加功能的 Web 服务组件过滤器相当于浏览器与Web资源之…

Java SSM1——Maven

Java SSM1——Maven 1、下载 maven 官网&#xff1a;https://maven.apache.org/download.cgi maven 百度云&#xff1a;https://pan.baidu.com/s/18XKbJp7P5x_BkKyc0VF0tw提取码&#xff1a;4zr9 2、安装 解压到想安装的目录下 添加环境变量 添加MAVEN_HOME变量 MAVEN_HO…

2021年广西艺术高考成绩查询,2021年广西美术高考成绩查询网址:https://www.gxeea.cn/...

【导语】2021年广西美术高考成绩查询入口开通后&#xff0c;考生可登录广西教育考试院(https://www.gxeea.cn/)高考服务平台或点击下方链接进入广西美术考成绩查询系统。具体如下&#xff1a;2021年广西美术高考成绩查询入口开通后&#xff0c;考生可以通过黑龙江教育考试院(ht…

齐浩亮 计算机科学与技术,齐浩亮

齐浩亮&#xff0c;男&#xff0c;1972年2月出生&#xff0c;计算机科学与技术系副教授&#xff0c;工学博士。2007年5月获哈尔滨工业大学计算机应用技术专业博士学位。现任黑龙江工程学院计算机应用技术研究所所长&#xff0c;哈尔滨院士专家团成员&#xff0c;YOCSEF哈尔滨20…

Java SSM篇2——框架的基本认识

Java SSM篇2——框架的基本认识 1、什么是框架 框架就是一套规范&#xff0c;既然是规范&#xff0c;你使用这个框架就要遵守这个框架所规定的约束框架可以理解为半成品软件&#xff0c;框架做好以后&#xff0c;接下来在它基础上进行开发 2、为什么使用框架 框架为我们封装…

Java SSM篇3——Mybatis

Java SSM篇3——Mybatis 1、JDBC存在的问题 数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能sql 语句在代码中硬编码&#xff0c;造成代码不易维护&#xff0c;实际应用 sql 变化的可能较大&#xff0c;sql 变动需要改变java 代码查询操作时&#xff0c;需要手动将…

在职研究生计算机科学与技术考研考哪些科目,计算机在职研究生考试科目

计算机在职研究生以三种方式来报考&#xff0c;分别是同等学力申硕、中外合作办学硕士、非全日制研究生。三种报考方式考试科目不同&#xff0c;下面为大家具体介绍一下。一、同等学力申硕考试科目&#xff1a;该方式考试科目主要有两科&#xff1a;外国语和学科综合。外国语&a…

Java SSM4——Spring

Java SSM4——Spring Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器&#xff08;框架&#xff09; Spring的优势 方便解耦&#xff0c;简化开发 Spring就是一个容器&#xff0c;可以将所有对象创建和关系维护交给Spring管理 什么是耦合度&#xff1f;对象之间的关…

html文件怎么导出stl文件,3D建模软件导出STL文件的小技巧(一)

很多用户在提交3D模型文件的时候&#xff0c;常常有这样的困惑&#xff1a;什么是STL 格式文件&#xff0c;怎么获取STL 格式文件呢&#xff1f;STL 格式文件是在计算机图形应用系统中&#xff0c;用于表示三角形网格的一种文件格式。它也是3D打印机在执行3D打印程序时&#xf…

Java SSM篇5——SpringMVC

Java SSM篇5——SpringMVC 1、MVC模式 MVC是软件工程中的一种软件架构模式&#xff0c;它是一种分离业务逻辑与显示界面的开发思想 M&#xff08;model&#xff09;模型&#xff1a;处理业务逻辑&#xff0c;封装实体V&#xff08;view&#xff09; 视图&#xff1a;展示内容…