仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1299|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA网页设计Java收集服务器编程

[复制链接]
老尸 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:42:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
其实你不用Struts,spring这些工具,直接用jsp,servlet能够很方便地写出来,而且,可以根据个人的水平、爱好,有很多方案。而struts,spring这些工具的出来。编程|服务器|收集Java的SocketAPI供应了一个很便利的对象接口举行收集编程。本文用一个复杂的TCPEchoServer做例子,演示了怎样利用Java完成一个收集服务器。



用作例子的TCPEchoServer是按以下体例事情的:

当一个客户端经由过程TCP毗连到服务器后,客户端能够经由过程这个毗连发送数据到服务端,而服务端吸收到数据后会把这些数据用统一个TCP毗连发送回客户端。服务端会一向坚持这个毗连直到客户端封闭它为止。



由于服务器必要能同时处置多个客户端,我们先选用一个罕见的多线程服务模子:

让一个Thread卖力监听服务端口,当有新的毗连创建的时分,这个监听的Thread会为这个毗连创立一个新的Thread来处置它。如许,服务器能够承受多个毗连,并让多个Thread来分离处置它们。



以下是响应的服务端程序:

publicclassEchoServerimplementsRunnable{



publicvoidrun(){

try{

ServerSocketsvr=newServerSocket(7);

while(true){

Socketsock=svr.accept();

newThread(newEchoSession(sock)).start();

}

}catch(IOExceptionex){

thrownewExceptionAdapter(ex);

}

}

}




这段代码先创立了一个ServerSocket的对象并让其监听在TCP端口7上,然后在一个轮回顶用accept()办法吸收新的毗连,并创立处置这连续接的Thread。实践处置每一个客户端毗连的逻辑包括在EchoSession这个类内里。



在以上代码中利用了ExceptionAdapter这个类,它的感化是把一个checkedException包装成RuntimeException。具体的申明能够参考制止在Java中利用CheckedException一文。



以下是EchoSession的代码:

publicclassEchoSessionimplementsRunnable{



publicEchoSession(Sockets){

_sock=s;

}



publicvoidrun(){

try{

try{

InputStreaminput=_sock.getInputStream();

OutputStreamoutput=_sock.getOutputStream();

byte[]buf=newbyte[128];

while(true){

intcount=input.read(buf);

if(count==-1)

break;

output.write(buf,0,count);

}

}finally{

_sock.close();

}

}catch(IOExceptionex){

thrownewExceptionAdapter(ex);

}

}



protectedSocket_sock=null;

}




EchoSession承受一个Socket对象作为机关参数,在其run()办法中,它一直的从这个Socket对象的InputStream内里读数据并写回到该Socket的OutputStream中往,直到这个毗连被客户端封闭为止(InputStream的read办法前往-1)。



EchoSession必要一个线程来实行,这简单让人遐想到用Thread来作为EchoSession的父类。不外,如许做不敷天真,开支也对照年夜。而选择让EchoSession完成Runnable接口就天真很多。在接上去的利用ThreadPool的EchoServer中能够看到这一点。



以上已是一个完全的TCPEchoServer,不外跟着客户一直的毗连和断开,这个服务器会一直的发生和打消线程,而这两个都是对照‘高贵’的操纵。为了不这类损耗,能够思索接纳ThreadPool的机制。



利用在一个复杂的Thread缓冲池的完成一文中ThreadPool的完成,能够对EchoServer作以下修正(EchoSession无需做修正):

publicclassEchoServerimplementsRunnable{



publicvoidrun(){

try{

ServerSocketsvr=newServerSocket(7);



//初始化ThreadPool

SyncQueuequeue=newSyncQueue(10);

for(inti=0;i<10;i++){

newThread(newWorker(queue)).start();

}



while(true){

Socketsock=svr.accept();

//把义务放进ThreadPool

queue.put(newEchoSession(sock));

}

}catch(IOExceptionex){

thrownewExceptionAdapter(ex);

}

}

}




这里能够看出让EchoSession完成Runnable接口的天真性,无需修正它就能够在ThreadPool里利用。



在这个例子里利用的ThreadPool对照复杂,没有静态调剂Thread数目的功效,以是这个EchoServer最多只能同时服务10个客户端。但是经由过程重载SyncQueue,我们能够很便利地到场这个功效以冲破这个限定。



在对收集服务器的功能和并发度请求很高的时分,让每一个客户端由一个专门的Thread来处置有大概不克不及满意我们的请求(设想一下同时无数千个客户真个情形)。这时候能够思索利用Java的NIOAPI来构建服务器架构,由于NIO中IO操纵都长短堵塞的,我们只必要很少的Thread就能够充实天时用CPU来处置多个客户真个哀求。关于NIO的话题,在这篇文章就不再赘述,但愿今后能无机会会商。:)



其实产生见解的过程就是训练自己发现问题,分析问题的能力。根据以上的认识我想谈下传统的学习与通过视频独立学习的优缺点:
深爱那片海 该用户已被删除
沙发
发表于 2015-1-21 13:02:57 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
老尸 该用户已被删除
板凳
 楼主| 发表于 2015-1-30 18:52:07 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
愤怒的大鸟 该用户已被删除
地板
发表于 2015-2-1 10:36:25 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
爱飞 该用户已被删除
5#
发表于 2015-2-7 03:54:46 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
简单生活 该用户已被删除
6#
发表于 2015-2-20 08:44:37 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
活着的死人 该用户已被删除
7#
发表于 2015-2-28 13:39:59 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
精灵巫婆 该用户已被删除
8#
发表于 2015-3-1 06:02:44 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
小女巫 该用户已被删除
9#
发表于 2015-3-4 20:49:32 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
灵魂腐蚀 该用户已被删除
10#
发表于 2015-3-11 21:00:00 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
冷月葬花魂 该用户已被删除
11#
发表于 2015-3-19 13:17:01 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
因胸联盟 该用户已被删除
12#
发表于 2015-3-28 22:49:10 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
飘飘悠悠 该用户已被删除
13#
发表于 2015-4-7 19:23:51 | 只看该作者
是一种使用者不需花费很多时间学习的语言
不帅 该用户已被删除
14#
发表于 2015-4-9 02:14:39 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
15#
发表于 2015-4-14 10:05:05 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
分手快乐 该用户已被删除
16#
发表于 2015-4-14 21:17:22 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
再见西城 该用户已被删除
17#
发表于 2015-4-19 14:30:52 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
飘灵儿 该用户已被删除
18#
发表于 2015-4-20 05:06:49 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
小魔女 该用户已被删除
19#
发表于 2015-5-1 02:12:27 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
莫相离 该用户已被删除
20#
发表于 2015-5-5 13:11:23 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 02:49

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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