hls协议分析

目录

  • 1、简介
    • 1.1、 综述
    • 1.2 、HLS 协议编码格式要求
    • 1.3 、HLS 协议优势
    • 1.4 、HLS 协议劣势
    • 1.5 、框架图
  • 2、m3u8
    • 2.1 、单码率适配流m3u8文件
    • 2.2 、多码率适配流m3u8文件
    • 2.3 、Playlist file
    • 2.4 、Tags
  • 3、ts
    • 3.1 、ts文件结构
    • 3.2、ts文件结构部分截图
    • 3.3、ts层(ts header)
    • 3.4、ts层(adaptation field)
      • 3.4.1、视频流和音频流加 adaptation field 情况部分截图
    • 3.5、ts层(PAT)
      • 3.5.1、PAT情况截图
    • 3.6、ts层(PMT)
      • 3.6.1、PMT情况截图

1、简介

1.1、 综述

作为 Apple 提出的一种基于 HTTP 的协议,HLS(HTTP Live Streaming)用于解决实时音视频流的传
输。尤其是在移动端,由于 iOS /H5 不支持 flash,使得 HLS 成了移动端实时视频流传输的首选。HLS
经常用在直播领域,一些国内的直播云通常用 HLS 拉流(将视频流从服务器拉到客户端)。 HLS 值得诟
病之处就是其延迟严重,延迟通常在 10-30s 之间。

HLS(HTTP Live Streaming) 把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。
HLS 协议由三部分组成:HTTP、M3U8、TS。这三部分中,HTTP 是传输协议,M3U8 是索引文件,TS
是音视频的媒体信息。

1.2 、HLS 协议编码格式要求

视频的编码格式:H264
音频的编码格式:AAC、MP3、AC-3
视频的封装格式:ts
保存 ts 索引的 m3u8 文件

1.3 、HLS 协议优势

1、HLS 相对于 RTMP 来讲使用了标准的 HTTP 协议来传输数据,可以避免在一些特殊的网络环境下被屏蔽。

2、HLS 相对 RTMP 在服务器端做负载均衡要简单得多。因为 HLS 是基于无状态协议 HTTP 实现的,客户端只需要按照顺序使用下载存储在服务器的普通 ts 文件进行播放就可以。而 RTMP 是一种有状态协议,很难对视频服务器进行平滑扩展,因为需要为每一个播放视频流的客户端维护状态。

3、HLS 协议本身实现了码率自适应,在不同带宽情况下,设备可以自动切换到最适合自己码率的视频播放。

1.4 、HLS 协议劣势

1、HLS 协议在直播的视频延迟时间很难做到 10 s 以下延时,而 RTMP 协议的延时可以降到 1s 左右。

1.5 、框架图

hls协议分析_第1张图片
hls协议分析_第2张图片

2、m3u8

m3u8 文件是用文件方式对媒体文件进行描述,由一些列标签组成。

2.1 、单码率适配流m3u8文件

 #EXTM3U
 #EXT-X-VERSION:3
 #EXT-X-ALLOW-CACHE:YES
 #EXT-X-MEDIA-SEQUENCE:2
 #EXT-X-TARGETDURATION:16
 #EXTINF:14.357, no desc
 livestream-2.ts
 #EXTINF:15.617, no desc
 livestream-3.ts
 #EXTINF:14.358, no desc
 livestream-4.ts
 #EXTINF:15.618, no desc
 livestream-5.ts
 #EXTINF:11.130, no desc
 livestream-6.ts

2.2 、多码率适配流m3u8文件

 #EXTM3U
 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000
 http://example.com/low.m3u8
 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2560000
 http://example.com/mid.m3u8
 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7680000
 http://example.com/hi.m3u8
 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=65000,CODECS="mp4a.40.5"
 http://example.com/audio-only.m3u8

包含多种比特率的 Master Playlist。该文件是一个实际使用中的顶级 m3u8 文件,该文件中又定义了
http://example.com/low.m3u8 、 http://example.com/mid.m3u8 等 几 个 二 级文件 。 顶 级m3u8 文件主要是做码率适配的,二级 m3u8 才是真正的切片文件,客户端会默认选择码率最高的请求,如果发现码率达不到,会请求降低码率的流。客户端拿到二级 m3u8 文件后,会继续请求里面的文件,这时就可以进行播放了。

2.3 、Playlist file

一个 m3u 的 Playlist 就是一个由多个独立行组成的文本文件,每行由回车/换行区分。每一行可以是一个
URI、空白行或是一个 以 “#” 号开头的字符串,并且空格只能存在于一行中不同元素间的分隔。
一个 URI 表示一个媒体段或是 “variant Playlist file”(最多支持一层嵌套,即一个 m3u8 文件中嵌套另
一个 m3u8),以 “EXT” 开头的表示一个 “tag”,否则表示注释,直接忽略。

2.4 、Tags

1、
#EXTM3U :
每个 m3u8 文件第一行必须是这个 tag,如上面的两个示例。

2、
#EXT-X-VERSION:
m3u8文件版本号,比如#EXT-X-VERSION:3。

3、
#EXTINF :
指定每个媒体段(ts)的持续时间,这个仅对其后面的 URI 有效,
每两个媒体段 URI 间被这个 tag 分隔开其格式为: #EXTINF: </span>
比如<span class="token comment">#EXTINF:14.357, no desc</span>
duration:表示持续的时间(秒),<span class="token string">"Durations MUST be integers if the protocol version of the Playlist file is less than 3"</span>,否则可以是浮点数。

4、
<span class="token comment">#EXT-X-BYTERANGE :</span>
表示媒体段是一个媒体 URI 资源中的一段,只对其后的 media URI 有效,
格式: <span class="token comment">#EXT-X-BYTERANGE:<n>[@o]</span>
n:表示这个区间的大小
o:表示在 URI 中的 offset
The EXT-X-BYTERANGE tag appeared <span class="token keyword">in</span> version 4 of the protocol

5、
<span class="token comment">#EXT-X-TARGETDURATION :</span>
指定当前视频流中的单个切片(即 ts)文件的最大时长(秒)。
所以
<span class="token comment">#EXTINF :</span>
中指定的时间长度必须小于或是等于这个最大值。这个 tag 在整个 Playlist 文件中只能出现1次(在嵌套的情况下,
一般有真正ts url 的 m3u8 才会出现该 tag)。格式: <span class="token comment">#EXT-XTARGETDURATION:<s></span>
s:表示最大的秒数。

6、
<span class="token comment">#EXT-X-MEDIA-SEQUENCE :</span>
每一个 media URI 在 Playlist 中只有唯一的序号,相邻之间序号 +1。
格式:<span class="token comment">#EXT-X-MEDIA-SEQUENCE:<number> </span>
一个 media URI 并不是必须要包含的,如果没有,默认为 0.
 
 7、
<span class="token comment">#EXT-X-KEY :</span>
表示怎么对 media segments 进行解码。其作用范围是下次该 tag 出现前的所有media URI。
格式为: <span class="token comment">#EXT-X-KEY:<attribute-list></span>
NONE 或者 AES-128。如果是 NONE,则 URI 以及 IV 属性必须不存在,如果是 AES-128<span class="token punctuation">(</span>Advanced Encryption Standard<span class="token punctuation">)</span>,
则 URI 必须存在,IV 可以不存在。对于 AES-128 的情况,keytag 和 URI 属性共同表示了一个 key 文件,通过 URI 可以获得这个key,
如果没有 IV(Initialization Vector),则使用序列号作为 IV 进行编解码,将序列号的高位赋到 16 个字节的 buffer 中,
左边补 0;如果有 IV,则将该值当成 16 个字节的 16 进制数。

8、
<span class="token comment">#EXT-X-PROGRAM-DATE-TIME :</span>
将一个绝对时间或是日期和一个媒体段中的第一个 sample 相关
联,只对下一个 media URI 有效,
格式: <span class="token comment">#EXT-X-PROGRAM-DATE-TIME:<YYYY-MMDDThh:mm:ssZ></span>
例如: <span class="token comment">#EXT-X-PROGRAM-DATE-TIME:2010-02-19T14:54:23.031+08:00</span>

9、
<span class="token comment">#EXT-X-ALLOW-CACHE :</span>
是否允许做 cache,这个可以在 Playlist 文件中任意地方出现,
并且最多只出现一次,作用效果是所有的媒体段。
格式: <span class="token comment">#EXT-X-ALLOW-CACHE:<YES|NO></span>

10、
<span class="token comment">#EXT-X-PLAYLIST-TYPE :</span>
提供关于 Playlist 的可变性的信息,这个对整个 Playlist 文件有效,是可选的,
格式: <span class="token comment">#EXT-X-PLAYLIST-TYPE:<EVENT|VOD></span>
VOD,即为点播视频,服务器不能改变 Playlist 文件,换句话说就是该视频全部的 ts 文件已经被生成好了。
EVENT,就是实时生成 m3u8 和 ts 文件。服务器不能改变或是删除 Playlist 文件中的任何部分,
但是可以向该文件中增加新的一行内容。它的索引文件一直处于动态变化中,
播放的时候需要不断下载二级index文件。

11、
<span class="token comment">#EXT-X-ENDLIST :</span>
表示 m3u8 文件的结束,live m3u8 没有该 tag。它可以在 Playlist 中任意位置出现,
但是只能出现一个,格式: <span class="token comment">#EXT-X-ENDLIST</span>

12、
<span class="token comment">#EXT-X-MEDIA :</span>
被用来在 Playlist 中表示相同内容的不同语种/译文的版本,
比如可以通过使用 3个这种 tag 表示 3 种不同语音的音频,
或者用 2 个这个 tag 表示不同⻆度的 video。在 Playlist中,
这个标签是独立存在的,
其格式: <span class="token comment">#EXT-X-MEDIA:<attribute-list></span>
该属性列表中包含:URI、TYPE、GROUP-ID、LANGUAGE、NAME、DEFAULT、
AUTOSELECT。

URI:如果没有,则表示这个 tag 描述的可选择版本在主 PlayList 的 EXT-X-STREAM-INF 中存在。

TYPE:AUDIO and VIDEO。

GROUP-ID:具有相同 ID 的 MEDIAtag,组成一组样式。

LANGUAGE:identifies the primary language used <span class="token keyword">in</span> the rendition。

NAME:The value is a quoted-string containing a human-readable description of the rendition.
 If the LANGUAGE attribute is present <span class="token keyword">then</span> this description SHOULD be <span class="token keyword">in</span> that language。

DEFAULT:YES 或是 NO,默认是 No,如果是 YES,则客户端会以这种选项来播放,除非用户自己进行选择。

AUTOSELECT:YES 或是 NO,默认是 No,如果是 YES,则客户端会根据当前播放环境来进行选择(用户没有根据自己偏好进行选择的前提下)。

The EXT-X-MEDIA tag appeared <span class="token keyword">in</span> version 4 of the protocol。

13、
<span class="token comment">#EXT-X-STREAM-INF :</span>
指定一个包含多媒体信息的 media URI 作为 Playlist,
一般做 m3u8 的嵌套使用,
它只对紧跟后面的 URI 有效,
格式: <span class="token comment">#EXT-X-STREAM-INF:<attribute-list></span>
常用的属性如下:

BANDWIDTH:带宽,必须有。

PROGRAM-ID:该值是一个十进制整数,唯一地标识一个在 Playlist 文件范围内的特定的描述。一个 Playlist 文件中可能包含多个有相同 ID 的此 tag。

CODECS:指定流的编码类型,不是必须的。

RESOLUTION:分辨率。

AUDIO:这个值必须和 AUDIO 类别的 <span class="token string">"EXT-X-MEDIA"</span> 标签中 <span class="token string">"GROUP-ID"</span> 属性值相匹配。

VIDEO:同上。

14、
<span class="token comment">#EXT-X-DISCONTINUITY :</span>
当遇到该 tag 的时候说明以下属性发生了变化:

<span class="token function">file</span> <span class="token function">format</span> :文件格式

number and <span class="token function">type</span> of tracks :轨道

encoding parameters :编码参数

encoding sequence :编码序号

timestamp sequence :时间戳序号

15、
<span class="token comment">#ZEN-TOTAL-DURATION :</span>
表示这个 m3u8 所含 ts 的总时间长度
</code></pre> 
  <h1>3、ts</h1> 
  <p>ts 文件为传输流文件,视频编码主要格式为 H264/MPEG4,音频为 AAC/MP3。<br> ts 文件分为三层:<br> ------ ts 层:Transport Stream,是在 pes 层的基础上加入数据流的识别和传输必须的信息。<br> ------ pes 层: Packet Elemental Stream,是在音视频数据上加了时间戳等对数据帧的说明信息。<br> ------ es 层:Elementary Stream,即音视频数据。<br> <a href="http://img.e-com-net.com/image/info8/b823fe3556644bfd96762b1564618f87.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/b823fe3556644bfd96762b1564618f87.jpg" alt="hls协议分析_第3张图片" width="650" height="436" style="border:1px solid black;"></a></p> 
  <h2>3.1 、ts文件结构</h2> 
  <p><a href="http://img.e-com-net.com/image/info8/159723e9f11746d4a4a4f1a135bcb285.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/159723e9f11746d4a4a4f1a135bcb285.jpg" alt="hls协议分析_第4张图片" width="534" height="298" style="border:1px solid black;"></a><br> PAT(Program Association Table)节目关联表:主要的作用就是指明了 PMT 表的 PID 值。<br> PMT(Program Map Table)节目映射表:主要的作用就是指明了音视频流的 PID 值。</p> 
  <h2>3.2、ts文件结构部分截图</h2> 
  <p>刚开始的TS包是PAT(Program Association Table):节目关联表。<br> 再跟的TS包是PMT(Program Map Table):节目映射表。<br> 然后再跟视频、音频的TS包。<br> <a href="http://img.e-com-net.com/image/info8/0ff40bc9655c43e5a85323de4f1eccd2.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/0ff40bc9655c43e5a85323de4f1eccd2.jpg" alt="hls协议分析_第5张图片" width="650" height="429" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/24234e33b4b246628a54a1ec1bbbdb9b.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/24234e33b4b246628a54a1ec1bbbdb9b.jpg" alt="hls协议分析_第6张图片" width="650" height="403" style="border:1px solid black;"></a></p> 
  <h2>3.3、ts层(ts header)</h2> 
  <p>ts 包大小固定为 188 字节,ts 层分为三个部分:ts header、adaptation field、payload。<br> ts header :固定 4 个字节。<br> adaptation field : 可能存在也可能不存在,主要作用是给不足 188 字节的数据做填充。<br> payload : pes 数据。<br> <a href="http://img.e-com-net.com/image/info8/dd8ad427811f40b4ad24a1003c0f401d.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/dd8ad427811f40b4ad24a1003c0f401d.jpg" alt="hls协议分析_第7张图片" width="650" height="369" style="border:1px solid black;"></a><br> ts 层的内容是通过 PID 值来标识的,主要内容包括:PAT 表、PMT 表、音频流、视频流。<br> 解析 ts 流要先找到 PAT 表,只要找到 PAT 就可以找到 PMT,然后就可以找到音视频流了。<br> PAT 表的和 PMT 表需要定期插入 ts 流,因为用户随时可能加入 ts 流,这个间隔比较小,<br> 通常每隔几个视频帧就要加入 PAT和 PMT。<br> PAT 和 PMT 表是必须的,还可以加入其它表如 SDT(业务描述表)等,不过 hls 流只要有<br> PAT 和 PMT 就可以播放了。</p> 
  <h2>3.4、ts层(adaptation field)</h2> 
  <p>ts 包大小固定为 188 字节,ts 层分为三个部分:ts header、adaptation field、payload。<br> ts header :固定 4 个字节。<br> adaptation field : 可能存在也可能不存在,主要作用是给不足 188 字节的数据做填充。<br> payload : pes 数据。<br> <a href="http://img.e-com-net.com/image/info8/defaa14f3b09479a912f9b554d9690e2.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/defaa14f3b09479a912f9b554d9690e2.jpg" alt="hls协议分析_第8张图片" width="650" height="174" style="border:1px solid black;"></a><br> 自适应区的长度要包含传输错误指示符标识的一个字节。pcr 是节目时钟参考,pcr、dts、pts 都是对同<br> 一个系统时钟的采样值,pcr 是递增的,因此可以将其设置为 dts 值,音频数据不需要 pcr。如果没有字<br> 段,ipad 是可以播放的,但 vlc 无法播放。打包 ts 流时 PAT 和 PMT 表是没有 adaptation field 的,<br> 不够的长度直接补 0xff 即可。视频流和音频流都需要加 adaptation field,通常加在一个帧的第一个 ts<br> 包和最后一个 ts 包中,中间的 ts 包不加。</p> 
  <p><strong>adaptation field 详解:</strong><br> flag 标志位:0x10就表示有PCR,下面视频流截图也是这个情况,0x50是random_access_indicator标志位和PCR_flag标志位都有。<br> <a href="http://img.e-com-net.com/image/info8/a3269966ff7141dcac87ef4b6afd315f.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/a3269966ff7141dcac87ef4b6afd315f.jpg" alt="hls协议分析_第9张图片" width="650" height="831" style="border:1px solid black;"></a></p> 
  <h3>3.4.1、视频流和音频流加 adaptation field 情况部分截图</h3> 
  <p><strong>1、视频帧:</strong><br> I帧:第一个TS包和最后一个TS包有adaptation field,根据ts header 最后一个字节判断。<br> (第一个TS包要存PCR)<br> <a href="http://img.e-com-net.com/image/info8/333243369bb3449fb4737ac478542aad.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/333243369bb3449fb4737ac478542aad.jpg" alt="hls协议分析_第10张图片" width="650" height="497" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/8400f108a1a34719bfe130248dcf6a35.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/8400f108a1a34719bfe130248dcf6a35.jpg" alt="hls协议分析_第11张图片" width="650" height="346" style="border:1px solid black;"></a><br> P帧:最后一个TS包有adaptation field,根据ts header 最后一个字节判断。<br> <a href="http://img.e-com-net.com/image/info8/0d9e3a5447344b49a3603fe72753702f.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/0d9e3a5447344b49a3603fe72753702f.jpg" alt="hls协议分析_第12张图片" width="650" height="227" style="border:1px solid black;"></a><br> <strong>2、音频帧:</strong><br> 最后一个TS包有adaptation field,根据ts header 最后一个字节判断。<br> <a href="http://img.e-com-net.com/image/info8/eed779a46d6745b8a105540989919d43.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/eed779a46d6745b8a105540989919d43.jpg" alt="hls协议分析_第13张图片" width="650" height="203" style="border:1px solid black;"></a></p> 
  <h2>3.5、ts层(PAT)</h2> 
  <p>PAT(Program Association Table)节目关联表:主要的作用就是指明了 PMT 表的 PID 值。<br> <a href="http://img.e-com-net.com/image/info8/4b237cbe3834410dbd65f7c3192f08fb.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/4b237cbe3834410dbd65f7c3192f08fb.jpg" alt="hls协议分析_第14张图片" width="650" height="600" style="border:1px solid black;"></a></p> 
  <h3>3.5.1、PAT情况截图</h3> 
  <p>1、下面0x01字节表示有PMT。<br> 2、下面0XF0 01的后13b就是PMT的PID(4097)。<br> (注意这个PID与ts header的pid的字节序是不同的)<br> <a href="http://img.e-com-net.com/image/info8/e9591696efa84133a9eb49e527bab19f.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/e9591696efa84133a9eb49e527bab19f.jpg" alt="hls协议分析_第15张图片" width="650" height="529" style="border:1px solid black;"></a></p> 
  <h2>3.6、ts层(PMT)</h2> 
  <p>PMT(Program Map Table)节目映射表:主要的作用就是指明了音视频流的 PID 值。<br> <a href="http://img.e-com-net.com/image/info8/d12c4c25d00f4b4db3fab2fa25e0356d.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/d12c4c25d00f4b4db3fab2fa25e0356d.jpg" alt="hls协议分析_第16张图片" width="650" height="334" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/e71a00dba158440a84509b15155f2236.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/e71a00dba158440a84509b15155f2236.jpg" alt="hls协议分析_第17张图片" width="650" height="429" style="border:1px solid black;"></a></p> 
  <h3>3.6.1、PMT情况截图</h3> 
  <p>1、下面0xE1 00字节后13b表示PCR的PID(256)。<br> 2、下面0X0F 字节就是stream type AAC。<br> 3、下面0xE1 01字节后13b就是elementary_PID (257)。<br> 4、下面0X1B 字节就是stream type H264。<br> 5、下面0xE1 00字节后13b就是elementary_PID (256)。<br> <a href="http://img.e-com-net.com/image/info8/50e9b25279094b7bbf66bfcd1e7b040b.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/50e9b25279094b7bbf66bfcd1e7b040b.jpg" alt="hls协议分析_第18张图片" width="650" height="589" style="border:1px solid black;"></a></p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1396498071013085184"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(hls,hls,m3u8,ts,流媒体)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1901144477058265088.htm"
                           title="【vscode-03】AUTOSAR CP 插件配置" target="_blank">【vscode-03】AUTOSAR CP 插件配置</a>
                        <span class="text-muted">工程师平哥</span>
<a class="tag" taget="_blank" href="/search/AUTOSAR/1.htm">AUTOSAR</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8%E4%BF%9D%E5%A7%86%E7%BA%A7%E6%95%99%E7%A8%8B/1.htm">工具使用保姆级教程</a><a class="tag" taget="_blank" href="/search/%E6%8C%81%E7%BB%AD%E6%9B%B4%E6%96%B0.../1.htm">持续更新...</a><a class="tag" taget="_blank" href="/search/Windowns/1.htm">Windowns</a><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a><a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E8%BE%91%E5%99%A8/1.htm">编辑器</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a>
                        <div>vscodeAUTOSARCP插件配置1.AUOTSARCP开发推荐接插件2.为什么要使用这些接插件?2.1新建配置2.2C/C++需求2.2编译脚本语言需求2.3ARXML/XML工具2.4文档工具2.4.1doxdocgen自动生成注释模板工具2.4.2OfficeViewer(MarkdownEditor)2.5git管理工具2.6自定义bar2.7代码格式化2.8程序员主题2.9语言选择1</div>
                    </li>
                    <li><a href="/article/1901142711843483648.htm"
                           title="python 解决 ‘win32api’ 模块找不到的问题" target="_blank">python 解决 ‘win32api’ 模块找不到的问题</a>
                        <span class="text-muted">xybf</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>出现这个问题可能是因为升级至python3.10之后,会遗漏两个重要的dll:`pythoncom310.dll`和`pywintypes310.dll`。解决方案就是在python目录下运行`pythonScripts/pywin32_postinstall.py-install`,然后这两个文件就会被创建在`C:\Windows\System32`或者是python目录下。如果这两个地方都找不</div>
                    </li>
                    <li><a href="/article/1901142331587883008.htm"
                           title="Elasticstack-日志分析平台" target="_blank">Elasticstack-日志分析平台</a>
                        <span class="text-muted">尼古拉斯-邓</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a>
                        <div>#ElasticStack-日志分析平台##1.Filebeat```shellvim/etc/hostsip1dijiaip2meimeiip3biaobei```###Filebeat安装```shellcurl-L-Ohttps://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.13.2-linux-x86_64.tar.g</div>
                    </li>
                    <li><a href="/article/1901136591896768512.htm"
                           title="第四章:高级特性与最佳实践 - 第五节 - Tailwind CSS 代码组织和维护技巧" target="_blank">第四章:高级特性与最佳实践 - 第五节 - Tailwind CSS 代码组织和维护技巧</a>
                        <span class="text-muted"></span>

                        <div>在大型项目中,良好的代码组织和维护策略对于项目的可持续发展至关重要。本节将介绍如何在使用TailwindCSS的项目中组织和维护代码,以提高开发效率和代码质量。目录结构规范推荐的项目结构src/├──styles/│├──base/││├──typography.css││├──colors.css││└──reset.css│├──components/││├──button.css││├──c</div>
                    </li>
                    <li><a href="/article/1901135452681859072.htm"
                           title="第四章:高级特性与最佳实践 - 第三节 - Tailwind CSS 性能优化策略" target="_blank">第四章:高级特性与最佳实践 - 第三节 - Tailwind CSS 性能优化策略</a>
                        <span class="text-muted"></span>

                        <div>在使用TailwindCSS开发大型项目时,性能优化是一个不可忽视的话题。本节将从构建性能、运行时性能、文件体积等多个维度,详细介绍TailwindCSS的性能优化策略。构建优化优化扫描范围//tailwind.config.jsmodule.exports={content:[//只扫描实际使用的文件'./src/pages/**/*.{js,jsx,ts,tsx}','./src/compon</div>
                    </li>
                    <li><a href="/article/1901130921092902912.htm"
                           title="第四章:高级特性与最佳实践 - 第五节 - Tailwind CSS 代码组织和维护技巧" target="_blank">第四章:高级特性与最佳实践 - 第五节 - Tailwind CSS 代码组织和维护技巧</a>
                        <span class="text-muted"></span>

                        <div>在大型项目中,良好的代码组织和维护策略对于项目的可持续发展至关重要。本节将介绍如何在使用TailwindCSS的项目中组织和维护代码,以提高开发效率和代码质量。目录结构规范推荐的项目结构src/├──styles/│├──base/││├──typography.css││├──colors.css││└──reset.css│├──components/││├──button.css││├──c</div>
                    </li>
                    <li><a href="/article/1901130919868166144.htm"
                           title="第四章:高级特性与最佳实践 - 第四节 - Tailwind CSS CSS 提取和打包优化" target="_blank">第四章:高级特性与最佳实践 - 第四节 - Tailwind CSS CSS 提取和打包优化</a>
                        <span class="text-muted"></span>

                        <div>在现代前端工程中,CSS的提取和打包优化对于项目性能至关重要。本节将详细介绍如何在使用TailwindCSS的项目中实现CSS的高效提取和打包优化。CSS提取策略MiniCssExtractPlugin配置//webpack.config.jsconstMiniCssExtractPlugin=require('mini-css-extract-plugin')module.exports={mo</div>
                    </li>
                    <li><a href="/article/1901127451476553728.htm"
                           title="Spring cloud公共模块" target="_blank">Spring cloud公共模块</a>
                        <span class="text-muted">weixin_30402085</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/1.htm">开发工具</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>1.0公共的模块是公共的工具包以及实体等2.添加架包4.0.0com.java.springcloudmicroservice0.0.1-SNAPSHOTmicroservice-commonorg.springframework.bootspring-boot-starter-data-jpa3.编写实体packagecom.java.entity;importjava.io.Serializa</div>
                    </li>
                    <li><a href="/article/1901122281606803456.htm"
                           title="【Docker compose】基于宿主机的Neo4j自动备份" target="_blank">【Docker compose】基于宿主机的Neo4j自动备份</a>
                        <span class="text-muted">roman_日积跬步-终至千里</span>
<a class="tag" taget="_blank" href="/search/neo4j/1.htm">neo4j</a><a class="tag" taget="_blank" href="/search/Docker/1.htm">Docker</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/neo4j/1.htm">neo4j</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>文章目录1、开启自动备份2、恢复1、开启自动备份在宿主机执行:bash#{lakehouse_home}/neo4j_cron.sh自动备份开启如下日志:FriMar701:59:53UTC2025-Checkingifcronjobalreadyexists.FriMar701:59:53UTC2025-Addingnewcronjob.FriMar701:59:53UTC2025-Cronjo</div>
                    </li>
                    <li><a href="/article/1901120640425979904.htm"
                           title="【JCR一区级】被囊群算法TSA-Transformer-GRU负荷数据回归预测【含Matlab源码 6309期】" target="_blank">【JCR一区级】被囊群算法TSA-Transformer-GRU负荷数据回归预测【含Matlab源码 6309期】</a>
                        <span class="text-muted">Matlab武动乾坤</span>
<a class="tag" taget="_blank" href="/search/matlab/1.htm">matlab</a>
                        <div>Matlab武动乾坤博客之家</div>
                    </li>
                    <li><a href="/article/1901115851415810048.htm"
                           title="默默的学python——两个重要的函数dir()、help()" target="_blank">默默的学python——两个重要的函数dir()、help()</a>
                        <span class="text-muted">xiaoli_panpan</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/python%E5%9F%BA%E7%A1%80/1.htm">python基础</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>一、dir()函数dir()函数在Python中用于返回一个对象的所有属性和方法的列表,当你对一个函数使用dir()时,它会返回函数对象的所有可访问的属性和方法的名字列表。具体的说,dir()函数获取的内容包括:1.特殊方法和魔法方法如call、code、defaults、doc、globals、__name__等,这些方法和属性是函数对象的一部分,提供了对函数元数据的访问。2.基础自基类的属性和</div>
                    </li>
                    <li><a href="/article/1901103622159134720.htm"
                           title="出租车计价器 C51" target="_blank">出租车计价器 C51</a>
                        <span class="text-muted">CHG727</span>
<a class="tag" taget="_blank" href="/search/51%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">51单片机</a><a class="tag" taget="_blank" href="/search/51%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">51单片机</a>
                        <div>#include#include#include"ds1302.h"#include"temp.h"intmiao=0;intfen=0;uinti=0;inta;ucharluchen=0;//路程ucharyuan=0;//费用uchartime1=0;//路程时间floatuprice=1.2;uintustar=0;uchartimenow[6];ucharsetplace;bitsets</div>
                    </li>
                    <li><a href="/article/1901100725295968256.htm"
                           title="房产租赁数据分析与可视化" target="_blank">房产租赁数据分析与可视化</a>
                        <span class="text-muted">学习只是用户态</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%8F%AF%E8%A7%86%E5%8C%96/1.htm">信息可视化</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/1.htm">数据挖掘</a>
                        <div>【实训目的】  通过本次实训,要求了解Python用于数据可视化的常用包:matplotlib、seaborn、pyecharts等基本使用,及各种图形的使用。【实训环境】  Jupyter环境、Pandas、NumPy、Matplotlib。【实训内容】  1.数据统计与分析方面的可视化;  2.数据分析与预测方面的可视化;  3.数据多类型的可视化。  本次实验以温州市三区房屋租赁数据(res</div>
                    </li>
                    <li><a href="/article/1901092782739615744.htm"
                           title="metasploit内网篇之域控内信息收集(十一)" target="_blank">metasploit内网篇之域控内信息收集(十一)</a>
                        <span class="text-muted">暴躁的小胡!!!</span>
<a class="tag" taget="_blank" href="/search/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F/1.htm">内网渗透</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>常用信息收集模块auxiliary/scanner/discovery/arp_sweep#基于arp协议发现内网存活主机,这不能通过代理使用auxiliary/scanner/portscan/ack#基于tcp的ack回复进行端口扫描,默认扫描1-10000端口auxiliary/scanner/portscan/tcp#基于tcp进行端口扫描,默认扫描1-10000端口auxiliary/s</div>
                    </li>
                    <li><a href="/article/1901089377912680448.htm"
                           title="13.ansible-playbook批量部署mysql/apache和http报文状态码" target="_blank">13.ansible-playbook批量部署mysql/apache和http报文状态码</a>
                        <span class="text-muted">江小宝</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/apache/1.htm">apache</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a>
                        <div>文章目录一、ansible-playbook实现MySQL的二进制部署二、Ansibleplaybook实现apache批量部署三、http的报文结构和状态码总结3.1报文结构3.2状态码一、ansible-playbook实现MySQL的二进制部署基于sshkey密钥登录准备相关文件,hosts,ansible.cfg(路径),my.cnf编写playbook文件[root@localhosta</div>
                    </li>
                    <li><a href="/article/1901085851446734848.htm"
                           title="软件测试之使用Requests库进行接口测试" target="_blank">软件测试之使用Requests库进行接口测试</a>
                        <span class="text-muted">头疼的程序员</span>
<a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a>
                        <div>文章目录前言Requests库是什么为什么要用Requests库进行接口测试安装Requests库Requests库使用发送GET请求发送带查询参数的GET请求响应内容格式添加请求头信息发送一个POST请求查看响应内容断言请求超时Cookie与Session模拟登录参考目录前言阅读本文前请注意最后编辑时间,文章内容可能与目前最新的技术发展情况相去甚远。欢迎各位评论与私信,指出错误或是进行交流等。本</div>
                    </li>
                    <li><a href="/article/1901084718435201024.htm"
                           title="Python PyQt5 简单的信号和槽 多线程传数据" target="_blank">Python PyQt5 简单的信号和槽 多线程传数据</a>
                        <span class="text-muted">热爱生活热爱你</span>
<a class="tag" taget="_blank" href="/search/python3/1.htm">python3</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>注:pythonqt的信号与槽和c++qt还是有一些区别的,尤其是在connect方面;pythonqt信号和槽需要关注下对象的生命周期,不然信号发送后槽是接受不到的;1、a.py:多线程及定义信号和发送信号;importtimefromPyQt5.QtCoreimportpyqtSignal,QThread#发送信号classSender(QThread):my_signal=pyqtSigna</div>
                    </li>
                    <li><a href="/article/1901084214476992512.htm"
                           title="linux下命令行方式的音量控制" target="_blank">linux下命令行方式的音量控制</a>
                        <span class="text-muted">热爱生活热爱你</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>输入命令:alsamixer;//设置系统音量,这个百分比会有一定的误差存在amixersetSpeaker100%//设置系统麦克风amixersetMic100%c++代码可以执行运行上面的命令:QStringyl="amixersetSpeaker100%";QByteArraycmd;cmd.append(yl);//也可以ba2=s2.toLatin1();constchar*c_cmd</div>
                    </li>
                    <li><a href="/article/1901075883830079488.htm"
                           title="cv2.imshow报错" target="_blank">cv2.imshow报错</a>
                        <span class="text-muted">残影飞雪</span>
<a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>pipinstallopencv-contrib-pythoncv2.error:OpenCV(4.1.0)C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:627:error:(-2:Unspecifiederror)Thefunctionisnotimplemented.RebuildthelibrarywithWi</div>
                    </li>
                    <li><a href="/article/1901073741278932992.htm"
                           title="Node.js--exports 对象详解:用法、示例与最佳实践" target="_blank">Node.js--exports 对象详解:用法、示例与最佳实践</a>
                        <span class="text-muted">还是鼠鼠</span>
<a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/web/1.htm">web</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a>
                        <div>目录1.exports对象介绍2.基础示例:使用exports导出对象文件名:math.js(JavaScript)3.在另一个文件中使用require进行导入文件名:app.js(JavaScript)4.运行程序5.exports的限制6.其他exports使用方式示例1:导出单个函数示例2:导出类7.结论1.exports对象介绍在Node.js中,exports是module.export</div>
                    </li>
                    <li><a href="/article/1901071726071050240.htm"
                           title="力扣:2.两数相加(O(n)复杂度)" target="_blank">力扣:2.两数相加(O(n)复杂度)</a>
                        <span class="text-muted">码农 小王</span>
<a class="tag" taget="_blank" href="/search/%E5%8A%9B%E6%89%A3%E5%88%B7%E9%A2%98/1.htm">力扣刷题</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>2.两数相加-力扣(LeetCode)2.两数相加-给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0开头。示例1:[https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2021/01/</div>
                    </li>
                    <li><a href="/article/1901071517622530048.htm"
                           title="element UI 2.15.13和 vue2.0表格勾选回显" target="_blank">element UI 2.15.13和 vue2.0表格勾选回显</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AFvue.js/1.htm">前端vue.js</a>
                        <div>弹窗回显勾选的项关键代码//函数名叫什么无所谓,函数的参数值data是要回显表格的所有数据//数据改变放在this.$nextTick中handleSelection(data){this.$nextTick(()=>{//selectedArr是所有需要勾选的项的集合constselectedArr=data.filter(item=>item.userId);selectedArr.forEa</div>
                    </li>
                    <li><a href="/article/1901071516364238848.htm"
                           title="Element UI el-card 的click点击事件无法使用(失效)解决" target="_blank">Element UI el-card 的click点击事件无法使用(失效)解决</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/vue.js%E5%89%8D%E7%AB%AF/1.htm">vue.js前端</a>
                        <div>解决方式链接名字改为链接名字关键代码@click改为@click.native完整代码{{item.name}}exportdefault{name:'card_list',data(){return{storeList:[]};},created(){this.getStoreList();},methods:{getStoreList(){this.$loading({lock:true,ta</div>
                    </li>
                    <li><a href="/article/1901071389205524480.htm"
                           title="字符串相关方法" target="_blank">字符串相关方法</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AFjavascript/1.htm">前端javascript</a>
                        <div>一、拼接或截取字符串1.slice此方法用来提取一个字符串,并返回一个新的字符串参数:1start,表示从该索引处开始提取字符串的字符(包括),如果为负数则从后开始计算2end,表示从该索引处结束提取字符串(不包括),如果省略则一直提取到字符串末尾,如果为负数从后开始计算//slice(start,last)//从start开始截取,last结束letstr='tom_li';console.lo</div>
                    </li>
                    <li><a href="/article/1901057235732197376.htm"
                           title="python flask 分页_Python的Flask框架中实现分页功能的教程" target="_blank">python flask 分页_Python的Flask框架中实现分页功能的教程</a>
                        <span class="text-muted">weixin_39959126</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/flask/1.htm">flask</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E9%A1%B5/1.htm">分页</a>
                        <div>BlogPosts的提交让我们从简单的开始。首页上必须有一张用户提交新的post的表单。首先我们定义一个单域表单对象(fileapp/forms.py):classPostForm(Form):post=TextField('post',validators=[Required()])下面,我们把这个表单添加到template中(fileapp/templates/index.html):{%ex</div>
                    </li>
                    <li><a href="/article/1901057108829335552.htm"
                           title="linux jvm gc日志分析,JVM GC 日志详解" target="_blank">linux jvm gc日志分析,JVM GC 日志详解</a>
                        <span class="text-muted">一只小小的IOS</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/gc%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90/1.htm">gc日志分析</a>
                        <div>本文采用的JDK版本:javaversion"1.8.0_144"Java(TM)SERuntimeEnvironment(build1.8.0_144-b01)JavaHotSpot(TM)64-BitServerVM(build25.144-b01,mixedmode)一、GC日志参数设置JVMGC格式日志的主要参数包括如下8个:-XX:+PrintGC输出简要GC日志-XX:+PrintGC</div>
                    </li>
                    <li><a href="/article/1901048791650332672.htm"
                           title="Java 8 + Tomcat 9.0.102 的稳定环境搭建方案,适用于生产环境" target="_blank">Java 8 + Tomcat 9.0.102 的稳定环境搭建方案,适用于生产环境</a>
                        <span class="text-muted">无极低码</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>一、安装Java8安装OpenJDK8bashsudoaptupdatesudoaptinstallopenjdk-8-jdk-y验证安装bashjava-version应输出类似:openjdkversion“1.8.0_412”OpenJDKRuntimeEnvironment(build1.8.0_412-8u412-ga-1~22.04-b08)OpenJDK64-BitServerVM(</div>
                    </li>
                    <li><a href="/article/1901047406875701248.htm"
                           title="分享vue好用的pdf 工具实测" target="_blank">分享vue好用的pdf 工具实测</a>
                        <span class="text-muted">何包蛋H</span>
<a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>vue3-pdf-app:带大纲,带分页,带缩放,带全屏,带打印,带下载,带旋转下载依赖:yarnaddvue3-pdf-appornpminstallvue3-pdf-app配置类:创建文件pdfConfig.ts//工具栏配置项exportconstconfig={//右侧其他区工具sidebar:{viewThumbnail:true,//启用缩略图视图viewOutline:true,//</div>
                    </li>
                    <li><a href="/article/1901047027979055104.htm"
                           title="Python 实现海康机器人工业相机 MV-CS050-10GC 的实时显示视频流及拍照功能(实时显示视频流同时可以进行拍照)" target="_blank">Python 实现海康机器人工业相机 MV-CS050-10GC 的实时显示视频流及拍照功能(实时显示视频流同时可以进行拍照)</a>
                        <span class="text-muted">恋上钢琴的虫</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%A0%81%E7%9B%B8%E6%9C%BA/1.htm">数码相机</a>
                        <div>参考链接:https://www.cnblogs.com/HanYork/p/17388506.htmlhttps://www.cnblogs.com/miracle-luna/p/16960556.html#5138211Flask搭建流媒体服务器:使用Flask搭建一个流媒体服务器_multipart/x-mixed-replace;boundary=frame-CSDN博客</div>
                    </li>
                    <li><a href="/article/1901045389943959552.htm"
                           title="springboot2.2.x对接elasticsearch7.2.0,实现分页搜索情况下的高亮和摘要功能" target="_blank">springboot2.2.x对接elasticsearch7.2.0,实现分页搜索情况下的高亮和摘要功能</a>
                        <span class="text-muted">lyc613</span>
<a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a>
                        <div>springboot2.2.x对接elasticsearch7.2.0,实现分页搜索情况下的高亮和摘要功能相关依赖2.2.0.RELEASEorg.springframework.bootspring-boot-starter-data-elasticsearches配置spring:elasticsearch:rest:#es地址uris:http://192.168.125.12:9200功能</div>
                    </li>
                                <li><a href="/article/31.htm"
                                       title="312个免费高速HTTP代理IP(能隐藏自己真实IP地址)" target="_blank">312个免费高速HTTP代理IP(能隐藏自己真实IP地址)</a>
                                    <span class="text-muted">yangshangchuan</span>
<a class="tag" taget="_blank" href="/search/%E9%AB%98%E9%80%9F/1.htm">高速</a><a class="tag" taget="_blank" href="/search/%E5%85%8D%E8%B4%B9/1.htm">免费</a><a class="tag" taget="_blank" href="/search/superword/1.htm">superword</a><a class="tag" taget="_blank" href="/search/HTTP%E4%BB%A3%E7%90%86/1.htm">HTTP代理</a>
                                    <div>  
  
124.88.67.20:843
190.36.223.93:8080
117.147.221.38:8123
122.228.92.103:3128
183.247.211.159:8123
124.88.67.35:81
112.18.51.167:8123
218.28.96.39:3128
49.94.160.198:3128
183.20</div>
                                </li>
                                <li><a href="/article/158.htm"
                                       title="pull解析和json编码" target="_blank">pull解析和json编码</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/pull%E8%A7%A3%E6%9E%90/1.htm">pull解析</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a>
                                    <div>n.json文件: 
[{name:java,lan:c++,age:17},{name:android,lan:java,age:8}] 
  
pull.xml文件 
<?xml version="1.0" encoding="utf-8"?> 
<stu> 
    <name>java</div>
                                </li>
                                <li><a href="/article/285.htm"
                                       title="[能源与矿产]石油与地球生态系统" target="_blank">[能源与矿产]石油与地球生态系统</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E8%83%BD%E6%BA%90/1.htm">能源</a>
                                    <div> 
      按照苏联的科学界的说法,石油并非是远古的生物残骸的演变产物,而是一种可以由某些特殊地质结构和物理条件生产出来的东西,也就是说,石油是可以自增长的.... 
 
      那么我们做一个猜想: 石油好像是地球的体液,我们地球具有自动产生石油的某种机制,只要我们不过量开采石油,并保护好</div>
                                </li>
                                <li><a href="/article/412.htm"
                                       title="类与对象浅谈" target="_blank">类与对象浅谈</a>
                                    <span class="text-muted">沐刃青蛟</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80/1.htm">基础</a>
                                    <div> 
       类,字面理解,便是同一种事物的总称,比如人类,是对世界上所有人的一个总称。而对象,便是类的具体化,实例化,是一个具体事物,比如张飞这个人,就是人类的一个对象。但要注意的是:张飞这个人是对象,而不是张飞,张飞只是他这个人的名字,是他的属性而已。而一个类中包含了属性和方法这两兄弟,他们分别用来描述对象的行为和性质(感觉应该是</div>
                                </li>
                                <li><a href="/article/539.htm"
                                       title="新站开始被收录后,我们应该做什么?" target="_blank">新站开始被收录后,我们应该做什么?</a>
                                    <span class="text-muted">IT独行者</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/seo/1.htm">seo</a>
                                    <div>新站开始被收录后,我们应该做什么? 
  
      百度终于开始收录自己的网站了,作为站长,你是不是觉得那一刻很有成就感呢,同时,你是不是又很茫然,不知道下一步该做什么了?至少我当初就是这样,在这里和大家一份分享一下新站收录后,我们要做哪些工作。 
      至于如何让百度快速收录自己的网站,可以参考我之前的帖子《新站让百</div>
                                </li>
                                <li><a href="/article/666.htm"
                                       title="oracle 连接碰到的问题" target="_blank">oracle 连接碰到的问题</a>
                                    <span class="text-muted">文强chu</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div>Unable to find a java Virtual Machine--安装64位版Oracle11gR2后无法启动SQLDeveloper的解决方案 
作者:草根IT网 来源:未知 人气:813标签: 
导读:安装64位版Oracle11gR2后发现启动SQLDeveloper时弹出配置java.exe的路径,找到Oracle自带java.exe后产生的路径“C:\app\用户名\prod</div>
                                </li>
                                <li><a href="/article/793.htm"
                                       title="Swing中按ctrl键同时移动鼠标拖动组件(类中多借口共享同一数据)" target="_blank">Swing中按ctrl键同时移动鼠标拖动组件(类中多借口共享同一数据)</a>
                                    <span class="text-muted">小桔子</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%BB%A7%E6%89%BF/1.htm">继承</a><a class="tag" taget="_blank" href="/search/swing/1.htm">swing</a><a class="tag" taget="_blank" href="/search/%E6%8E%A5%E5%8F%A3/1.htm">接口</a><a class="tag" taget="_blank" href="/search/%E7%9B%91%E5%90%AC/1.htm">监听</a>
                                    <div>        都知道java中类只能单继承,但可以实现多个接口,但我发现实现多个接口之后,多个接口却不能共享同一个数据,应用开发中想实现:当用户按着ctrl键时,可以用鼠标点击拖动组件,比如说文本框。 
编写一个监听实现KeyListener,NouseListener,MouseMotionListener三个接口,重写方法。定义一个全局变量boolea</div>
                                </li>
                                <li><a href="/article/920.htm"
                                       title="linux常用的命令" target="_blank">linux常用的命令</a>
                                    <span class="text-muted">aichenglong</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/1.htm">常用命令</a>
                                    <div>1 startx切换到图形化界面 
2 man命令:查看帮助信息 
 man 需要查看的命令,man命令提供了大量的帮助信息,一般可以分成4个部分 
 name:对命令的简单说明 
 synopsis:命令的使用格式说明 
 description:命令的详细说明信息 
 options:命令的各项说明 
3 date:显示时间 
 语法:date [OPTION]... [+FORMAT] 
 </div>
                                </li>
                                <li><a href="/article/1047.htm"
                                       title="eclipse内存优化" target="_blank">eclipse内存优化</a>
                                    <span class="text-muted">AILIKES</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a>
                                    <div>一 基本说明      在JVM中,总体上分2块内存区,默认空余堆内存小于 40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。     1)堆内存(Heap memory):堆是运行时数据区域,所有类实例和数组的内存均从此处分配,是Java代码可及的内存,是留给开发人</div>
                                </li>
                                <li><a href="/article/1174.htm"
                                       title="关键字的使用探讨" target="_blank">关键字的使用探讨</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/%E5%85%B3%E9%94%AE%E5%AD%97/1.htm">关键字</a>
                                    <div>//关键字的使用探讨/*访问关键词private 只能在本类中访问public 只能在本工程中访问protected 只能在包中和子类中访问默认的 只能在包中访问*//*final   类 方法 变量 final 类 不能被继承  final 方法 不能被子类覆盖,但可以继承 final 变量 只能有一次赋值,赋值后不能改变 final 不能用来修饰构造方法*///this()</div>
                                </li>
                                <li><a href="/article/1301.htm"
                                       title="JS中定义对象的几种方式" target="_blank">JS中定义对象的几种方式</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/js/1.htm">js</a>
                                    <div>    1. 基于已有对象扩充其对象和方法(只适合于临时的生成一个对象): 
<html>
<head>
    <title>基于已有对象扩充其对象和方法(只适合于临时的生成一个对象)</title>
</head>
<script>
    var obj = new Object();
 </div>
                                </li>
                                <li><a href="/article/1428.htm"
                                       title="表驱动法实例" target="_blank">表驱动法实例</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%A1%A8%E9%A9%B1%E5%8A%A8%E6%B3%95/1.htm">表驱动法</a><a class="tag" taget="_blank" href="/search/TDD/1.htm">TDD</a>
                                    <div>获得月的天数是典型的直接访问驱动表方式的实例,下面我们来展示一下: 
MonthDaysTest.java 
package com.study.test;

import org.junit.Assert;
import org.junit.Test;

import com.study.MonthDays;

public class MonthDaysTest {

	@T</div>
                                </li>
                                <li><a href="/article/1555.htm"
                                       title="LInux启停重启常用服务器的脚本" target="_blank">LInux启停重启常用服务器的脚本</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>启动,停止和重启常用服务器的Bash脚本,对于每个服务器,需要根据实际的安装路径做相应的修改 
  
#! /bin/bash

Servers=(Apache2, Nginx, Resin, Tomcat, Couchbase, SVN, ActiveMQ, Mongo);
Ops=(Start, Stop, Restart);
currentDir=$(pwd);
echo</div>
                                </li>
                                <li><a href="/article/1682.htm"
                                       title="【HBase六】REST操作HBase" target="_blank">【HBase六】REST操作HBase</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/hbase/1.htm">hbase</a>
                                    <div>HBase提供了REST风格的服务方便查看HBase集群的信息,以及执行增删改查操作 
  1. 启动和停止HBase REST 服务 1.1 启动REST服务 
前台启动(默认端口号8080) 
[hadoop@hadoop bin]$ ./hbase rest start 
  
后台启动 
hbase-daemon.sh start rest 
  
启动时指定</div>
                                </li>
                                <li><a href="/article/1809.htm"
                                       title="大话zabbix 3.0设计假设" target="_blank">大话zabbix 3.0设计假设</a>
                                    <span class="text-muted">ronin47</span>

                                    <div>What’s new in Zabbix 2.0? 
去年开始使用Zabbix的时候,是1.8.X的版本,今年Zabbix已经跨入了2.0的时代。看了2.0的release notes,和performance相关的有下面几个: 
 
          :: Performance improvements::Trigger related da</div>
                                </li>
                                <li><a href="/article/1936.htm"
                                       title="http错误码大全" target="_blank">http错误码大全</a>
                                    <span class="text-muted">byalias</span>
<a class="tag" taget="_blank" href="/search/http%E5%8D%8F%E8%AE%AE/1.htm">http协议</a><a class="tag" taget="_blank" href="/search/javaweb/1.htm">javaweb</a>
                                    <div>响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行。 
响应码分五种类型,由它们的第一位数字表示: 
1)1xx:信息,请求收到,继续处理 
2)2xx:成功,行为被成功地接受、理解和采纳 
3)3xx:重定向,为了完成请求,必须进一步执行的动作 
4)4xx:客户端错误,请求包含语法错误或者请求无法实现 
5)5xx:服务器错误,服务器不能实现一种明显无效的请求 
 
 
</div>
                                </li>
                                <li><a href="/article/2063.htm"
                                       title="J2EE设计模式-Intercepting Filter" target="_blank">J2EE设计模式-Intercepting Filter</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a>
                                    <div>Intercepting Filter类似于职责链模式 
有两种实现 
其中一种是Filter之间没有联系,全部Filter都存放在FilterChain中,由FilterChain来有序或无序地把把所有Filter调用一遍。没有用到链表这种数据结构。示例如下: 
 
 

package com.ljn.filter.custom;

import java.util.ArrayList;</div>
                                </li>
                                <li><a href="/article/2190.htm"
                                       title="修改jboss端口" target="_blank">修改jboss端口</a>
                                    <span class="text-muted">chicony</span>
<a class="tag" taget="_blank" href="/search/jboss/1.htm">jboss</a>
                                    <div>修改jboss端口 
  
%JBOSS_HOME%\server\{服务实例名}\conf\bindingservice.beans\META-INF\bindings-jboss-beans.xml 
  
中找到 
  
   <!-- The ports-default bindings are obtained by taking the base bindin</div>
                                </li>
                                <li><a href="/article/2317.htm"
                                       title="c++ 用类模版实现数组类" target="_blank">c++ 用类模版实现数组类</a>
                                    <span class="text-muted">CrazyMizzz</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a>
                                    <div>最近c++学到数组类,写了代码将他实现,基本具有vector类的功能 
 
 

#include<iostream>
#include<string>
#include<cassert>
using namespace std;
template<class T>
class Array
{
public:
	//构造函数 
	</div>
                                </li>
                                <li><a href="/article/2444.htm"
                                       title="hadoop dfs.datanode.du.reserved 预留空间配置方法" target="_blank">hadoop dfs.datanode.du.reserved 预留空间配置方法</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/%E9%A2%84%E7%95%99%E7%A9%BA%E9%97%B4/1.htm">预留空间</a>
                                    <div>对于datanode配置预留空间的方法 为:在hdfs-site.xml添加如下配置 
 <property> 
    <name>dfs.datanode.du.reserved</name> 
    <value>10737418240</value> 
  
 </div>
                                </li>
                                <li><a href="/article/2571.htm"
                                       title="mysql远程访问的设置" target="_blank">mysql远程访问的设置</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E9%98%B2%E7%81%AB%E5%A2%99/1.htm">防火墙</a>
                                    <div>第一步: 激活网络设置 你需要编辑mysql配置文件my.cnf. 通常状况,my.cnf放置于在以下目录: /etc/mysql/my.cnf (Debian linux) /etc/my.cnf (Red Hat Linux/Fedora Linux) /var/db/mysql/my.cnf (FreeBSD) 然后用vi编辑my.cnf,修改内容从以下行: [mysqld] 你所需要: 1</div>
                                </li>
                                <li><a href="/article/2698.htm"
                                       title="ios 使用特定的popToViewController返回到相应的Controller" target="_blank">ios 使用特定的popToViewController返回到相应的Controller</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/controller/1.htm">controller</a>
                                    <div>1、取navigationCtroller中的Controllers
NSArray * ctrlArray = self.navigationController.viewControllers;
2、取出后,执行,
[self.navigationController popToViewController:[ctrlArray objectAtIndex:0] animated:YES</div>
                                </li>
                                <li><a href="/article/2825.htm"
                                       title="Linux正则表达式和通配符的区别" target="_blank">Linux正则表达式和通配符的区别</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/%E9%80%9A%E9%85%8D%E7%AC%A6%E5%92%8C%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E5%8C%BA%E5%88%AB/1.htm">通配符和正则表达式的区别</a><a class="tag" taget="_blank" href="/search/%E9%80%9A%E9%85%8D%E7%AC%A6/1.htm">通配符</a>
                                    <div>转载请出自出处:http://eksliang.iteye.com/blog/1976579 
 
首先得明白二者是截然不同的 
通配符只能用在shell命令中,用来处理字符串的的匹配。 
判断一个命令是否为bash shell(linux 默认的shell)的内置命令 
 type -t commad  
返回结果含义 
 file  表示为外部命令 
 alias  表示该</div>
                                </li>
                                <li><a href="/article/2952.htm"
                                       title="Ubuntu Mysql Install and CONF" target="_blank">Ubuntu Mysql Install and CONF</a>
                                    <span class="text-muted">gengzg</span>
<a class="tag" taget="_blank" href="/search/Install/1.htm">Install</a>
                                    <div>http://www.navicat.com.cn/download/navicat-for-mysql
    Step1: 下载Navicat ,网址:http://www.navicat.com/en/download/download.html  
      
    Step2:进入下载目录,解压压缩包:tar -zxvf  navicat11_mysql_en.tar.gz  </div>
                                </li>
                                <li><a href="/article/3079.htm"
                                       title="批处理,删除文件bat" target="_blank">批处理,删除文件bat</a>
                                    <span class="text-muted">huqiji</span>
<a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/dos/1.htm">dos</a>
                                    <div>@echo off
::演示:删除指定路径下指定天数之前(以文件名中包含的日期字符串为准)的文件。
::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
::本例假设文件名中包含的日期字符串(比如:bak-2009-12-25.log)
rem 指定待删除文件的存放路径
set SrcDir=C:/Test/BatHome
rem 指定天数
set DaysAgo=1</div>
                                </li>
                                <li><a href="/article/3206.htm"
                                       title="跨浏览器兼容的HTML5视频音频播放器" target="_blank">跨浏览器兼容的HTML5视频音频播放器</a>
                                    <span class="text-muted">天梯梦</span>
<a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a>
                                    <div>HTML5的video和audio标签是用来在网页中加入视频和音频的标签,在支持html5的浏览器中不需要预先加载Adobe Flash浏览器插件就能轻松快速的播放视频和音频文件。而html5media.js可以在不支持html5的浏览器上使video和audio标签生效。    How to enable <video> and <audio> tags in </div>
                                </li>
                                <li><a href="/article/3333.htm"
                                       title="Bundle自定义数据传递" target="_blank">Bundle自定义数据传递</a>
                                    <span class="text-muted">hm4123660</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/Serializable/1.htm">Serializable</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E4%BC%A0%E9%80%92/1.htm">自定义数据传递</a><a class="tag" taget="_blank" href="/search/Bundle/1.htm">Bundle</a><a class="tag" taget="_blank" href="/search/Parcelable/1.htm">Parcelable</a>
                                    <div>      我们都知道Bundle可能过put****()方法添加各种基本类型的数据,Intent也可以通过putExtras(Bundle)将数据添加进去,然后通过startActivity()跳到下一下Activity的时候就把数据也传到下一个Activity了。如传递一个字符串到下一个Activity 
  
把数据放到Intent</div>
                                </li>
                                <li><a href="/article/3460.htm"
                                       title="C#:异步编程和线程的使用(.NET 4.5 )" target="_blank">C#:异步编程和线程的使用(.NET 4.5 )</a>
                                    <span class="text-muted">powertoolsteam</span>
<a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B/1.htm">线程</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/%E5%BC%82%E6%AD%A5%E7%BC%96%E7%A8%8B/1.htm">异步编程</a>
                                    <div>异步编程和线程处理是并发或并行编程非常重要的功能特征。为了实现异步编程,可使用线程也可以不用。将异步与线程同时讲,将有助于我们更好的理解它们的特征。 
本文中涉及关键知识点 
1. 异步编程 
2. 线程的使用 
3. 基于任务的异步模式 
4. 并行编程 
5. 总结 
 
  异步编程  
 
什么是异步操作?异步操作是指某些操作能够独立运行,不依赖主流程或主其他处理流程。通常情况下,C#程序</div>
                                </li>
                                <li><a href="/article/3587.htm"
                                       title="spark 查看 job history 日志" target="_blank">spark 查看 job history 日志</a>
                                    <span class="text-muted">Stark_Summer</span>
<a class="tag" taget="_blank" href="/search/%E6%97%A5%E5%BF%97/1.htm">日志</a><a class="tag" taget="_blank" href="/search/spark/1.htm">spark</a><a class="tag" taget="_blank" href="/search/history/1.htm">history</a><a class="tag" taget="_blank" href="/search/job/1.htm">job</a>
                                    <div>SPARK_HOME/conf 下:  
spark-defaults.conf 增加如下内容 
spark.eventLog.enabled true spark.eventLog.dir hdfs://master:8020/var/log/spark spark.eventLog.compress true  
spark-env.sh 增加如下内容 
export SP</div>
                                </li>
                                <li><a href="/article/3714.htm"
                                       title="SSH框架搭建" target="_blank">SSH框架搭建</a>
                                    <span class="text-muted">wangxiukai2015eye</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/struts/1.htm">struts</a>
                                    <div>MyEclipse搭建SSH框架 Struts Spring Hibernate 
1、new一个web project。 
2、右键项目,为项目添加Struts支持。 
   选择Struts2 Core Libraries -<MyEclipes-Library> 
     点击Finish。src目录下多了struts</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>