java程序员rpc代码,java中rpc
java protobuf 定义rpc服务怎么调用
1.,选择其中的win版本下载,我选择的是protoc-2.4.1-win32.zip
创新互联公司主打移动网站、网站制作、做网站、网站改版、网络推广、网站维护、域名申请、等互联网信息服务,为各行业提供服务。在技术实力的保障下,我们为客户承诺稳定,放心的服务,根据网站的内容与功能再决定采用什么样的设计。最后,要实现符合网站需求的内容、功能与设计,我们还会规划稳定安全的技术方案做保障。
2.下载一个protobuf-java-2.4.1.jar文件(注意,要与你刚才下的proto.exe版本相同)
然后就开始开发了。
步骤:
1.用记事本编写一个.proto文件:
}如:编写的是test.proto
package protobuf;
option java_package = "com.sq.protobuf";
option java_outer_classname = "FirstProtobuf";
message testBuf {
required int32 ID = 1;
required string Url = 2;
}
将其放在与刚解压的protoc.exe同级目录中。
2.在cmd中,到protoc-2.4.1-win32文件夹下,
执行
E:\protoc-2.4.1-win32 protoc.exe --java_out=./ test.proto
则可以找到的一个生成的FirstProtobuf.java文件。
3.在MyEclipse中新建一个java project,建立包com.sq.protobuf,然后将刚才生成的FirstProtobuf.java文件放在其下面。
此时会报错,因为没有引入jar包,在package视图下,将protobuf-java-2.4.1.jar引入,即可解决问题。
谁能用通俗的语言解释一下什么是RPC框架
早期单机时代,一台电脑上运行多个进程,大家各干各的,老死不相往来。假如A进程需要一个画图的功能,B进程也需要一个画图的功能,程序员就必须为两个进程都写一个画图的功能。这不是整人么?于是就出现了IPC(Inter-process communication,单机中运行的进程之间的相互通信)。OK,现在A既然有了画图的功能,B就调用A进程上的画图功能好了,程序员终于可以偷下懒了。
到了网络时代,大家的电脑都连起来了。以前程序只能调用自己电脑上的进程,能不能调用其他机器上的进程呢?于是就程序员就把IPC扩展到网络上,这就是RPC(远程过程调用)了。现在不仅单机上的进程可以相互通信,多机器中的进程也可以相互通信了。
要知道实现RPC很麻烦呀,什么多线程、什么Socket、什么I/O,都是让咱们普通程序员很头疼的事情。于是就有牛人开发出RPC框架(比如,CORBA、RMI、Web Services、RESTful Web Services等等)。
OK,现在可以定义RPC框架的概念了。简单点讲,RPC框架就是可以让程序员来调用远程进程上的代码一套工具。有了RPC框架,咱程序员就轻松很多了,终于可以逃离多线程、Socket、I/O的苦海了。
至于最近Java中流行的Netty,没玩过。但是大致了解过,Netty、Mina是游戏行业做服务器开发的Java程序员用的比较多的PRC框架(我们学生主要是Java方向的,有不少人毕业后从事游戏开发)。据说互联网公司用的也比较多。这两行业都有高并发量的、长连接、分布式、异步通讯、大数据量等特点。Netty这种RPC框架封装和优化了Java NIO和异步网络编程的一些繁琐的细节,一方面可以让开发者专注于业务逻辑的实现,一方面只需要调用Netty封装的API就可以很快编写出高性能的服务器。
如何实现一个简单的RPC框
0,服务接口定义---Echo.java
/*
* 定义了服务器提供的服务类型 */public interface Echo { public String echo(String string);
}
一,客户端代码分析--实现类:MainClient.java
客户端实现包括:获得一个代理对象,并使用该代理对象调用服务器的服务。获取代理对象时,需要指定被代理的类(相当于服务器端提供的服务名),Server IP,Port,这样客户端就能找到服务端的服务了。
延伸:分布式环境下,Client如何打到Server的服务?---因为,在服务器中运行的某些服务不像标准服务有着固定的端口,如HTTP的80端口。
一种解决方法是:在运行服务的每台机器上都运行一个特殊的守护进程,该守护进程负责跟踪位于该机器中每一项服务所使用的端口;此外,守护进程还监听一个特定的已经端口,Client通过这个端口与守护进程联系,请求得到指定服务的端口。
复杂的RPC实现框架中,比如可以把服务注册到ZooKeeper中,Client也从ZooKeeper中查询服务。参考:一个更复杂的RPC框架实现
Echo echo = RPC.getProxy(Echo.class, "127.0.0.1", 20382);
System.out.println(echo.echo("hello,hello"));//使用代理对象调用服务器的服务.并将结果输出
二,服务器端分析--实现类:MainServer.java
服务器实现包括:创建一个服务器对象,将它能提供的服务注册,并启动进程监听客户端的连接
Server server = new RPC.RPCServer(); /*
* server 启动后,需要注册server端能够提供的服务,这样client使用 服务的名字、
* 服务器的IP、以及服务所运行的端口 来调用 server 的服务 */
server.register(Echo.class, RemoteEcho.class);//注册服务的名字
server.register(AnOtherEchoService.class, AnOtherEchoServiceImpl.class);
server.start();//启动server
三,服务器监听Client连接分析----实现类:Listener.java
当server.start()后,它要创建一个Listener对象,这是一个线程类,该线程用来监听Client连接。
public void start() {
System.out.println("启动服务器");
/*
* server 启动时,需要Listener监听是否有client的请求连接
* listener 是一个线程,由它来监听连接 */
listener = new Listener(this); this.isRuning = true;
listener.start();//listener 是一个线程类,start()后会执行线程的run方法
}
其实,监听连接就是JAVA ServerSocket类和Socket类提供的相关功能而已。
/*
* accept()是一个阻塞方法,server_socket 一直等待client 是否有连接到来 */
Socket client = server_socket.accept();//建立一条TCP连接
四,动态代理对象 生成---RPC.java
客户端只需要编写生成代理对象,用代理对象去调用远程服务的代码即可。但是,底层的功能如:建立连接,序列化(本例中也没有考虑),跨语言调用(未考虑)...是由RPC框架完成的。
当MainClient 语句:RPC.getProxy(Echo.class, "127.0.0.1", 20382);执行时,会由
/*
* @param Class[]{} 该参数声明了动态生成的代理对象实现了的接口,即 clazz 所代表的接口类型 .
* 这表明了生成的代理对象它是一个它所实现了的接口类型的对象
* 从而就可以用它来调用它所实现的接口中定义的方法
*
* @param handler 生成代理实例对象时需要传递一个handler参数
* 这样当该 代理实例对象调用接口中定义的方法时,将会委托给InvocationHandler 接口中声明的invoke方法
* 此时,InvocationHandler 的invoke 方法将会被自动调用 */
T t = (T) Proxy.newProxyInstance(RPC.class.getClassLoader(), new Class[] {clazz}, handler); return t;
返回该代理对象,然后就会委托第三个参数 handler 自动执行 invoke(),invoke将客户端调用的所有相关信息封装到Invocation 对象中(后面分析)。然后执行第16行代码发起连接。
1 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 2 Invocation invo = new Invocation(); 3 invo.setInterfaces(clazz); 4 5 //利用反射机制将java.lang.reflect.Method 所代表的方法名,参数 封装到 Invocation invo对象中 6 invo.setMethod(new org.jy.rpc.protocal.Method(method.getName(),method.getParameterTypes())); 7 invo.setParams(args); 8 9 /*10 * 当把需要调用的远程server端的方法名和参数封装到invo之后,Client 对象 就可以把 invo 作为参数 传递给服务器了.11 * 为什么需要这样做呢?InvocationHandler 的invoke方法是自动执行的,在该方法里面,它根据生成的代理对象 proxy (第一个参数)12 * 所实现的接口(由 Proxy.newProxyInstance()的第二个参数指定) 就可以知道这个接口中定义了哪些方法13 * InvocationHandler 的 invoke 方法的第二个参数Method method 就可以解析出接口中的方法名和参数了14 * 把它们封装进Invocation invo对象中,再将 invo 作为 client.invoke(invo)的参数 发送到服务器方15 */16 client.invoke(invo);//invoke 先调用init发起一个Socket连接,再将invo 发送至输出流中17 return invo.getResult();18 }
五,“客户端存根”--Client.java
最重要的是它的 invoke方法(注意与InvocationHandler的invoke()区分)。它负责建立连接,打开输入、输出流,向服务器发送字节数据。
1 public void invoke(Invocation invo) throws UnknownHostException, IOException, ClassNotFoundException {2 init();3 System.out.println("写入数据");4 oos.writeObject(invo);//将Client 需要调用的Server的 接口、方法、参数 封装起来 发给服务器5 oos.flush();6 ois = new ObjectInputStream(socket.getInputStream());//用来接收从 server 返回 回来的执行结果 的输入流7 Invocation result = (Invocation) ois.readObject();8 invo.setResult(result.getResult());//将结果 保存到 Invocation result对象中9 }
六,“服务器存根“---实现类:RPCServer.java
上面提到,服务器通过Listener监听客户端连接,当建立客户端连接后,Socket client = server_socket.accept(); 不再阻塞,服务器调用它的call()方法完成客户端请求的功能。也即,客户端请求的结果实际上是在服务器执行生成的。返回的结果是在Client.java 的 invoke() 方法里被读取出来 。call()再一次用到了JAVA反射(第11行) 参考:JAVA动态代理
1 public void call(Invocation invo) { 2 System.out.println(invo.getClass().getName()); 3 Object obj = serviceEngine.get(invo.getInterfaces().getName()); 4 if(obj!=null) { 5 try { 6 Method m = obj.getClass().getMethod(invo.getMethod().getMethodName(), invo.getMethod().getParams()); 7 /* 8 * 利用JAVA反射机制来执行java.lang.reflect.Method 所代表的方法 9 * @param result : 执行实际方法后 得到的 服务的执行结果10 */11 Object result = m.invoke(obj, invo.getParams());12 invo.setResult(result);//将服务的执行结果封装到invo对象中。在后面的代码中,将该对象写入到输出流中13 } catch (Throwable th) {14 th.printStackTrace();15 }16 } else {17 throw new IllegalArgumentException("has no these class");18 }19 }
七,”RPC 编码、解码,协议的定义“---Invocation.java Method.java
其实,这里并不是那种实用的开源RPC框架如Thrift中所指的编码、IDL……上面两个类只是RPC实现过程中辅助完成Java动态代理的实现,说白了就是封装客户端需要调用的方法,然后指定生成的代理对象需要实现的接口(服务).
八,总结:
先运行MainServer.java启动服务器,然后,再运行MainClient.java 启动一个客户端连接服务器就可以看到执行结果。
当需要添加新的服务时:按以下步骤即可:①定义服务接口及其实现类,如:AnOtherEchoService.java ②:在MainServer.java中注册新添加的服务。
③:在MainClient.java中编写获得新服务的代理对象的代码,并用该代理对象调用新服务接口中声明的方法。
这样,在客户端就能够远程地调用服务器上的一个新服务了。
作为一个JAVA程序员, 应该掌握哪些知识, 目前, 比较流行的java开发框架有哪些,
java基础,三大主流数据库mysql,orcale,sql server;然后是j2ee的相关知识,也就是java开发框架。
Spring Framework 【Java 开源JEE框架】
Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。
Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的
Inversion of
Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。
Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了
Hibernate和其他O/R mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者
JDBC事务提供一个一致的编程模型。Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务
--如果你需要--还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。
Spring还提供了可以和IoC容器集成的强大而灵活的MVC Web框架。【SpringIDE:Eclipse平台下一个辅助开发插件】.
WebWork 【Java开源Web开发框架】
WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE
Web框架。WebWork目前最新版本是2.1,现在的WebWork2.x前身是Rickard
Oberg开发的WebWork,但现在WebWork已经被拆分成了Xwork1和WebWork2两个项目。
Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,并且完全从web层脱离出来。
Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the
Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。
WebWork2建立在Xwork之上,处理HTTP的响应和请求。WebWork2使用ServletDispatcher将HTTP请求的变成
Action(业务层Action类),
session(会话)application(应用程序)范围的映射,request请求参数映射。WebWork2支持多视图表示,视图部分可以使用
JSP, Velocity, FreeMarker,
JasperReports,XML等。在WebWork2.2中添加了对AJAX的支持,这支持是构建在DWR与Dojo这两个框架的基础之上.
【EclipseWork:用于WebWork辅助开发的一个Eclipse插件】
Struts 【Java开源Web开发框架】
Struts是一个基于Sun
J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message
resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。【StrutsIDE:用于Struts辅助开发的一个Eclipse插件】
Hibernate 【Java开源持久层框架】
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Eclipse平台下的Hibernate辅助开发工具:【Hibernate
Synchronizer】【MiddlegenIDE】
Quartz 【Java开源调度框架】
Quartz是OpenSymphony开源组织在Job
scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或
EJBs。Quartz的最新版本为Quartz 1.5.0。
Velocity 【Java开源模板引擎】
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template
language)来引用由java代码定义的对象。当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。
Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为Turbine
web开发架构提供模板服务(template
service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。【VeloEclipse
:Velocity在Eclipse平台下的一个辅助开发插件】
IBATIS 【Java开源持久层框架】
使用ibatis 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象, 这一层与通过Hibernate 实现ORM
而言基本一致,而对于具体的数据操作,Hibernate 会自动生成SQL 语句,而ibatis 则要求开发者编写具体的SQL
语句。相对Hibernate等 “全自动”ORM机制而言,ibatis
以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。作为“全自动”ORM 实现的一种有益补充,ibatis 的出现显
得别具意义。
Compiere ERPCRM 【Java开源ERP与CRM系统】
Compiere
ERPCRM为全球范围内的中小型企业提供综合型解决方案,覆盖从客户管理、供应链到财务管理的全部领域,支持多组织、多币种、多会计模式、多成本计算、多语种、多税制等国际化特性。易于安装、易于实施、易于使用。只需要短短几个小时,您就可以使用申购-采购-发票-付款、报价-订单-发票-收款、产品与定价、资产管理、客户关系、供应商关系、员工关系、经营业绩分析等强大功能了。
Roller Weblogger 【Java开源Blog博客】
这个weblogging
设计得比较精巧,源代码是很好的学习资料。它支持weblogging应有的特性如:评论功能,所见即所得HTML编辑,TrackBack,提供页面模板,RSS
syndication,blogroll管理和提供一个XML-RPC 接口。
Eclipse 【Java开源IDE】
Eclipse平台是IBM向开发源码社区捐赠的开发框架,它之所以出名并不是因为IBM宣称投入开发的资金总数
—4千万美元,而是因为如此巨大的投入所带来的成果:一个成熟的、精心设计的以及可扩展的体系结构。
XPlanner 【Java开源项目管理】
XPlanner 一个基于Web的XP团队计划和跟踪工具。XP独特的开发概念如iteration、user
stories等,XPlanner都提供了相对应的的管理工具,XPlanner支持XP开发流程,并解决利用XP思想来开发项目所碰到的问题。
XPlanner特点包括:简单的模型规划,虚拟笔记卡(Virtual note cards),iterations、user
stories与工作记录的追踪,未完成stories将自动迭代,工作时间追踪,生成团队效率,个人工时报表,SOAP界面支持。
HSQLDB 【Java开源开源数据库】
HSQLDB(Hypersonic SQL)是纯Java开发的关系型数据库,并提供JDBC驱动存取数据。支持ANSI-92 标准
SQL语法。而且他占的空间很小。大约只有160K,拥有快速的数据库引擎。
Liferay 【Java开源门户系统】
代表了完整的J2EE应用,使用了Web、EJB以及JMS等技术,特别是其前台界面部分使用Struts
框架技术,基于XML的portlet配置文件可以自由地动态扩展,使用了Web Services来支持一些远程信息的获取,使用 Apahce
Lucene实现全文检索功能。
主要特点:
提供单一登陆接口,多认证模式(LDAP或 SQL);
管理员能通过用户界面轻松管理用户,组,角色;
用户能可以根据需要定制个性化的portal layout;
能够在主流的J2EE应用服务器上运行,如JBoss+Jetty/Tomcat,JOnAS;
支 持主流的数据库,如PostgreSQL,MySQL;
使用了第三放的开源项目,如Hibernate, Lucene, Struts;
支持包括中文在内的多种语言;
采用最先进的技术 Java, EJB, JMS, SOAP, XML;
JetSpeed 【Java开源门户系统】
Jetspeed是一个开放源代码的企业信息门户(EIP)的实现, 使用的技术是Java和XML. 用户可以使用浏览器,
支持WAP协议的手机或者其它的设备访问Jetspeed架设的信息门户获取信息. Jetspeed扮演着信息集中器的角色,
它能够把信息集中起来并且很容易地提供给用户.
Jetspeed具有如下的特征:
即将成为标准化的Java Portlet API
基于模板的布局, 包括JSP和Velocity
通过开放的内容同步技术支持远程XML 内容交换
定制默认的主页
使用数据库进行用户认证
内存缓存技术, 加快页面的响应
通 过Rich Site Summary技术, 支持同步内容
和Cocoon, WebMacro, Velocity集成.
Wireless Markup Language (WML) 支持
使用XML格式的配置文件注册portlet.
完整的 Web Application Archive (WAR) 支持
Web应用程序开发的基础设施
可以在本地缓 存远程内容
与Avantgo同步
可移植到所有支持JDK1.2和Servlet 2.2的平台
与 Turbine模块和服务集成
可以根据用户, 安装媒体类型和语言的不同设定, 产生不同的个性化服务
持续化服 务使得所由的portlet能够容易的存储每个用户的状态, 页面和portlet
使用皮肤技术使得用户可以选择portlet的颜 色和显示属性
自定义功能是的管理员可以选择portlet以及定义个人页面的布局
在数据库中存储PSML
通 过Jetspeed的安全portlets管理用户, 组,角色和权限
基于角色对访问portlet进行控制
JOnAS 【Java开源应用服务器】
JOnAS是一个开放源代码的J2EE实现,在ObjectWeb协会中开发。整合了Tomcat或Jetty成为它的Web容器,以确保符合Servlet
2.3和JSP 1.2规范。JOnAS服务器依赖或实现以下的Java API:JCA、JDBC、JTA
、JMS、JMX、JNDI、JAAS、JavaMail 。
JFox3.0 【Java开源应用服务器】
JFox 是 Open Source Java EE Application Server,致力于提供轻量级的Java
EE应用服务器,从3.0开始,JFox提供了一个支持模块化的MVC框架,以简化EJB以及Web应用的开发!
如果您正在寻找一个简单、轻量、高效、完善的Java EE开发平台,那么JFox正是您需要的。
JFox 3.0 拥有以下特性:
重 新设计的 IoC 微内核,融入 OSGi 模块化思想
设计成嵌入式架构,能够和任何 Java Web Server集成部署
支 持 EJB3,JPA规范,支持容器内和容器外两种方式运行EJB和JPA组件
支持 EJB 发布成Web Service
采 用 JOTM()提供事务处理,支持两阶段提交 (2PC)
采用 XAPool() 提供 XA
DataSource,支持智能连接池管理
内置 MVC 框架,实现自动Form
Mapping,Validator,Uploading等功能,支持JSP/Velocity/Freemarker页面引擎,并支持直接在
Action中注入EJB
支持多应用模块部署,让中大型应用充分享受模块化开发带来的优势
提供 Manager 管理模块,可以查看和管理各种运行时参数
提供根据 JFox 特色重写的 Petstore 应用模块
EasyJWeb 【Java开源Web开发框架】
EasyJWeb是基于java技术,应用于WEB应用程序快速开发的MVC框架,框架设计构思来源于国内众多项目实践,框架充分借签了当前主要流行的开源Web框架(Struts、JSF、Tapestry
、Webwork),吸取了其优点及精华,利用Velocity作为模板页面引擎,是一个实现了页面及代码完全分离的MVC开发框架。是一个能实现中小型
Web应用系统快速开发的简易Web框架。
通过EasyJWeb
Tools提供的配套开发工具,可以实现基于EasyJWeb框架的Web应用快速开发,包括常用应用软件的代码自生成、数据库添删改查(CRUD)代码生成、自动页面模版生成、配置文件管理等。
框架特点:
零配文件置支持。以前我们每接触一个框架,开始总都要被
他的配置文件折腾一番。EasyJWeb实现零配置支持,可以不写一句配置文件就在框架基础上构建你的运用。(适合小型网站系统)。
简 易的模板页面设计支持:放弃使用jsp,使用简单Velocity脚本语言作为页面模板。
页面程序完全分离:实现显示页面与程序逻辑 的完全分离,克服了传统jsp页面难于维护的问题。
基于页面组件的框架。灵活的页面组件配置,可以直接通过配置文件设置字段级的事件 组件。
快速开发支持:通过EasyJWeb
Tools,可以自动生成应用软件模板代码,定制并管理自己的J2EE代码模板,代码生成模板支持最流行的实用Java开发框架(如hibernate、
Spring等)实现快速开发。
Tapestry 【Java开源Web开发框架】
Tapestry是一个开源的基于servlet的应用程序框架,它使用组件对象模型来创建动态的,交互的web应用。一个组件就是任意一个带有
jwcid属性的html标记。其中jwc的意思是Java Web
Component。Tapestry使得java代码与html完全分离,利用这个框架开发大型应用变得轻而易举。并且开发的应用很容易维护和升级。
Tapestry支持本地化,其错误报告也很详细。Tapestry主要利用javabean和xml技术进行开发。【Spindle:Tapestry
辅助开发Eclipse插件】.
FreeMarker 【Java开源模板引擎】
FreeMarker允许Java
servlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。模板用servlet提供的数据动态地生成
HTML。模板语言是强大的直观的,编译器速度快,输出接近静态HTML页面的速度。
【FreeMarker Eclipse Plugin与FreeMarker IDE:Eclipse平台下的辅助开发工具】
Lucene 【Java开源搜索引擎】
Apache
Lucene是一个基于Java全文搜索引擎,利用它可以轻易地为Java软件加入全文搜寻功能。Lucene的最主要工作是替文件的每一个字作索引,索引让搜寻的效率比传统的逐字比较大大提高,Lucen提供一组解读,过滤,分析文件,编排和使用索引的API,它的强大之处除了高效和简单外,是最重要的是使使用者可以随时应自已需要自订其功能。
iText 【Java开源PDF类库】
iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与java
Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。
Groovy 【Java开源动态语言】
Groovy是一种基于JVM的敏捷开发语言,它结合了Python、Ruby和 Smalltalk的许多强大的特性。
Groovy已在WebWork2中的应用。它可以被编译为标准的Java Bytecode。
OpenCms 【Java开源CMS系统】
OpenCms是一个J2EE的产品,它是用 Java写成的。它和Tomcat捆绑在一起。但是也能够使用ATG
Dynamo、WebLogic和WebSphere。OpenCms支持多种RDBMS来保存内容,包括Oracle、SQL
Server、Sybase和mySQL。新版本提供了一个新的模板引擎,JSP支持,一种新的连接管理系统,提高了稳定性。
JUnit 【Java开源测试工具】
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing
framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。
BlueJ 【Java开源IDE】
BlueJ是一个专门为入门级教学设计的JavaTM 开发环境。它是由澳大利亚墨尔本Monash大学BlueJ小组设计并开发的。
XWiki 【Java开源Wiki系统】
XWiki是一个强大的Java开源的Wiki引擎。它支持一些受欢迎的特性如:
内 容管理(浏览/编辑/预览/保存),
支持附件,
版本控制,
全文本搜索,
权 限管理
使用Hibernate进行数据存储,
RSS输出与显示外部的RSS feeds,
多 语言支持,
提供XML/RPC的API,
WYSIWYG HTML编辑器,
导出为PDF
Groovy 脚本支持等等....。
EJBCA 【Java开源网络服务器端组件】
EJBCA是一个全功能的CA系统软件,它基于J2EE技术,并提供了一个强大的、高性能并基于组件的CA。EJBCA兼具灵活性和平台独立性,能够独立使用,也能和任何J2EE应用程序集成。
JXTA 【Java开源其它项目】
Sun微系统公司公开了旨在建立P2P(Peer to
Peer)通用技术基础的JXTA计划。JXTA技术是网络编程和计算的平台,用以解决现代分布计算尤其是点对点(P2P)计算中出现的问题。
JXTA将建立核心的网络计算技术,提供支持在任何平台、任何地方以及任何时间实现P2P计算的一整套简单、小巧和灵活的机制。JXTA首先将归纳目前
P2P的功能特别,而后建立核心的技术来表达目前的P2P计算的局限性。其重点是创建基本的机制,而具体的策略选择权则交给应用的开发者。JXTA将充分利用XML、Java等开放技术,使得UNIX操作系统更强大和灵活,比如利用管道(Pipes)传输Shell命令实现复杂的计算任务。JXTA支持
P2P应用的基本功能来建立一个P2P系统,还将努力证实这些可以成为建立更高层功能的基础构造模块。JXTA架构可以分为三个层面:JXTA核心层、
JXTA业务层和JXTA应用层。
DWR 【Java开源AJAX框架】
DWR(Direct Web
Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本
DWR0.6添加许多特性如:支持Dom Trees的自动配置,支持Spring(JavaScript远程调用spring
bean),更好浏览器支持,还支持一个可选的commons-logging日记操作.
ZK 【Java开源AJAX框架】
ZK是一个Ajax Java Web框架,利用少量代码就能够开发出拥有Rich
UI的Web应用。ZK提供基于XUL的标记语言和事件驱动的组件,可以让你像开发桌面应用程序一样简单。支持EL表达式和脚本语言包括:JavaScript、Ruby和Groovy等。支持Annotation及数据绑定。集成Google
Maps、FCKeditor、DOJO以及Timeline。
分享题目:java程序员rpc代码,java中rpc
本文链接:http://ybzwz.com/article/hcsiig.html