??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲无码精品浪潮,亚洲一区欧洲一区,色欲aⅴ亚洲情无码AV蜜桃http://m.tkk7.com/buaacaptain/archive/2006/06/07/51080.html舚w舚wWed, 07 Jun 2006 04:22:00 GMThttp://m.tkk7.com/buaacaptain/archive/2006/06/07/51080.htmlhttp://m.tkk7.com/buaacaptain/comments/51080.htmlhttp://m.tkk7.com/buaacaptain/archive/2006/06/07/51080.html#Feedback0http://m.tkk7.com/buaacaptain/comments/commentRss/51080.htmlhttp://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>

  1. 消息子pȝ
    消息子pȝ提供了灵zȝ消息传递框Ӟq个消息传递框架包括处理程序、链、序列化E序和反序列化程序。处理程序是一个处理请求、响应和故障的对象。处理程序可被组合在一h为链Q而且可以使用一个灵zȝ部v描述W来配置q些处理E序的顺序?
  2. 传输框架子系l?
    提供了一个传输框Ӟq个传输框架可以帮助您创q可插式传输发送器和传输侦听器?
  3. 数据~码子系l?
    AXIS完全按照 XML Schema 规范提供各种数据cd的自动序列化Qƈ且提供功能扩展接口来使用您自己定制的序列化器和反序列化器?
  4. 其他
    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?





回页?/font>


? 环境搭徏


׃AXIS本n是基于JAVA语言开发的目Qƈ且是以Web应用形式发布的,因此它运行时需要一个应用服务器作ؓ支撑。ؓ了方便我们这里选用的是Tomcat。由于AXIS本n需要用到处理XML信息的包Q所以我们徏议用JDK1.4q安装Tomcat 4.1.24。下面是环境搭徏步骤Q读取根据自w情况进行安装?

  1. 安装JDK1.4.1
  2. 安装Tomcat 4.1.24到C:\Tomcatq证安装是否成?
  3. 下蝲AXIS目打包文gaxis-1_1.zip解压~后目录中的webapps目录下的axis子目录拷贝到C:\Tomcat\webapps下?
  4. 验证AXIS的安装:重新启动Tomcat服务器后打开览器输入网址http://localhost:8080/axis 后应该出现如下图所C页面,点击链接"Validate"来验证Axis所需的几个JAVA包是否齐全?


?

点击链接Validate后,AXIS会自动检查所需的每一个JAVAlgQ这协组件分为:必需lg以及可选组Ӟ必须保证所有必需lg都存在,如下图所C即为验证成功?



?





回页?/font>


三. 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如下结果:

												
														There is a Web Service here

        
        
														
																Click to see the WSDL 
														
														
														
												
										

点击面上的链接查看该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服务?





回页?/font>


四. 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的帮助手册,其他语言的访问请查阅相关的文档?





回页?/font>


? 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>

												
										





回页?/font>



到此文章告一D落Q通过以上的演l,我相信你已经对Web服务有一个感性的认识Q但是这个仅仅是开始,我们也只是很单的介绍了Web服务的一些基本概念ƈ演示了一个无法再单的例子。Web服务q有很多其他高的内容例如复杂类型、数据安全等没有涉及刎ͼ不过没有关系Q万事开头难Q希望本文能够促q大家理解和应用下一代的应用模式q给q没有动手试验的开发h员开一个好头?



舚w 2006-06-07 12:22 发表评论
]]>
转:Subversion快速入门教E?/title><link>http://m.tkk7.com/buaacaptain/archive/2006/05/29/48751.html</link><dc:creator>舚w</dc:creator><author>舚w</author><pubDate>Mon, 29 May 2006 06:58:00 GMT</pubDate><guid>http://m.tkk7.com/buaacaptain/archive/2006/05/29/48751.html</guid><wfw:comment>http://m.tkk7.com/buaacaptain/comments/48751.html</wfw:comment><comments>http://m.tkk7.com/buaacaptain/archive/2006/05/29/48751.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/buaacaptain/comments/commentRss/48751.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/buaacaptain/services/trackbacks/48751.html</trackback:ping><description><![CDATA[q今为止看过的相x好的教程了:<a >http://www.subversion.org.cn/content/view/18/1/</a><br />如何快速徏立Subversion服务器,q且在项目中使用hQ这是大家最兛_的问题,与CVS相比QSubversion有更多的选择Q也更加的容易,几个命o可以徏立一套服务器环境Q可以用v来,q里配套?a target="_self">动画教程</a>?br /><br />本文是用Subversion最快速的教程Q在最短的旉里帮助您建立起一套可用的服务器环境,只需略加调整可以应用到实际目当中?br /><br /><br />本教E分Z下几个部门,不仅仅是快速入门,最后我们还有一些高U功能的说明Qؓ了说明简单,教程是在windows下用的方式Q以方便资源有限的项目用,对于UNIX环境下,区别q不大?br /><br /><ol><li>软g下蝲 </li><li>服务器和客户端安?br /></li><li>建立版本库(RepositoryQ? </li><li>配置用户和权?br /></li><li>q行独立服务? </li><li>初始化导? </li><li>基本客户端操?</li></ol><strong>1QY件下?br /><br /></strong><ul><li>下蝲Subversion服务器程序?</li></ul>?a target="_self">官方|站</a> 的下载二q制安装文gQ来?a target="_self">二进制包下蝲部分</a>  Q找?Windows NT, 2000, XP and 2003部分Q然后选择"<a >this directory</a>"Q这h们可以看到许多下载的内容Q目前可以下?a onclick="return launch(this.href, 1)" > svn-1.2.3-setup.exe</a>?br /><br /><ul><li>下蝲Subversion的Windows客户端TortoiseSVN?</li></ul>TortoiseSVN是扩展Windows Shell的一套工P可以看作Windows资源理器的插gQ安装之后Windows可以识别Subversion的工作目录?br />官方|站?a >TortoiseSVN</a>Q下载方式和前面的svn服务器类|?a >Download</a>面的我们选择Official version for Win2k/XP or higher的版本,然后在sourceforge?a target="_self">下蝲面</a>选择目前的最高稳定版本的安装文g<a >TortoiseSVN-1.2.4.4479-svn-1.2.3.msi</a>?br /><br /><br /><strong>2Q服务器和客L安装<br /><br /></strong><ul><li>服务器安装,直接q行<a onclick="return launch(this.href, 1)" >svn-1.2.3-setup.exe</a>Q根据提C安装即可,q样我们有了一套服务器可以q行的环境? </li><li>安装TortoiseSVNQ同L接运?a >TortoiseSVN-1.2.4.4479-svn-1.2.3.msi</a>按照提示安装卛_Q不q最后完成后会提C是否重启,其实重启只是使svn工作拯在windows中的Ҏ样式生效Q与所有的实际功能无关Q这里ؓ了立ȝ到好的效果,q是重新启动机器?</li></ul><br /><br /><strong>3Q徏立版本库QRepositoryQ?br /><br /></strong>q行Subversion服务器需要首先要建立一个版本库QRepositoryQ,可以看作服务器上存放数据的数据库Q在安装了Subversion服务器之后,可以直接q行Q如Q?strong><br /></strong><blockquote><pre>svnadmin create E:\svndemo\repository<br /></pre></blockquote><div align="left"><pre>׃在目录E:\svndemo\repository下创Z个版本库?br /><br />我们也可以用TortoiseSVN囑Ş化的完成q一步:<br /></pre><blockquote>在目录E:\svndemo\repository?右键->TortoiseSVN->Create Repository here...“, 然后可以选择版本库模式, q里使用默认卛_Q?然后创Z一pd目录和文件?br /></blockquote></div><strong>4Q配|用户和权限<br /><br /></strong>来到E:\svndemo\repository\conf目录Q修改svnserve.confQ?br /><blockquote># [general]<br /># password-db = passwd<br /></blockquote>改ؓQ?br /><blockquote>[general]<br />password-db = passwd</blockquote>然后修改同目录的passwd文gQ去掉下面三行的注释Q?br /><blockquote># [users]<br /># harry = harryssecret<br /># sally = sallyssecret<br /></blockquote>最后变成:<br /><blockquote>[users]<br />harry = harryssecret<br />sally = sallyssecret<br /></blockquote><strong><br />5Q运行独立服务器<br /><br /></strong>在Q意目录下q行Q?br /><blockquote>svnserve -d -r E:\svndemo\repository </blockquote>我们的服务器E序已l启动了?br /><br /><br /><strong>6Q初始化导入<br /><br /></strong>来到我们惌导入的项目根目录Q在q个例子里是E:\svndemo\initprojectQ目录下有一个readme.txt文gQ?br /><ol><li>右键->TortoiseSVN->Import... </li><li>URL of repository输入“svn://localhost/trunk? </li><li>ok </li></ol>完成之后目录没有M变化Q如果没有报错,数据已l全部导入到了我们刚才定义的版本库中?br /><br /><br /><strong>7Q基本客L操作</strong><br /><strong><br /></strong>取出版本库到一个工作拷贝:<br /><blockquote>来到LI目录下Q在本例中是E:\svndemo\wc1Q运行右?>CheckoutQ在URL of repository中输入svn://localhost/trunkQ这h们就得到了一份工作拷贝?br /></blockquote>在工作拷贝中作出修改q提交:<br /><blockquote>打开readme.txtQ作Z改,然后右键->Commit...Q这h们就把修Ҏ交到了版本库Q我们可以运行?br /></blockquote>察看所作的修改Q?br /><blockquote>readme.txt上右?>TortoiseSVN->Show LogQ这h们就可以看到我们对这个文件所有的提交。在版本1上右?>Compare with working copyQ我们可以比较工作拷贝的文g和版?的区别?br /></blockquote><br />最后,所有的内容都已l录制ؓ<a target="_self">动画文g</a>Q大家可以参考?br /><img src ="http://m.tkk7.com/buaacaptain/aggbug/48751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/buaacaptain/" target="_blank">舚w</a> 2006-05-29 14:58 <a href="http://m.tkk7.com/buaacaptain/archive/2006/05/29/48751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> ?JDOM ?XML ~程 http://m.tkk7.com/buaacaptain/archive/2006/05/27/48528.html舚w舚wSat, 27 May 2006 13:56:00 GMThttp://m.tkk7.com/buaacaptain/archive/2006/05/27/48528.htmlhttp://m.tkk7.com/buaacaptain/comments/48528.htmlhttp://m.tkk7.com/buaacaptain/archive/2006/05/27/48528.html#Feedback0http://m.tkk7.com/buaacaptain/comments/commentRss/48528.htmlhttp://m.tkk7.com/buaacaptain/services/trackbacks/48528.html阅读全文

舚w 2006-05-27 21:56 发表评论
]]>
EasyJF开源团队协同开发实用指?http://m.tkk7.com/buaacaptain/archive/2006/05/27/48462.html舚w舚wSat, 27 May 2006 03:27:00 GMThttp://m.tkk7.com/buaacaptain/archive/2006/05/27/48462.htmlhttp://m.tkk7.com/buaacaptain/comments/48462.htmlhttp://m.tkk7.com/buaacaptain/archive/2006/05/27/48462.html#Feedback0http://m.tkk7.com/buaacaptain/comments/commentRss/48462.htmlhttp://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
  或:http://www.easyjf.com/download/tools/TortoiseSVN-1.3.3.6219-svn-1.3.1.zip
  TortoiseSVN官网下蝲Q?a target="_blank">http://tortoisesvn.sourceforge.net/
 
  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>

舚w 2006-05-27 11:27 发表评论
]]>Eclipse快速上手指南之使用CVShttp://m.tkk7.com/buaacaptain/archive/2006/05/26/48276.html舚w舚wFri, 26 May 2006 02:43:00 GMThttp://m.tkk7.com/buaacaptain/archive/2006/05/26/48276.htmlhttp://m.tkk7.com/buaacaptain/comments/48276.htmlhttp://m.tkk7.com/buaacaptain/archive/2006/05/26/48276.html#Feedback0http://m.tkk7.com/buaacaptain/comments/commentRss/48276.htmlhttp://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" />

舚w 2006-05-26 10:43 发表评论
]]>
如何利用iText在JSP中生成PDF报表 http://m.tkk7.com/buaacaptain/archive/2006/05/25/48089.html舚w舚wThu, 25 May 2006 10:22:00 GMThttp://m.tkk7.com/buaacaptain/archive/2006/05/25/48089.htmlhttp://m.tkk7.com/buaacaptain/comments/48089.htmlhttp://m.tkk7.com/buaacaptain/archive/2006/05/25/48089.html#Feedback0http://m.tkk7.com/buaacaptain/comments/commentRss/48089.htmlhttp://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 />
  1.         Document document = new Document();
  2.         try { 
  3.             PdfWriter.getInstance(document, new FileOutputStream          ("Chap0101.pdf"));
  4.             document.open();
  5.             document.add(new Paragraph("Hello World"));
  6.         }
  7.         catch(DocumentException de) {
  8.             System.err.println(de.getMessage());
  9.         }
  10.         catch(IOException ioe) {
  11.             System.err.println(ioe.getMessage());
  12.         }
  13.         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 />
  1. <%@ page import ="com.lowagie.text.*,com.lowagie.text.pdf.*, java.io.*"%>
  2. <%
  3.         String filename = "PDF"+(new Random()).nextInt()+".pdf" ;
  4.         Document document = new Document(PageSize.A4);
  5.         ServletOutputStream out1 = response.getOutputStream();
  6.  try{
  7.             PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename) );
  8.             document.open();
  9.             document.add(new Paragraph("Hello World"));
  10.             document.close();
  11.     }
  12.             catch(Exception e){}
  13. %>

   上面的程序在服务器上生成了一个静态的PDF文g。显Ӟ每次q行所得的PDF文g的名U应该是独一无二不能有重的。本E序通过随机函数来命名生成的PDF文g。本E序的缺点就是,每次q行都会在服务器上生一个PDF文gQ如果不及时删除Q数量会来大Q这昄是站点维护者所不愿意看到的?br />2Q将PDF文g通过的形式输送到客户端的~存。这样做的好处是不会在服务器上留下Q何“遗q”?br />iQ直接通过JSP面生成
  1. <%@
  2.        page import="java.io.*,java.awt.Color,com.lowagie.text.*,com.lowagie.text.pdf.*"%>
  3. <%
  4. response.setContentType( "application/pdf" );
  5. Document document = new Document();
  6. ByteArrayOutputStream buffer = new ByteArrayOutputStream();
  7. PdfWriter writer=PdfWriter.getInstance( document, buffer );
  8. document.open();
  9. document.add(new Paragraph("Hello World"));
  10. document.close();
  11. DataOutput output = new DataOutputStream( response.getOutputStream() );
  12. byte[] bytes = buffer.toByteArray();
  13. response.setContentLength(bytes.length);
  14. forint i = 0; i < bytes.length; i++ ) { output.writeByte( bytes[i] ); }
  15. %>
iiQ通过Servlet生成
  1. import java.io.*;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. import com.lowagie.text.*;
  5. import com.lowagie.text.pdf.*;
  6. public void doGet(HttpServletRequest request,
  7.                                HttpServletResponse response)
  8.  throws IOException,ServletException
  9. {
  10.   Document document = new Document(PageSize.A4, 36,36,36,36);
  11.   ByteArrayOutputStream ba = new ByteArrayOutputStream();
  12.   try
  13.   {
  14.      PdfWriter writer = PdfWriter.getInstance(document, ba);
  15.      document.open();
  16.      document.add(new Paragraph("Hello World"));
  17.   }
  18.   catch(DocumentException de)
  19.   {
  20.     de.printStackTrace();
  21.     System.err.println("A Document error:" +de.getMessage());
  22.    }
  23.   document.close();
  24.   response.setContentType("application/pdf");
  25.   response.setContentLength(ba.size());
  26.   ServletOutputStream out = response.getOutputStream();
  27.   ba.writeTo(out);
  28.   out.flush();
  29. }

5Q结?/h3>
  我在目中采用的是第二种Ҏ。本文的源码在我的tomcat4上面都是调试通过的。希望可以给大家带来方便?br />Ƣ迎大家采用Q如需转蝲Q请注明出处?/span>

舚w 2006-05-25 18:22 发表评论
]]> վ֩ģ壺 ŮƵѿһ| ˾Ʒձ11| þAV뾫Ʒɫҹ鶹| ɫվ| ޹˾þ| avպavվ| ŷŮƬѲƵ| ˮƵ߹ۿѲŸ| òݸԴվ| һ | ٸԼA| ѹۿ߹ۿİ | ø߹ۿ| ŷAۺһ| ޹˾Ʒԭ| һ234վ| av˾Ʒһ| ƷϵƵ| ߹ۿվڵ| ŮƵվa| պһ| þþƷav鶹ѿ| ޾Ƶ| þѸƵ| 鶹߹ۿ| ŮͬavƬ߹ۿ| ޲߹ۿ| Ҹ| 4455߹ѿ| һëƬһëƬaa| AVĻɫ | պƷĻ| Ѹ69ʽƵ߹ۿ | ؼAƬëƬѿ | ޱٸ뼤| aëƬƵ| ëƬƵۿ| ͬ˧GAYƬ߹ۿ| ĻۺϾþۺ| ˿wwwƵ| 벻Ƶ߹ۿ|