??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲无码精品浪潮,亚洲一区欧洲一区,色欲aⅴ亚洲情无码AV蜜桃 http://m.tkk7.com/buaacaptain/archive/2006/06/07/51080.html舚w 舚w Wed, 07 Jun 2006 04:22:00 GMT http://m.tkk7.com/buaacaptain/archive/2006/06/07/51080.html http://m.tkk7.com/buaacaptain/comments/51080.html http://m.tkk7.com/buaacaptain/archive/2006/06/07/51080.html#Feedback 0 http://m.tkk7.com/buaacaptain/comments/commentRss/51080.html http://m.tkk7.com/buaacaptain/services/trackbacks/51080.html
一Q?介绍
本文q不是想介绍Web服务的原理、系l架构等Q我们假设您已经了解了关于Web服务的一些基本的概念、原理等知识。本文主要是针对那些已经了解Web服务概念Q但是还没有亲n体会Web服务所带来令hƢ欣鼓舞的特征的开发h员。在此我们认Z已经具备了Java、XML{基知识Q如果你q有其他开发环境的l验例如VB、VC那是再好不过的了?
1QWeb服务
虽然我们q不惌l讲qWeb服务的体pȝ构,但是大概的介l一下还是有必要的。Web服务是一U新型的Web应用E序。不同于其他Web应用E序Q它是自适应、自我描q、模块化的应用程序,q可以跨Webq行发布、定位以及调用。简单的Web服务可以提供例如天气预报或者航班信息的服务。一旦部|了Web服务Q其他的应用E序可以发现和调用所部v的服务?
2QAXIS目
Axis框架来自 Apache 开放源代码l织Q它是基于JAVA语言的最新的 SOAP 规范QSOAP 1.2Q和 SOAP with Attachments 规范Q来?Apache Group Q的开放源代码实现。有很多行的开发工具都使用AXIS作ؓ其实现支持Web服务的功能,例如JBuilder以及著名的Eclipse J2EE插gLomboz。AXIS的最新版本是1.1Q可以从 http://ws.apache.org/axis/index.html 下蝲。下图是AXIS核心引擎的体pȝ构图Q?
?
整个AXIS目包括以下几个部分Q?/p>
消息子pȝ 消息子pȝ提供了灵zȝ消息传递框Ӟq个消息传递框架包括处理程序、链、序列化E序和反序列化程序。处理程序是一个处理请求、响应和故障的对象。处理程序可被组合在一h为链Q而且可以使用一个灵zȝ部v描述W来配置q些处理E序的顺序?
传输框架子系l? 提供了一个传输框Ӟq个传输框架可以帮助您创q可插式传输发送器和传输侦听器?
数据~码子系l? AXIS完全按照 XML Schema 规范提供各种数据cd的自动序列化Qƈ且提供功能扩展接口来使用您自己定制的序列化器和反序列化器?
其他 AXIS完全支持 WSDL 以及日志记录、出错以及故障处理机制。它同时提供一些工L来讲WSDL文档转换成客L的调用框架以及根据类来生WSDL定义文档?
AXIS目前版本支持的标准是QW3C SOAP 1.1 ?1.2QWSDL 1.1QSAAJ 1.1QSUN公司QSOAP with Attachments API for JavaQ;JAX-RPCQSUN公司QJava API for XML-Based RPCQ?.0?
除了前面介绍的AXIS外,本文中还会用到TOMCATQ这里不再另行介l。另外ؓ了演CWeb服务真正与开发环境无关以及AXIS产生的是标准的、符合规范的Web服务Q我们还用到微软公司的SOAP TOOLKIT以及微Y的开发环境VB和VC来做为Web服务的客L?
? 环境搭徏
׃AXIS本n是基于JAVA语言开发的目Qƈ且是以Web应用形式发布的,因此它运行时需要一个应用服务器作ؓ支撑。ؓ了方便我们这里选用的是Tomcat。由于AXIS本n需要用到处理XML信息的包Q所以我们徏议用JDK1.4q安装Tomcat 4.1.24。下面是环境搭徏步骤Q读取根据自w情况进行安装?
安装JDK1.4.1
安装Tomcat 4.1.24到C:\Tomcatq证安装是否成?
下蝲AXIS目打包文gaxis-1_1.zip解压~后目录中的webapps目录下的axis子目录拷贝到C:\Tomcat\webapps下?
验证AXIS的安装:重新启动Tomcat服务器后打开览器输入网址http://localhost:8080/axis 后应该出现如下图所C页面,点击链接"Validate"来验证Axis所需的几个JAVA包是否齐全?
?
点击链接Validate后,AXIS会自动检查所需的每一个JAVAlgQ这协组件分为:必需lg以及可选组Ӟ必须保证所有必需lg都存在,如下图所C即为验证成功?
?
三. Web Service服务端开?/font>
l过了前两步之后我们可以开始Web服务之旅了!大多Ch在学习一U编E语a的第一步都是从Hello worldE序开始的Q我们也不例外。我们将提供q样一个Web服务Q通过l它传入姓名Q服务返回:你好[姓名]Q欢q来到Web服务的世界。这是我们的需求。我们将马上ҎAXIS的要求完成我们的需求,你就会发现原来Web服务可以q么单!
~写JAVAcHello.javaQ内容如下:
public class Hello{
public String hello(String name){
if(name==null)
name = "";
return "你好"+name+"Q欢q来到Web服务的世界!";
}
}
仅此而已Q无需~译Q将该文件改名ؓHello.jwsq拷贝到AXIS应用目录C:\Tomcat\webapps\axis下?
下面我们可以测试该Web服务了,打开览器ƈ输入刚刚创徏的文件名对应的URL地址 http://localhost:8080/axis/Hello.jws 览器显C如下结果:
点击面上的链接查看该Web服务对应的WSDL信息如下所C(我们在下一节单介lWSDLQ?
<?xml version="1.0" encoding="UTF-8" ?>
-<wsdl:definitions
targetNamespace="http://localhost:8080/axis/Hello.jws"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://www.w3.org/2000/xmlns/"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:impl="http://localhost:8080/axis/Hello.jws"
xmlns:intf="http://localhost:8080/axis/Hello.jws"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
- <wsdl:message name="helloRequest">
<wsdl:part name="name" type="xsd:string" />
</wsdl:message>
+ <wsdl:message name="helloResponse">
- <wsdl:portType name="Hello">
- <wsdl:operation name="hello" parameterOrder="name">
<wsdl:input name="helloRequest" message="intf:helloRequest" />
<wsdl:output name="helloResponse" message="intf:helloResponse" />
</wsdl:operation>
</wsdl:portType>
- <wsdl:binding name="HelloSoapBinding" type="intf:Hello">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
- <wsdl:operation name="hello">
<wsdlsoap:operation soapAction="" />
- <wsdl:input name="helloRequest">
<wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://DefaultNamespace" />
</wsdl:input>- <wsdl:output name="helloResponse">
<wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://localhost:8080/axis/Hello.jws" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
- <wsdl:service name="HelloService">
- <wsdl:port name="Hello" binding="intf:HelloSoapBinding">
<wsdlsoap:address location="http://localhost:8080/axis/Hello.jws" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
到此我们已经完成了hello的Web服务了,那我们怎么告诉用户如何来用该服务呢?我们只需要告诉用h们的Web服务的URL地址Q?http://localhost:8080/axis/Hello.jws?wsdl 可以了Q下一节我们将介绍如何通过q个地址来访问对应的Web服务?
四. Web Service客户端开?/font>
在这一节中我们用三U不同的语言来访问刚刚创建的Web服务Q分别是JAVA、VB、VC。ؓ了用VB和VC讉KWeb服务Q我们需要安装微软公司的Soap Toolkit 开发工具包Q这个工具包可以从微软公司的主页
http://download.microsoft.com/download/xml/soap/2.0/W98NT42KMe/EN-US/SoapToolkit20.exe
下蝲Q下载该软g包ƈ使用默认方式安装卛_?
在开始客L开发之前有两个概念我们必须先粗略的介绍一下?
SOAPQ简单对象访问协议。这是一U在松散的、分布的环境中用XML对等C换结构化的和cd化的信息提供了一个简单且轻量U的机制Q它是一个基于XML的协议。它包括四个部分QSOAP装QenvelopQ,装定义了一个描q消息中的内Ҏ什么,是谁发送的Q谁应当接受q处理它以及如何处理它们的框ӞSOAP~码规则Qencoding rulesQ,用于表示应用E序需要用的数据cd的实? SOAP RPC表示(RPC representation)Q表CE过E调用和应答的协?SOAPl定QbindingQ,使用底层协议交换信息?
虽然q四个部分都作ؓSOAP的一部分Q作Z个整体定义的Q但他们在功能上是相交的、彼此独立的。特别的Q信和~码规则是被定义在不同的XML命名I间(namespace)中,q样使得定义更加单?
SOAP的主要设计目标是明性和可扩展性。这意味着有一些传l消息系l或分布式对象系l中的特性将不包含在SOAP的核心规范中。这些特性包括:分布式垃圾收集;扚w消息传输/处理Q对象引用;对象ȀzR?
WSDLQWeb Service描述语言。用了WSDLQ我们就可以通过q种跨^台和跨语a的方法Web Service代理的生自动化。就像COM和CORBA的IDL文gQWSDL文g由客户和服务器约定。由于WSDL设计成可以绑定除SOAP以外的其他协议,q里我们主要xWSDL在HTTP上和SOAP的关pR同P׃SOAP目前主要用来调用q程的过E和函数QWSDL支持SOAP传输的文档规范?
WSDL文档可以分ؓ两部分。顶部分由抽象定义组成,而底部分则由具体描述l成。抽象部分以独立于^台和语言的方式定义SOAP消息Q它们ƈ不包含Q何随机器或语a而变的元素。这定义了一pd服务Q截然不同的|站都可以实现?
1. JAVA客户?/font>
使用AXIS的工具将使Web服务的访问和我们之前介绍的创Z个Web服务一L单。我们前面安装的AXIS环境中已l包含着q样的工P它是一个JAVAc,cd为:org.apache.axis.wsdl.WSDL2Java。打开命o行窗口,转到AXIS目录下的WEB-INF子目录。确保Tomcat服务已经处于启动状态,键入命o Q?
Java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/Hello.jws?wsdl
该命令执行的l果是在当前所在目录下产生一个子目录 localhost/axis/Hello_jwsQ该目录下有四个JAVA源文Ӟ它们分别是:
Hello.java 定义了Web服务接口Q此例中只有一个helloҎ?
HelloService.java 定义了用于获取Web服务接口的方法?
HelloServiceLocator.java 接口HelloService的具体实现?
HelloSoapBindingStub.java Web服务客户端桩Q通过该类与服务器交互?
q四个JAVAcd我们处理了大部分的逻辑Q我们需要的仅仅是把q些cd到我们的目然后创徏一个我们自qcL调用它们卛_。ؓ此我们新加一个类Main.javaQؓ了方便,让这个类与刚产生的四个类都在同一个包下。内容如下:
//Main.java
package localhost.axis.Hello_jws;
public class Main{
public static void main(String[] args) throws Exception{
HelloService service = new HelloServiceLocator();
Hello hello = service.getHello();
System.out.println("Response:"+hello.hello("|头"));
}
}
使用以下命oq行~译Q?
javac -classpath lib\axis.jar;lib\jaxrpc.jar localhost\axis\Hello_jws\*.java
如果~译没有问题的话执行该测试程序:
java -Djava.ext.dirs=lib -cp . localhost.axis.Hello_jws.Main//q行l果QResponse:你好|头Q欢q来到Web服务的世界!
在WSDL2Java工具自动产生的几个类中,cHelloServiceLocator中保存这一些跟服务器相关的信息Q例如URL地址{,当服务器的地址更改后但是服务ƈ没有改动的时候直接修改该文g中的字符串定义,而无需重新生成q几个类。具体需要修改的内容Q打开该文件便可一目了然?
2. VB客户?/font>
有了微YSOAP toolkitQ用VB调用Web服务也是一件o人愉快的事情?
打开VB开发环境新Z个标准EXE目Q打开工程(Project)菜单q择引用打开lg引用对话框如下图所C:扑ֈq中Microsoft Soap Type Library?
?4
新徏q编辑窗体如下图所C:
?5
~辑按钮Call的点M件处理程序如下:Q注意窗体的控g名称要与E序中的名称对应Q?/p>
Private Sub callBtn_Click()
'q种做法需要在工程中引用Soap Type Library
'Dim soap As MSSOAPLib.SoapClient
'Set soap = New MSSOAPLib.SoapClient
Dim soap
Set soap = CreateObject("MSSOAP.SoapClient")
On Error Resume Next
'soap.mssoapinit urlText.Text
Call soap.mssoapinit(urlText.Text)
If Err <> 0 Then
MsgBox "初始化SOAPp|Q?" + Err.Description
urlText.SetFocus
Else
If Len(Trim(nameText.Text)) = 0 Then
MsgBox "误入您的姓名!"
nameText.SetFocus
Else
responseText.Text = soap.hello(nameText.Text)
End If
End If
End Sub
保存目q运行,输入姓名q点L钮Call?
3. VC客户?/font>
打开VC开发环境,新徏目HelloClientQ项目类型ؓ Win32 Console Application的空目。新建C++ Source File文g名ؓQHelloSoap.cppQ编辑文件内容如下:
//#include "stdafx.h"
#include <stdio.h>
#import "msxml3.dll"
using namespace MSXML2;
//Ҏ自己机器的情况修改下面语句中指定的\?
#import "C:\Program Files\Common Files\MSSoap\Binaries\mssoap1.dll" \
exclude("IStream", "ISequentialStream", "_LARGE_INTEGER", \
"_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")
using namespace MSSOAPLib;
void Hello(){
ISoapSerializerPtr Serializer;
ISoapReaderPtr Reader;
ISoapConnectorPtr Connector;
// Connect to the service
Connector.CreateInstance(__uuidof(HttpConnector));
Connector->Property["EndPointURL"] = "http://localhost:8080/axis/Hello.jws?wsdl";
Connector->Connect();
// Begin message
Connector->BeginMessage();
// Create the SoapSerializer
Serializer.CreateInstance(__uuidof(SoapSerializer));
// Connect the serializer to the input stream of the connector
Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));
// Build the SOAP Message
Serializer->startEnvelope("","","");
Serializer->startBody("");
Serializer->startElement("hello","","","");
Serializer->startElement("name","","","");
Serializer->writeString("|头");
Serializer->endElement();
Serializer->endElement();
Serializer->endBody();
Serializer->endEnvelope();
// Send the message to the web service
Connector->EndMessage();
// Let us read the response
Reader.CreateInstance(__uuidof(SoapReader));
// Connect the reader to the output stream of the connector
Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");
// Display the result
printf("Response: %s\n", (const char*)Reader->RPCResult->text);
}
int main()
{
CoInitialize(NULL);
Hello();
CoUninitialize();
return 0;
}
~译q运行该目?/p>
本节只是Z演示如果通过VC来访问用AXIS创徏的Web服务Q至于Soap toolkit的具体用请参照soap toolkit的帮助手册,其他语言的访问请查阅相关的文档?
? AXIS集成
Z让我们的WEB应用E序支持Web服务功能Q我们需要将AXIS集成到我们的应用E序中。集成AXIS很简单,首先需要拷贝AXIS用到的几个JAR包文Ӟq些文g都在[AXIS]\WEB-INF\lib目录下,这些文件拷贝到我们自己的应用目录下的WEB-INF\lib。另外如果你用的不是TOMCAT服务器那需要拷贝activation.jarQ这个JAR文g可以在[TOMCAT]\common\lib目录下找刎ͼ
拯完JAR文g后就是web.xml的配|了Q只需要把AXIS中的web.xml中的配置信息d到我们自己应用程序中的web.xml中即可。最重要的是下面的内容:
<servlet>
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache-Axis Servlet</display-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<mime-mapping>
<extension>wsdl</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xsd</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
?ȝ
到此文章告一D落Q通过以上的演l,我相信你已经对Web服务有一个感性的认识Q但是这个仅仅是开始,我们也只是很单的介绍了Web服务的一些基本概念ƈ演示了一个无法再单的例子。Web服务q有很多其他高的内容例如复杂类型、数据安全等没有涉及刎ͼ不过没有关系Q万事开头难Q希望本文能够促q大家理解和应用下一代的应用模式q给q没有动手试验的开发h员开一个好头?
]]>转:Subversion快速入门教E?/title> http://m.tkk7.com/buaacaptain/archive/2006/05/29/48751.html舚w 舚w Mon, 29 May 2006 06:58:00 GMT http://m.tkk7.com/buaacaptain/archive/2006/05/29/48751.html http://m.tkk7.com/buaacaptain/comments/48751.html http://m.tkk7.com/buaacaptain/archive/2006/05/29/48751.html#Feedback 0 http://m.tkk7.com/buaacaptain/comments/commentRss/48751.html http://m.tkk7.com/buaacaptain/services/trackbacks/48751.html http://www.subversion.org.cn/content/view/18/1/ 如何快速徏立Subversion服务器,q且在项目中使用hQ这是大家最兛_的问题,与CVS相比QSubversion有更多的选择Q也更加的容易,几个命o可以徏立一套服务器环境Q可以用v来,q里配套?a target="_self">动画教程?br /> 本文是用Subversion最快速的教程Q在最短的旉里帮助您建立起一套可用的服务器环境,只需略加调整可以应用到实际目当中?br /> 本教E分Z下几个部门,不仅仅是快速入门,最后我们还有一些高U功能的说明Qؓ了说明简单,教程是在windows下用的方式Q以方便资源有限的项目用,对于UNIX环境下,区别q不大?br />软g下蝲
服务器和客户端安?br /> 建立版本库(RepositoryQ?
配置用户和权?br /> q行独立服务?
初始化导?
基本客户端操? 1QY件下?br /> ?a target="_self">官方|站 的下载二q制安装文gQ来?a target="_self">二进制包下蝲部分 Q找?Windows NT, 2000, XP and 2003部分Q然后选择"this directory "Q这h们可以看到许多下载的内容Q目前可以下?a onclick="return launch(this.href, 1)" > svn-1.2.3-setup.exe?br />下蝲Subversion的Windows客户端TortoiseSVN? TortoiseSVN是扩展Windows Shell的一套工P可以看作Windows资源理器的插gQ安装之后Windows可以识别Subversion的工作目录?br />官方|站?a >TortoiseSVNQ下载方式和前面的svn服务器类|?a >Download面的我们选择Official version for Win2k/XP or higher的版本,然后在sourceforge?a target="_self">下蝲面选择目前的最高稳定版本的安装文gTortoiseSVN-1.2.4.4479-svn-1.2.3.msi ?br />2Q服务器和客L安装 服务器安装,直接q行svn-1.2.3-setup.exe Q根据提C安装即可,q样我们有了一套服务器可以q行的环境?
安装TortoiseSVNQ同L接运?a >TortoiseSVN-1.2.4.4479-svn-1.2.3.msi按照提示安装卛_Q不q最后完成后会提C是否重启,其实重启只是使svn工作拯在windows中的Ҏ样式生效Q与所有的实际功能无关Q这里ؓ了立ȝ到好的效果,q是重新启动机器? 3Q徏立版本库QRepositoryQ?br /> q行Subversion服务器需要首先要建立一个版本库QRepositoryQ,可以看作服务器上存放数据的数据库Q在安装了Subversion服务器之后,可以直接q行Q如Q?strong>svnadmin create E:\svndemo\repository ׃在目录E:\svndemo\repository下创Z个版本库?br /> 我们也可以用TortoiseSVN囑Ş化的完成q一步: 在目录E:\svndemo\repository?右键->TortoiseSVN->Create Repository here...“, 然后可以选择版本库模式, q里使用默认卛_Q?然后创Z一pd目录和文件?br /> 4Q配|用户和权限 来到E:\svndemo\repository\conf目录Q修改svnserve.confQ?br /># [general] # password-db = passwd 改ؓQ?br />[general] password-db = passwd 然后修改同目录的passwd文gQ去掉下面三行的注释Q?br /># [users] # harry = harryssecret # sally = sallyssecret 最后变成:[users] harry = harryssecret sally = sallyssecret 5Q运行独立服务器 在Q意目录下q行Q?br />svnserve -d -r E:\svndemo\repository 我们的服务器E序已l启动了?br />6Q初始化导入 来到我们惌导入的项目根目录Q在q个例子里是E:\svndemo\initprojectQ目录下有一个readme.txt文gQ?br />右键->TortoiseSVN->Import...
URL of repository输入“svn://localhost/trunk?
ok 完成之后目录没有M变化Q如果没有报错,数据已l全部导入到了我们刚才定义的版本库中?br />7Q基本客L操作 取出版本库到一个工作拷贝:来到LI目录下Q在本例中是E:\svndemo\wc1Q运行右?>CheckoutQ在URL of repository中输入svn://localhost/trunkQ这h们就得到了一份工作拷贝?br /> 在工作拷贝中作出修改q提交:打开readme.txtQ作Z改,然后右键->Commit...Q这h们就把修Ҏ交到了版本库Q我们可以运行?br /> 察看所作的修改Q?br />readme.txt上右?>TortoiseSVN->Show LogQ这h们就可以看到我们对这个文件所有的提交。在版本1上右?>Compare with working copyQ我们可以比较工作拷贝的文g和版?的区别?br /> 最后,所有的内容都已l录制ؓ动画文g Q大家可以参考?br /> ]]> ?JDOM ?XML ~程 http://m.tkk7.com/buaacaptain/archive/2006/05/27/48528.html舚w 舚w Sat, 27 May 2006 13:56:00 GMT http://m.tkk7.com/buaacaptain/archive/2006/05/27/48528.html http://m.tkk7.com/buaacaptain/comments/48528.html http://m.tkk7.com/buaacaptain/archive/2006/05/27/48528.html#Feedback 0 http://m.tkk7.com/buaacaptain/comments/commentRss/48528.html http://m.tkk7.com/buaacaptain/services/trackbacks/48528.html 阅读全文 ]]> EasyJF开源团队协同开发实用指? http://m.tkk7.com/buaacaptain/archive/2006/05/27/48462.html舚w 舚w Sat, 27 May 2006 03:27:00 GMT http://m.tkk7.com/buaacaptain/archive/2006/05/27/48462.html http://m.tkk7.com/buaacaptain/comments/48462.html http://m.tkk7.com/buaacaptain/archive/2006/05/27/48462.html#Feedback 0 http://m.tkk7.com/buaacaptain/comments/commentRss/48462.html http://m.tkk7.com/buaacaptain/services/trackbacks/48462.html 在配|管理服务器的搭E中Q团队成员WilliamRaymQ加班加点,q箋奋战了三天三夜,d(24-4.5)*3Q?8.5时Q做Z非常大的贡献。另外配|管理组的会?huifei)以及团队中的negod、天意、天一、船ѝ大峡等很多成员为此也做了大量的调研及协助工作。在此,Z表示对以上团队成员的谢意Q欢q大家有鲜花扔鲜花,没鲜花就l点掌声也不错。哈哈! 废话不多_下面q入正题吧!
一、 EasyJF协同开发客L软g
EasyJF开源团队当前的配置理服务器系lY件用的是Subversion。因此,在用相兛_同开发及版本控制{功能之前需要下载ƈ安装Subversion客户端Y件?br /> 当前EasyJF团队的协同开发工作主要涉及到两个软gQ?个是TortoiseSVNQ用于在Windows操作pȝ的资源管理器中直接用协同功能。另外一个是Subversion的Eclipse插gQ用于在Eclipse开发环境中使用Subversionq行协同开发及版本控制?br /> 当然Q还有针对其它开发工L开发插件以及Linux下的客户端。由于当前成员多半是在Windowsq_下做开发,在此׃作过多介l?/div>
二、 通过资源理器进行协同开?/strong>
1、下载Subversion的客LTortoiseSVN EasyJF中映像地址Q?a >http://dl.easyjf.com/downloads/TortoiseSVN-1.3.3.6219-svn-1.3.1.msi
2、安装TortoiseSVN 下蝲完成后,直接双击点安装即可,如下图所C:
安装成功后,在开始菜单中的结果如下图所C:
若执行TortoiseSVNQ我们会得到下面的结果:
q个对话框告诉我们,TortoiseSVN是一个Shell扩展Q我们直接在Windows的资源管理器中直接用TortoiseSVN的相兛_能?/div>
下面我们打开资源理器,点击一下鼠标右键,会看到类似如下的图:
上图中,右键快键菜单中我了一个SVN Checkout…选项及TortoiseSVN选项Q这样即表示客户端Y件已l安装完成了。下面即可直接通过资源理器进行团队项目文件的理协同理{操作?/div>
3、导?下蝲)EasyJF开源团队的目源码 我们随便Z个空的目录比如:E:\easyjfQ在资源理器中打开该文件夹。点“右键”->”SVN Checkout…”,然后在弹出对话框中输入EasyJF开源项目的库\?URL)以及本地目录Q如下所C:
然后点击“OK”按钮,即会提示输入用户名及密码Q团队成员请使用由EasyJF配置理l发攄帐号及密码,游客请用easyjf作用户名及密码)Q如下图所C:
d成功后,卛_q入目文g的导出(下蝲Q。如下图所C:
“导出”完成后点OKQ然后在资源理器即可见到如下图所C内容:
其中看到目文g及目录的前面都有一?标识Q这是Subversion的,表示我们q个文g已经受到了版本控制?/div>
4、修攚w目文件及内容
在资源管理器中,寚w目文件的操作跟我们^时的操作没有M区别Q比如我们直接双几Z目录及文g文明.txt”这个文Ӟ即会调用C本来~辑文g。我们修Ҏ件中的一些内容,然后点保存,即会Z一个标识该文g已修改过的图标,如下图所C:
上图中的 图标表示该文件已l修攏V当所有修改工作完成后Q我们需要把本地修改的内Ҏ交到q程配置理服务器中。直接选中修改q的文g或文件夹Q然后点右键Q选择其中的“SVN Commit…”命令,如下图:
我们会看到弹Z个对话框Qƈ昄出已l修改过的文Ӟq里我们可以有选择性的选择一些要提交的文Ӟq在recent message对话框中填写本次修改的相兌明信息等。如下图所C:
然后点“OK”,此时若刚才没有保存用户名卛_码,或者用h限不够的话。会再次弹出用户d框,在这里输入自q用户名(注:游客帐号easyjf不具备修攚w目文件的权限Q,然后点“OK”即可,如下图所C:
提交成功后显C如下图所C的信息Q?br />
5、增加文?br /> 假如我们在项目中加入了文Ӟ在提交到服务器的时候,需要先执行add操作把新增文件加到更新列表中Q然后再执行“SVN Commit…”的时候,才能提交。如下图所C:
6、删除项目中的文?br /> 在资源管理中选中要删除的内容Q然后点右键Q选择delete(删除)操作Q然后再执行SVN Commit(提交)卛_。如下图所C:
7、其它操?/strong> 当然QSubversion的功能是比较强大的,除了上面的这些基本操作,q有很多其它目协同斚w的功能,如版本标识、文件合q、锁定、解锁等{。请团队成员在具体用的q程中认真体会?/div>
三、 在Eclipse中用Subversion
前面介绍了如何在资源理器中直接使用Subversionq行协同功能Q然而在实际的开发工作中Q我们更多的时候需要直接在开发工具中使用协同及版本控制功能。下面简单介l如何在Eclipse中用Subversionq行协同开发?/div>
1、下载Subversion的Eclipse插g 下蝲地址Q?a >http://dl.easyjf.com/downloads/subversion_eclipse.zip
2、安装插?/strong> 跟其它的Eclipse插g一P我们直接把下载后的文件解压,q拷贝到的Eclipseȝ录即可(当然Q更好的做法是用links目录安装Q。插件文件如下图所C:
3、配|?/strong> q入EclipsepȝQ若插g安装成功后,我们打开Eclipse的preference面板Q在Teaml中会看到除了CVS以外Q还多了一SVN。点开该选项Q我们可以设|SVN的一些属性(默认情况下不需要Q何设|)。如下图所C:
q入Eclipse的“windows?>“show view?>“other”,我们会看到如下的SVN:
4、查看配|服务器中的目文g 打开SVN资源库视图,点击d资源库,我们可以讄配置EasyJF团队开源项目库。ƈ查询目文gQ如下图所C:
5、从配置理服务器中取出目文g到本?br /> 在SVN资源库中点击右键Q然后执行“取Zؓ”操作。即可把配置理服务器中的项目取出到本地?/div>
输入用户名及密码后,卛_出现目相关的对话框。通过q些引导对话框,可以快速实C把远E的目直接导入本地文g中,交自动徏立v与配|服务器中项目的相关兌。如下所C:
6、本地项目与配置理器的目兌 当然Q也可以直接把本地已l徏好的目与配|管理服务器中的目建立兌。用SVN的协同开发及版本控制功能。直接选中相关的项目名Uͼ炚w标右键,然后选择“Team”-“Share Project”,然后在对话框中选择“SVN”,接着选择或填写相关的配置参数卛_。如下图所C:
7、用项目协同及版本控制功能 在徏立好本地目与远E项目的兌后,我们卛_在Eclipse中应用Subversion的各U协同开发及版本控制功能。如下图所C:
׃EasyJF开源项目中的源码只有正式成员才能修改及l护Q因此关于团队成员具体的协同开发、版本控制规范等q里不不作详l介l,我们会在团队的工作文档中以及日常培训中给予介l?/strong>
四、 EasyJF团队开源项目库?/strong>
以下是当前EasyJF团队已有开源项目名U及对应SVN地址Q游客访问用户即密码皆ؓeasyjf?br /> ? EasyDBO/
http://svn.easyjf.com/repository/easyjf/easydbo/ ? EasyJWeb/
http://svn.easyjf.com/repository/easyjf/easyjweb/ ? EasyJSite建站pȝ /
http://svn.easyjf.com/repository/easyjf/easyjsite/ ? 易Java订销理pȝ/
http://svn.easyjf.com/repository/easyjf/easyerp/ ? EasyJF论坛pȝ/
http://svn.easyjf.com/repository/easyjf/easyjfbbs/ ? EasyJF Blogpȝ/
http://svn.easyjf.com/repository/easyjf/easyjfblog/ ? Java知识评pȝ/
http://svn.easyjf.com/repository/easyjf/easyjfexam/ ? Meybo Mail Web开源简化版/
http://svn.easyjf.com/repository/easyjf/meybomailweb/ ? 易Java|上商城pȝ/
http://svn.easyjf.com/repository/easyjf/easyshop/ 。。。。。?br /> 更多的最新EasyJF国Java开源项目的SVN地址Q请随时查看EasyJF开源团队官|?/div>
五、 Subversion?/strong>
Subversion是一个GPL版本控制软gQSubversion(SVN,
http://subversion.tigris.org/ )目开始于2000q?月。通过Subversion我们实现在团队中的项目协同开发及版本控制功能?br /> Subversion主要有以下功能:
代码版本的存储与l护;
代码版本的追t回?
代码版本的分合控?
团队成员多h合作开发专?
代码q端理l护;
代码匿名截取;
目录版本控制Q目录更?
文g的分支与标记{?/div>
]]>
Eclipse快速上手指南之使用CVS http://m.tkk7.com/buaacaptain/archive/2006/05/26/48276.html舚w 舚w Fri, 26 May 2006 02:43:00 GMT http://m.tkk7.com/buaacaptain/archive/2006/05/26/48276.html http://m.tkk7.com/buaacaptain/comments/48276.html http://m.tkk7.com/buaacaptain/archive/2006/05/26/48276.html#Feedback 0 http://m.tkk7.com/buaacaptain/comments/commentRss/48276.html http://m.tkk7.com/buaacaptain/services/trackbacks/48276.html 版本控制在团队开发中是必不可的。CVS是优U的开源版?a class="bluekey" target="_blank">控制软gQ?a class="bluekey" target="_blank">Eclipse本n内|了对CVS的支持,只需单配|,卛_使用CVS?br /> 首先我们要正安装ƈ配置好CVS服务器,通常Linux Server都自带CVS服务Q不q命令行操作比较J琐。Windows下也有简单易用的CVS服务器,q里我们推荐CVSNTQ可以下载CVSNT 2.0.51aQ安装ƈ启动CVSNTQ?br /> 然后切换到Repositories面板Q添加一个RepositoryQ命名ؓ/cvs-javaQCVSNT会提C是否初始化q个RepositoryQ选择是: 然后在Advanced面板上选中“Pretend to be a Unix CVS version”: 然后Q在Windows账户中ؓ每一个开发h员添加用户名和口令?br /> 现在QCVSNT的安装配|已l完成,下一步,启动EclipseQ我们可以用原有的Hello 工程Q或者新Z个ProjectQ然后选择菜单Window->Show View->OtherQ打开CVS->CVS RepositoriesQ?br /> 然后点击按钮 Q添加一个RepositoryQ?br /> 注意用户名和口o直接填Windows的用户名和口令,然后选中“Validate Connection on Finish”,点击Finish完成Q?br /> 首先Q我们要一个现有的工程攑ֈCVS服务器中Q切换到Package ExplorerQ选中Hello 工程Q右键点击,选择Team->Share Project…: 使用刚才我们d的RepositoryQl,q将所有文仉d到CVS中,最后Eclipse提示CommitQ?br /> 填入一个简单的注释Q确定,然后Eclipse会把整个工程提交到CVS服务器,可以在Package Explorer中看到图标发生了变化QHello.java文g后面会有版本?.1。在CVS Repositories面板中刷斎ͼ可以看到刚添加进来的工程Q?br /> 在团队开发中Q当创徏了一个基本的工程q提交到CVS后,别的开发h员首先要Check Outq个工程到各自的本地计算ZQ这里ؓ了演C,首先我们在Package Explorer中删除Hello工程Q然后打开CVS RepositoriesQ如果没有看到Repository按照上面的ҎdRepositoryQ,选择Hello工程Q右键点击,选择Check Out As…: 作ؓ一个Project{ևQ就可以在Package Explorer中看到签出的工程?br /> 当对某些源文件作了修改后Q需要提交更改到CVS服务器。选中更改的文件或工程Q右键点击,选择Team->Commit…: 然后填入单的注释Q就可以提交到CVS服务器上了,可以看到源文件的版本号变成了1.2?br /> 以上单介l了如何搭徏CVS服务器以及在Eclipse中如何用CVSQ可以参考CVS手册以便了解Branch 、Merge{更多功能的使用?img src ="http://m.tkk7.com/buaacaptain/aggbug/48276.html" width = "1" height = "1" /> ]]>如何利用iText在JSP中生成PDF报表 http://m.tkk7.com/buaacaptain/archive/2006/05/25/48089.html舚w 舚w Thu, 25 May 2006 10:22:00 GMT http://m.tkk7.com/buaacaptain/archive/2006/05/25/48089.html http://m.tkk7.com/buaacaptain/comments/48089.html http://m.tkk7.com/buaacaptain/archive/2006/05/25/48089.html#Feedback 0 http://m.tkk7.com/buaacaptain/comments/commentRss/48089.html http://m.tkk7.com/buaacaptain/services/trackbacks/48089.html 转自csdnQ?a >http://kb.csdn.net/java/Articles/200309/c2b8794b-ac82-457c-af08-435d241e9f28.html 1Q 背?br />2Q 介liText 3Q 如何利用iText在javaE序中生成PDF报表 4Q 如何利用iText在JSP中生成PDF报表 1Q 直接在服务器上生成PDF文g 2Q 通过jsp生成PDF文g输出到客户?br />3Q 通过Servlet生成PDF文g输出到客户?br />5Q ȝ1Q背?/h3> 前不久做了一个通过JSP生成PDF报表的小目Q算得上开了一ơ眼界。企业的一些信息通过|络形成Html报表Q虽然IE可以直接打印昄在其中的内容Q但是从界面上来看,如果直接Html的显C结果打印出来,昑־不太观。如果将它{成PDF文g再打华ͼ则打印效果会好很多?br />2QiText?/h3> iText是一个开放源码的JavacdQ可以用来方便地生成PDF文g。大安过讉Khttp://sourceforge.net/project/showfiles.php?group_id=15255&release_id=167948 下蝲最新版本的cdQ下载完成之后会得到一?jar包,把这个包加入JDK的classpath卛_使用。如果生成的PDF文g中需要出C文、日文、韩文字W,则还需要通过讉Khttp://itext.sourceforge.net/downloads/iTextAsian.jar 下蝲iTextAsian.jar包?br />关于iTextcd的用,http://www.lowagie.com/iText/tutorial/index.html 有比较详l的教程。该教程从入门开始,比较pȝCl了在PDF文g中放入文字、图片、表格等的方法和技巧。读完这片教E,大致可以做一些从单到复杂的PDF文g了。不q,试图通过教程解决在生成PDF文gq程中遇到的所有困难无疑是一U奢望。所以,阅读iText的api文档昑־非常重要。读者在下蝲cd的同Ӟ也可以下载类库的文档?br />3Q如何利用iText在javaE序中生成PDF报表 以下是上q教E中一个最单的例子Q这个例子刻M通过iText生成PDF文g的一?br />E序框架。读者只需要在document.open();和document.close();两条语句中间加入自己希望攑֜PDF文g中的内容卛_。该例子只在PDF文g中加了“Hello World“一行文字?br /> Document document = new Document ();
try {
PdfWriter.getInstance(document, new FileOutputStream ("Chap0101.pdf" ));
document.open();
document.add(new Paragraph("Hello World" ));
}
catch (DocumentException de) {
System .err.println(de.getMessage());
}
catch (IOException ioe) {
System .err.println(ioe.getMessage());
}
document.close(); ׃上的例子可见Q程序的框架十分清楚明了。然而在PDF中指定文字、图甅R表格的位置是一仉帔R烦的事情。除了不断地在程序中修改位置、然后运行程序、生成PDF文g、观察元素在PDF中的位置是否合理q样的过E以外,gq没有其它更好的Ҏ?br />4Q如何通过JSP生成PDF报表 q一部分是在iText的教E中所没有的,|上的相兌料也比较。我曑֜CSDN上看q有人开帖询问实现细节,有h回复了实现的原理Q先在服务器上生成PDF文gQ然后用户通过点击指向PDF文g的超链接选择下蝲或打开。这是一个思\Q或者说是思\之一。本文实Cq个思\Q又l出另外一个思\q过两种途径实现之?br />1Q直接在服务器上生成PDF文g?br /><%@ page import ="com.lowagie.text.*,com.lowagie.text.pdf.*, java.io.*" %>
<%
String filename = "PDF" +(new Random ()).nextInt()+".pdf" ;
Document document = new Document (PageSize.A4);
ServletOutputStream out1 = response.getOutputStream();
try {
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream (filename) );
document.open();
document.add(new Paragraph("Hello World" ));
document.close();
}
catch (Exception e){}
%> 上面的程序在服务器上生成了一个静态的PDF文g。显Ӟ每次q行所得的PDF文g的名U应该是独一无二不能有重的。本E序通过随机函数来命名生成的PDF文g。本E序的缺点就是,每次q行都会在服务器上生一个PDF文gQ如果不及时删除Q数量会来大Q这昄是站点维护者所不愿意看到的?br />2Q将PDF文g通过的形式输送到客户端的~存。这样做的好处是不会在服务器上留下Q何“遗q”?br />iQ直接通过JSP面生成<%@
page import ="java.io.*,java.awt.Color,com.lowagie.text.*,com.lowagie.text.pdf.*" %>
<%
response.setContentType( "application/pdf" );
Document document = new Document ();
ByteArrayOutputStream buffer = new ByteArrayOutputStream ();
PdfWriter writer=PdfWriter.getInstance( document, buffer );
document.open();
document.add(new Paragraph("Hello World" ));
document.close();
DataOutput output = new DataOutputStream ( response.getOutputStream() );
byte [] bytes = buffer.toByteArray();
response.setContentLength(bytes.length );
for ( int i = 0; i < bytes.length ; i++ ) { output.writeByte( bytes[i] ); }
%> iiQ通过Servlet生成import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException ,ServletException {
Document document = new Document (PageSize.A4, 36,36,36,36);
ByteArrayOutputStream ba = new ByteArrayOutputStream ();
try {
PdfWriter writer = PdfWriter.getInstance(document, ba);
document.open();
document.add(new Paragraph("Hello World" ));
}
catch (DocumentException de)
{
de.printStackTrace();
System .err.println("A Document error:" +de.getMessage());
}
document.close();
response.setContentType("application/pdf" );
response.setContentLength(ba.size());
ServletOutputStream out = response.getOutputStream();
ba.writeTo(out);
out.flush();
} 5Q结?/h3> 我在目中采用的是第二种Ҏ。本文的源码在我的tomcat4上面都是调试通过的。希望可以给大家带来方便?br />Ƣ迎大家采用Q如需转蝲Q请注明出处?/span>
]]>
վ֩ģ壺
ŮƵѿһ |
˾Ʒձ11 |
þAV뾫Ʒɫҹ鶹 |
ɫվ |
˾þ |
avպavվ |
ŷŮƬѲƵ |
ˮƵ߹ۿѲŸ |
òݸԴվ |
һ
|
ٸԼA |
ѹۿ߹ۿİ
|
ø߹ۿ |
ŷAۺһ |
˾Ʒԭ |
һ234վ |
av˾Ʒһ |
ƷϵƵ |
߹ۿվڵ |
ŮƵվa |
պһ |
þþƷav鶹ѿ |
Ƶ |
þѸƵ |
鶹߹ۿ |
ŮͬavƬ߹ۿ |
߹ۿ |
Ҹ |
4455߹ѿ |
һëƬһëƬaa |
AVĻɫ
|
պƷĻ |
Ѹ69ʽƵ߹ۿ
|
ؼAƬëƬѿ
|
ޱٸ뼤 |
aëƬƵ |
ëƬƵۿ |
ͬ˧GAYƬ߹ۿ |
ĻۺϾþۺ |
˿wwwƵ |
벻Ƶ߹ۿ |