a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 159|回复: 1

[基础知识] JAVA基础:JAVA实现支持视频点播WEB服务器

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
一.项目简介: " e3 \4 {7 S) n: a2 S9 B
  JAVA说话是一种可移植的,简单的,健壮的嵌入式说话。而且对收集,数据库有很好的撑持,基于JAVA说话的这种特征可以十分轻易地成立一个小型INTERNET处事器。
4 b( `0 h, W3 C7 |' k7 `7 |  本项目中,作者用JAVA说话编写了一个WEB微型处事器,对简单的HTTP请求进行响应,并经由过程后端数据库对用户的发芽进行措置,年夜而动态地返回HTML页面。0 m+ |+ h$ o- n; f/ ~# x
二.项目实现: & S! Z( \' w. |) z1 U
(一)项目具体功能剖析与开发工具选择
# N! S" k0 F) Z# b1 n  可以操作一台较高设置装备摆设的小我台式机就可以实现社区内的小型处事器,搜罗网页浏览,基于高速局域网的视频下载和播放,按时新闻组发布轨范,邮件处事器等处事。3 E3 u- Q" o- h' @/ C2 X! T1 s
  本软件现实上是一个HTTP和谈的处事器。HTTP(Hyper Text Transfer Protocol),是一个专门为Web处事器和Web浏览器之间交流数据而设计的收集和谈。它经由过程划定通用资本定位符(URLs)使客户端的浏览器与处事器的Web资本成立链接关系,年夜而奠基了用户对Internet透明访谒的基本。6 H& @/ t  n/ r3 O
  在本软件中经由过程传输HTML文件使客户端可以实现网页浏览。HTML是WWW的通用标识表记标帜说话,它用来建树Web页面和节制Web信息显示名目。 HTML不是编程说话,而是一种描述说话。HTML2.0获得了IETF(Internet Engineering Task Force)的撑持而成为Internet国际尺度。今朝,HTML已经成长到3.0和4.0版,只是新版本的尺度尚未完全统一,分歧的商家对 HTML2.0进行了必然的扩充,惹人了更多新的功能。例如,Netscape公司在HTML3.0中增添了页面解救(Background Images)和表(Table)界说等标识表记标帜,使得Web页面加倍令人入神。$ @0 z8 p/ l, V% K  u( F+ w% z
  CGI是通用网关接口(Common Gateway Interface)的简称,它是Web处事器与外部轨范之间的通信接口,处事器并不关心外部应用轨范是什媚暌癸言(如C、C++、Pascal、 Delphi或Perl)编写的,它只是负责领受用户输入的信息,并把CGI轨范所发生的结不美观--HTML文档或其他合适HTTP划定的文件回传给用户。事实上,CGI是动态Web页面建造的第一步,但因为CGI轨范实现斗劲坚苦,而且效率不高,它已经逐渐被新的手艺所庖代。
3 {: W0 g* a# q- ~1 P3 g1 N+ }3 O  网页浏览撑持的网页搜罗HTML,JAVASCRIPT,APPLET,VBSCRIPT等编写的网页,但不撑持PHP,ASP等处事器端动态轨范的网页。因为处事器的规模较小,所以处事器端动态轨范被集成进处事器中。但可以经由过程编写合适必然轨则的JAVA的CGI轨范实现处事器端的动态性,不外这种JAVA轨范的平安性很难保证。
. O( A' X& J" D& S! Y& E(二)处事器的实现 3 J" N0 }5 F% X4 T8 W- }
1. 措置毗连策略: , J  C! Q1 M. Q7 s! a8 P2 [
  对于每一个用户的毗连我们采纳了每次请求知足后,将用户与处事器的毗连断开,这时用户如不美观有其他的请求,则进入请求队列年夜头进行资本竞争。
1 W# q% `, D2 ~# s7 e) E  凡是网页中的每一个图形城市被算作是一个零丁的毗连,也就是说对于一个图形良多的网页基于本处事器的毗连策略将会进行多次请求,这样的益处是防止也述容量很年夜的网页独有收集资本。
9 l& ~2 T$ p6 f  W, Z6 |2. 与数据库毗连
, ]. z# d) y( V* {" k  在与数据库的毗连中我们选用的后端数据库是微软的ACCESS数据库,因为本项目是面向小型社区的社区数据中心处事器,所以选用小型的数据库。因为JAVA的可移植性可以将处事器用在LINUX平台上,这时可以用本处事器供给的数据库设置装备摆设轨范毗连到MySql等基于LINUX的小型数据库。# k% _8 A) `/ p2 I- L; o
5 a1 A) \7 ~; S. v. z6 @
  我们应用JDBC完成与数据库的毗连。Java的一项超卓能力是构建与平台无关的客户机/处事器数据库应用。在Java 1.1中,经由过程Java数据库毗连(JDBC)实现了与各家公司之间的数据库的互连。数据库最首要的一个问题就是各家公司之间的规格年夜战。确实存在一种" 尺度"数据库说话,即"结构发芽说话"(SQL-92),但各公司为了暗示自己的分歧凡响对尺度都有一些细小的改动。所以凡是必需切当知道自己要和哪家数据库公司打交道,否则极易出问题,尽管存在所谓的"尺度"。JDBC是面向"与平台无关"设计的,所以在编程的时辰不必关心自己要使用的是什么数据库产物。和Java中的良多API一样,JDBC也做到了尽量的简化。我们发出的体例挪用对应于年夜数据库收集数据时想当然的做法:同数据库毗连,建树一个语句并执行发芽,然后措置结不美观集,无论与我们打交道的是哪家数据库厂商的产物。
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:37:28 | 显示全部楼层

JAVA基础:JAVA实现支持视频点播WEB服务器

</p>JDBC的使用: . o" `9 Y7 w$ X% o! f2 k
  为实现这一"与平台无关"的特点,JDBC为我们供给了一个"驱动轨范打点器",它能动态维护数据库发芽所需的所有驱动轨范对象。所以假如要毗连由数家公司开发的分歧种类的数据库,就需要每个数据库的零丁的驱动轨范对象。驱动轨范对象会在装载时由"驱动轨范打点器"自动注册,并可用 Class.forName()强行装载。+ `) j/ F* H  B3 c; Q0 j+ O
  为打开一个数据库,必需建树一个"数据库URL",它要指定下述三方面的内容:0 k2 l, T9 Z- ~: S
  (1) 用"jdbc"指出要使用JDBC。- \+ o2 J. F& A1 x& y
  (2) "子和谈":驱动轨范的名字或者一种数据库毗连机制的名称。因为JDBC的设计年夜ODBC领受了良多灵感,所以可以选用的第一种子和谈就是"jdbc-odbc桥",它用"odbc"关头字即可指定。, V6 X6 e+ ?* v
  (3) 数据库标识符:随使用的数据库驱动轨范的分歧而转变,但一般都供给了一个斗劲合适逻辑的名称,由数据库打点软件映射(对应)到保留了数据表的一个物理目录。为使自己的数据库标识符具有任何寄义,必需用自己的数据库打点软件为自己喜欢的名字注册(注舶鬟体过程又随运行平台的分歧而转变)。3 w) h: {1 K: q1 F* L8 ]) t
  所有这些信息都统一编译到一个字串里,即"数据库URL"。本例中,我们想经由过程ODBC子和谈统一个标识为"vod"的数据库毗连,响应的数据库URL设为:' J7 k  {4 ]! A- j! y/ ?$ Q
  String dbUrl = "jdbc:odbc:vod"
( [  S9 l  U* x. F  同样如不美观经由过程一个收集毗连,数据库URL也需要包含对远程机械进行标识的信息。
& I. \9 u: D5 U% \  JDBC的毗连体例:7 L& S5 l% y. `+ S( }0 J
  首先,JDBC中在DriverManager中对数据库数据库驱动轨范进行挂号。1 m" P5 i3 f1 I" N# n( L) A
  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");; g: U& Y' W1 r7 W
  装载JDBC- ODBC桥驱动轨范,这样做是为了让DriverManager可以找到数据库驱动轨范。然后操作DriverManager打开与数据库的毗连。+ w3 u- ~9 P/ h
  Mycon=DriverManager.getConnection(dbUrl);% t/ a" y. @0 Q9 s
  本语句的浸染是,确定与由dbUrl指定的数据库的毗连。DriverManager将年夜其中挂号的驱动轨范中寻找最恰当的驱动轨范。返回的Mycon代表了与特定的数据库之间的毗连。+ j) R2 r& Q3 \' ~# K
  Mysta=Mycon.createStatement();4 H8 b+ B! j' g; k% o* g/ v4 J2 f
  生成可以执行无参数SQL语句的Statement接口。 然后就可以在Mysta赌暌姑executeQuery()函数执行SQL语句年夜返回的ResultSet获取执行结不美观。
+ ^" I) H! z# d  G5 q3. 收集毗连: ! @: K2 F% H4 w7 V
  收集自己的概念并不难。我们想获得位于其他处所某台机械上的信息,并把它们移到这儿;或者相反。这与读写文件很是相似,只是文件存在于远程机械上,而且远程机械有权抉择若何措置我们请求或者发送的数据。但年夜年夜都编程说话对收集编程都较坚苦,而Java最超卓的一个处所就是它的"无疾苦连网"概念。有关连网的下层细节已被尽可能地提掏出去,并潜匿在JVM以及Java的本机安装系统里进行节制。我们使用的编程模子是一个文件的模子;事实上,收集毗连(一个"套接字")已被封装到系统对象里,所以可象对其他数据流那样采用同样的体例挪用。除此以外,在我们措置另一个连网问题--同时节制多个收集毗连--的时辰,Java内建的多线程机制也是十分便利的。3 r# Y: l! k  Q, U" ~* q1 d+ ~; |
  处事器的首要使命是侦听成立毗连的请求,这是由我们建树的特定处事器对象完成的。而客户机的使命是试着与一台处事器成立毗连,这是由我们建树的特定客户机对象完成的。一旦毗连建好,那么无论在处事器端仍是客户机端,毗连酿成了一个IO数据流对象。年夜这时起头,我们可以象读写一个通俗的文件那样看待毗连。所以一旦建好毗连,我们只需使用自己熟悉的IO呼吁即可。
1 Q2 ^; O& ]$ v  首先,server=new ServerSocket(80,acceptamount);
' k. G3 \* a, I. C! D; V  生成一个处事器端的套接字。其中第一个参数是暗示处事器的监听端口,端口是机械内并世无双的场所。有些时辰,一个IP地址并不足以完整标识一个处事器。这是因为在一台物理性的机械中,往往运行着多个处事器(轨范)。由IP表达的每台机械也包含了"端口"(Port)。我们设置一个客户机或者处事器的时辰,必需选择一个无论客户机仍是处事器都认可毗连的端口。端口并不是机械上一个物理上存在的场所,而是一种软件抽象(主若是为了表述的便利)。客户轨范知道若何经由过程机械的IP地址同它毗连,但若何才能同自己真正需要的那种处事毗连呢(一般每个端口都运行着一种处事,一台机械可能供给了多种处事,好比 HTTP和FTP等等)?端口编号在这里饰演了主要的脚色,它是必需的一种二级定址法子。
4 o4 }9 l% _6 V1 \  在HTTP和谈中的默认处事端口是80,当然在小型社区中也可以使用其它的端口。本例中使用了默认处事端口。
/ {7 o" `" K% \- P  Socket s=server.accept();5 q( w6 Q# H6 g6 F
  这一句的浸染是使处事器监听本机上的80端口,期待客户机的毗连。在没有新的毗连的情形下,处事器梗阻自身。当客户机毗连各处事器后函数返回一个套接字。然后,经由过程套接字的输入,输出流即可用篡夺本机文件的体例与客户机进行通信。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-4-29 20:01 , Processed in 0.197639 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表