??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲毛片av日韩av无码,亚洲国产成人久久精品软件 ,亚洲乱理伦片在线观看中字http://www.tkk7.com/xzc0202/zh-cnSun, 11 May 2025 15:37:26 GMTSun, 11 May 2025 15:37:26 GMT60Java同步机制ȝ--synchronizedhttp://www.tkk7.com/xzc0202/archive/2014/04/09/412147.htmlxzc0202xzc0202Wed, 09 Apr 2014 07:27:00 GMThttp://www.tkk7.com/xzc0202/archive/2014/04/09/412147.htmlhttp://www.tkk7.com/xzc0202/comments/412147.htmlhttp://www.tkk7.com/xzc0202/archive/2014/04/09/412147.html#Feedback0http://www.tkk7.com/xzc0202/comments/commentRss/412147.htmlhttp://www.tkk7.com/xzc0202/services/trackbacks/412147.htmlhttp://leo-faith.iteye.com/blog/177779
不久前用C同步Q现在回q头来对JAVA中的同步做个ȝQ以对前D|间工作的ȝ和自我技术的条理话。JAVA中synchronized关键字能够作为函数的修饰W,也可作ؓ函数内的语句Q也是qx说的同步Ҏ和同步语句块。假如再l的分类Qsynchronized可作用于instance变量、object referenceQ对象引用)、static函数和class literals(cdU字面常?w上?nbsp;
在进一步阐qC前,我们需要明几点: 
AQ无论synchronized关键字加在方法上q是对象上,他取得的锁都是对象,而不是把一D代码或函数当作?#8213;―而且同步Ҏ很可能还会被其他U程的对象访问?nbsp;
BQ每个对象只有一个锁QlockQ和之相兌?nbsp;
CQ实现同步是要很大的pȝ开销作ؓ代h的,甚至可能造成死锁Q所以尽量避免无谓的同步控制?nbsp;
接着来讨论synchronized用到不同地方对代码生的影响Q?nbsp;

假设P1、P2是同一个类的不同对象,q个cM定义了以下几U情늚同步块或同步ҎQP1、P2都能够调用他们?nbsp;

1Q?nbsp; 把synchronized当作函数修饰W时Q示例代码如下: 
Public synchronized void method(){ 
//…. 

q也是同步ҎQ那q时synchronized锁定的是哪个对象呢?他锁定的是调用这个同步方法对象。也是_当一个对象P1在不同的U程中执行这个同步方法时Q他们之间会形成互斥Q达到同步的效果。但是这个对象所属的Class所产生的另一对象P2却能够Q意调用这个被加了synchronized关键字的Ҏ?nbsp;
上边的示例代码等同于如下代码Q?nbsp;
public void method() 

synchronized (this)      //  (1) 

       //….. 


(1)处的this指的是什么呢Q他指的是调用q个Ҏ的对象,如P1。可见同步方法实质是synchronized作用于object reference?#8213;―那个拿到了P1对象锁的U程Q才能够调用P1的同步方法,而对P2而言QP1q个锁和他毫不相qԌE式也可能在q种情Ş下摆脱同步机制的控制Q造成数据混ؕQ( 
2Q同步块Q示例代码如下: 
public void method(SomeObject so) { 
synchronized(so) 

       //….. 


q时Q锁是soq个对象Q谁拿到q个锁谁p够运行他所控制的那D代码。当有一个明的对象作ؓ锁时Q就能够q样写程式,但当没有明确的对象作为锁Q只是想让一D代码同步时Q能够创Z个特别的instance变量Q他得是个对象)来充当锁Q?nbsp;
class Foo implements Runnable 

       private byte[] lock = new byte[0];  // 特别的instance变量 
    Public void method() 

       synchronized(lock) { //… } 

//….. 

注:雉度的byte数组对象创徏h比M对象都经?#8213;―查看~译后的字节码:生成雉度的byte[]对象只需3条操作码Q而Object lock = new Object()则需?行操作码?nbsp;
3Q将synchronized作用于static 函数Q示例代码如下: 
      Class Foo 

public synchronized static void method1()   // 同步的static 函数 

//…. 

public void method2() 

       synchronized(Foo.class)   //  class literal(cdU字面常? 

       } 
   代码中的method2()Ҏ是把class literal作ؓ锁的情况Q他和同步的static函数产生的效果是相同的,取得的锁很特别,是当前调用这个方法的对象所属的c(ClassQ而不再是p个Class产生的某个具体对象了Q?nbsp;
记得在《Effective Java》一书中看到q将 Foo.class?P1.getClass()用于作同步锁q不相同Q不能用P1.getClass()来达到锁q个Class的目的。P1指的是由FoocM生的对象?nbsp;
能够推断Q假如一个类中定义了一个synchronized的static函数AQ也定义了一个synchronized 的instance函数BQ那么这个类的同一对象Obj在多U程中分别访问A和B两个ҎӞ不会构成同步Q因Z们的锁都不相同。AҎ的锁是Obj所属的那个ClassQ而B的锁是Obj所属的q个对象?nbsp;

结如下Q?nbsp;
搞清楚synchronized锁定的是哪个对象Q就能帮助我们设计更安全的多U程E式?nbsp;


更有一些技巧能够让我们对共享资源的同步讉K更加安全Q?nbsp;
1Q?nbsp; 定义private 的instance变量+他的 getҎQ而不要定义public/protected的instance变量。假如将变量定义为publicQ对象在外界能够l过同步Ҏ的控制而直接取得他Qƈ改变他。这也是JavaBean的标准实现方式之一?nbsp;
2Q?nbsp; 假如instance变量是个对象Q如数组或ArrayList什么的Q那上述Ҏ仍然不安全,因ؓ当外界对象通过getҎ拿到q个instance对象的引用后Q又其指向另一个对象,那么q个private变量也就变了Q岂不是很危险?q个时候就需要将getҎ也加上synchronized同步Qƈ且,只返回这个private对象的clone()――q样Q调用端得到的就是对象副本的引用了?/div>

xzc0202 2014-04-09 15:27 发表评论
]]>XFireQ轻杄单地开发Web Serviceshttp://www.tkk7.com/xzc0202/archive/2006/10/08/73841.htmlxzc0202xzc0202Sun, 08 Oct 2006 07:40:00 GMThttp://www.tkk7.com/xzc0202/archive/2006/10/08/73841.htmlhttp://www.tkk7.com/xzc0202/comments/73841.htmlhttp://www.tkk7.com/xzc0202/archive/2006/10/08/73841.html#Feedback1http://www.tkk7.com/xzc0202/comments/commentRss/73841.htmlhttp://www.tkk7.com/xzc0202/services/trackbacks/73841.html

摘要:

XFire是一个免费的开源SOAP框架Q它不仅可以极大方便地实现这样一个环境,q且可以提供许多Web Services规范中高U特征,q些特征在多数的商业或者开源工具都没有提供。你要恰当的理解q些单词Qgreat ease and simplicityQ非常轻村֒单)。你会看到使用XFire创徏Web Services是多么的单?
你的POJOҎ发布为Web Services

摘要

问一?Net的开发者,开发Web Services有多困难Q他们会被你的问题逗乐Q他们会告诉你所有步骤花费的旉不会过一分钟。再问一下Java开发者,q气好的话你会碰C面的回答Q一般情况下Q你会得C个完全不同的{案。从Web Services引入到Java中至今已l?q了Q然而它仍然被认为是一门较新的技术,一个主要的原因是使用Java实现Web Services太困难了。现在,随着C代Web Services引擎XFire的发布,q种情况会发生明显的变化。用XFireQ你可以把JavacL法发布ؓWeb Services而不需要编写额外的代码。在q篇文章中,你将会看到XFire使Web Services开发变得多么容易和单?br />
Web Services使我们能够在|络上徏立分布式pȝQ应用程序组件可以通过Mq_、Q何语a和Q何方式访问。无论应用程序如何开发,使用了什么语aQ以及运行在什么操作系l^CQ只要它作ؓWeb ServiceQƈ且ؓ协同解决问题而设计,那么你的应用E序Q以M语言开发或在Q何^CQ都可以利用它的服务。这是Web Service的主要概c?br />
Z实现Web Services的^台无x和实现讉K独立性,软g行业需要遵循一些作为标准的技术。其中一些包括:
---XMLQ在Web Services环境中各层之间进行传递的默认数据格式?br />---SOAPQ封装和交换信息的默认协议。第一ơ被提出Ӟ它是只取Simple Object Access ProtocolQ简单对象访问协议)的首字母。但是现在SOAP更多被认为是一个特定的名词Q以它自p命名,同样很多是用词不当:SOAP实际上不是用来访问对象的。另外,它也不再单?br />---WSDLQWeb Services Description LanguageQWeb Services描述语言Q:描述Web Services的语a。尽基于XMLq且可以被h理解QWSDL主要是由机器处理Q由客户端程序读取和理解?br />
下面的高U层ơ图表,ZWWW协会发布的“Web Services Architecture”(Web Services架构Q文档,昄了这些技术在实际的工作环境中是如何发挥作用:

image
q个程图显CZWeb Services中的核心技术是如何工作的?br />
q里QProvider是提供服务的应用E序lgQRequester是用服务的客户端程序。很多其他技术也会参与到交互中,但是q个囑֏昄了在Web Services环境中必需的核心技术组件?br />
XFire是一个免费的开源SOAP框架Q它不仅可以极大方便地实现这样一个环境,q且可以提供许多Web Services规范中高U特征,q些特征在多数的商业或者开源工具都没有提供。你要恰当的理解q些单词Qgreat ease and simplicityQ非常轻村֒单)。你会看到使用XFire创徏Web Services是多么的单?br />
假如你的Web应用有一个Javac,q且你想把它的一个方法发布ؓWeb ServicesQ当使用XFireӞ你不需要编写一行额外的Java代码。只需要编辑发布描q符Q然后你׃得到一个Web Services。是的,它相当地单。我们来看一个例子?br />
版权声明QQ何获得Matrix授权的网站,转蝲时请务必保留以下作者信息和链接
作?Shahid Ahmed ;mydeman
原文:http://www.javaworld.com/javaworld/jw-05-2006/jw-0501-xfire.html
Matrix:http://www.matrix.org.cn/resource/article/2006-09-24/XFire_6bd1061c-4bc6-11db-978f-43b3336b7e51.html
关键?XFire;Web Services

一个简单的Javac?/span>

我们的例子是一个银行业应用E序Q服务器是运行在J2SE1.4.2_07下的Apache Tomcat5.5.7。假定你已经了解如何使用Java~写Web应用E序Qƈ知道应该如何把它部v到Apache Tomcat服务器上。我们的Web应用E序非常单;它只做一件事——将资金从一个̎戯{到另外一个̎户上。一个普通的JavacBankingService包含了一个叫做transferFunds()的方法来为我们完成这工作。它需要四个输入参敎ͼ
1、        String fromAccount
2、        String toAccount
3、        double amount
4、        String currency

代码如下Q?br />
package com.mybank.xfire.example;

import java.text.NumberFormat;
import java.text.DecimalFormat;

/** XFire WebServices sample implementation class.
*/
public class BankingService implements IBankingService {
    
    //Default constructor.
    public BankingService(){    
    }
    
    /** Transfers fund from one account to another.
    */
    public String transferFunds(
        String fromAccount, String toAccount, double amount, String currency){
        
        String statusMessage = "";
                      
        //Call business objects and other components to get the job done.
        //Then create a status message and return.
        try {
            NumberFormat formatter = new DecimalFormat("###,###,###,###.00");      
            statusMessage = "COMPLETED: " + currency + " " + formatter.format(amount)+
            " was successfully transferred from A/C# " + fromAccount + " to A/C# " + toAccount;
        } catch (Exception e){
            statusMessage = "BankingService.transferFunds(): EXCEPTION: " + e.toString();
        }
        return statusMessage;
    }
    
}


在这里你看到了什么异常的东西了吗Q或许没有,除了默认的构造函敎ͼcd是public。这是必ȝ。否则,XFire不能够初始化q个cR?br />
因ؓ使用接口的设计是一个好的实践,所以我们的JavacM实现了一个称为IBankingService的接口。代码十分简单:
package com.mybank.xfire.example;

public interface IBankingService {  

    public String transferFunds(
        String fromAccount, String toAccount, double amount, String currency);
        
}


在实际实CQ这样一个方法可能包括各U类型的复杂调用、查询和处理操作。但是我们的CZ代码已经最化了,以至于我们可以集中精力在主要目标上:把这个方法发布ؓWeb Services?br />
你可以看到BankingService是一个普通的Javac,没有M代码告诉我们它将会在Web Services中用。好的,q里我们不需要增加Q何东ѝ我们所有的工作都在部v描述W里完成?br />
Web应用的部|描q符

在Java中,Web应用E序通常需要至一个部|描q符Q叫做web.xmlQ对其进行配|。XFire本n是一个基于servlet的应用程序。因此,我们需要增加必要的引用到描q符文g中。然后我们还必须配置要创徏的Web Services。我们用一个称为services.xml的新文g来完成这件事?br />
web.xml
首先Q修改web.xml。我们需要增加下面的XFire servlet相关的条目:
<servlet>
        <servlet-name>XFireServlet</servlet-name>
        <display-name>XFire Servlet</display-name>
        <servlet-class>org.codehaus.xfire.transport.http.XfireConfigurableServlet
         </servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>XFireServlet</servlet-name>
        <url-pattern>/servlet/XFireServlet/*</url-pattern>
    </servlet-mapping>
    
    <servlet-mapping>
        <servlet-name>XFireServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>


services.xml
现在我们不得不说一下我们的Web Services的由什么组成的了。这׃个叫做services.xml的文件完成,它存攑֜META-INF/xfire目录下,而这整个目录攑֜WEB-INF/classes文g夹中Q它在Web应用E序的标准类路径中。这里是services.xml中的基本配置条目Q?br />
<beans xmlns="http://xfire.codehaus.org/config/1.0">
  
  <service>
    <name>Banking</name>
    <namespace>mybank</namespace>
    <serviceClass>com.mybank.xfire.example.IBankingService</serviceClass>
    <implementationClass>com.mybank.xfire.example.BankingService</implementationClass>
  </service>  
  
</beans>


让我们看看这里都包含了什么内宏VWeb Services的定义包含在<service>元素中,它还含有一些子元素。第一个子元素?lt;name>Q它可以是你提供M的合法名字。这会被客LE序和其它需要定位你的服务的lg用到。例如,在服务准备好以后Q你在览器上使用q个名字来查看WSDL?br />
下一个子元素?lt;namespace>。Q何合法的XML名字都是可以的?lt;namespace>用来唯一标识你的服务的各个参数?br /><serviceClass>元素包含了Javacȝ名字Q它指定了方法签名。在我们的例子中Q它是接口IBankingService。如果JavacL有实CQ何接口,你就需要把cȝ名字攑֜q里。在你的JavacL者接口中可能有几个方法。只需要一个入口把它们全部发布为Web Services?br />
<implementationClass>保存了实现方法的Javacd。这是一个可选元素。如果上一个元?lt;serviceClass>包含了一个接口,那么相应的实现类必须在这里指定?br />
是q样。我们的Web Services配置完成了?br />
XFire和其它类?/span>

现在是最后一步了Q需要得到所有必需的类库。我们怎样得到它们呢?去XFire|站Q下载xfire-distribution-1.0.zipQ然后解压到一个本地文件夹。复制下面的jar文g和它的库文g夹到WEB-INF/lib中:
•        activation-1.0.2.jar
•        commons-codec-1.3.jar
•        commons-httpclient-3.0.jar
•        commons-logging-1.0.4.jar
•        jaxen-1.1-beta-8.jar
•        jdom-1.0.jar
•        log4j-1.2.x.jar
•        mail-1.3.3_01.jar
•        spring-1.2.x.jar
•        stax-api-1.0.jar
•        wsdl4j-1.5.2.jar
•        wstx-asl-2.9.jar
•        xbean-2.1.0.jar
•        xbean-spring-2.2.jar
•        xfire-all-1.0.jar
•        XmlSchema-1.0.jar

一切妥当。我们来部v和启动应用程序。ؓ了部|示例应用,只需要复制websvc.war到Apache Tomcat的webapps文g夹中Q再{待几秒钟。它会自动启动。这个应用的全部源代码也包含在这个war文g中。我们的E序已经准备作ؓ一个Web Service了?br />
我们如何知道Web Service正在工作呢?

Z了解Web Service是否正在工作Q我们需要测试。首先,我们试来看WSDL是否可用。我们在览器中输入URL。哪个URLQ因为我们的应用E序的war文g是websvc.warQƈ且在services.xml中给出的服务名是BankingQWSDL的URL应该是:http://localhost:8080/websvc/services/Banking?wsdl?br />
h意:URL的第一部分Q例如,http://localhost:8080Q可能会Ҏ你的应用服务器不同而不同。无论怎样Q当你输入URL后,会看到一个XML文档Q它的根元素?lt;wsdl:definitions>。这个文档叫做服务的WSDL。如果你看到了,q就是你的应用作为Web Service已经可用的第一个证明?br />
但是q个试是不够的。可能会发生q种情况Q可以看到WSDLQ但是从客户端程序可能会讉K不到服务。因此ؓ了核实服务是否可以访问了Q我们必M用一个客Lq行服务的实际调用来q行一个真正的试?br />
开发一个客L

你可以用Q何的SOAP工具创徏客户端,例如Q?Net或者Apache AxisQ有很多U方法:使用从WSDL产生的stubsQ用动态代理,{等。在例子中,我们使用一个动态代理,以一个简单的Servlet形式Q叫做WsClient.java。ؓ了保持代码两最,所有在屏幕昄的元素都攑֜了doGet()Ҏ中。对Web Service的实际调用由callWebService()Ҏ完成Q它相当地简单。和下面的类|
/* Call the Web service
    *
    */
    public String callWebService(
        String fromAccount, String toAccount, double amount, String currency)
        throws MalformedURLException, Exception {
        
        //Create a metadata of the service      
        Service serviceModel = new ObjectServiceFactory().create(IBankingService.class);        
        log.debug("callSoapServiceLocal(): got service model." );
  
        //Create a proxy for the deployed service
        XFire xfire = XFireFactory.newInstance().getXFire();
        XFireProxyFactory factory = new XFireProxyFactory(xfire);      
    
        String serviceUrl = "http://localhost:8080/websvc/services/Banking";
        
        IBankingService client = null;
        try {
            client = (IBankingService) factory.create(serviceModel, serviceUrl);
        } catch (MalformedURLException e) {
            log.error("WsClient.callWebService(): EXCEPTION: " + e.toString());
        }    
              
        //Invoke the service
        String serviceResponse = "";
        try {
            serviceResponse = client.transferFunds(fromAccount, toAccount, amount, currency);
       } catch (Exception e){
            log.error("WsClient.callWebService(): EXCEPTION: " + e.toString());                
            serviceResponse = e.toString();
        }        
        log.debug("WsClient.callWebService(): status=" + serviceResponse);              

        //Return the response
        return serviceResponse;
    }  


q个代码是如何工作的呢?我来解释一下:首先Q我们创Z个服务模型,它包含服务的说明——换句话_是服务的元数据。我们用XFire的ObjectServiceFactory从IBankingService.class接口创徏q个模型?br />
接着QؓXFire获得一个代理工厂对象,它包含了常规的代码,也相当地单和易懂。这一步中没有M特定应用的东ѝ从q个proxyFactoryQ用服务模型和服务端点URLQ用来获得WSDLQ,我们可以得到一个服务的本地代理?br />
是它了。这个代理就是实际的客户端。现在,我们可以调用它的transferFunds()Ҏ来得到我们需要的Web Service?br />一旦示例应用发布ƈ启动Q就可以试servlet URLQ?br />http://localhost:8080/websvc/ws?br />
q个Servlet使用默认参数来调用Web Service和显C接收到的响应。页面的最后两行应该读取:
Response Received
COMPLETED: CDN$ 500.00 was successfully transferred from A/C# 11111-01234 to A/C# 99999-05678

现在你可以确定Web Service已经发布q且在运行中了?br />
Z试不同的输入|你可以用完整的URLQ例如:
http://localhost:8080/websvc/ws?from=11-2345&to=77-9876&amt=250.00&cur=EUR?br />
基本的Web Services开发步骤清?/span>

q个清单ȝ了将一个JavaҎ发布为Web Service所必须的步骤:
1、        检查JavacȝҎ和默认构造函数确保ؓpublic
2、        增加XFire servlet相关条目到web.xml?br />3、        创建services.xmlQ把它放到WEB-INF/classes/META-INF/xfire目录?br />4、        增加XFire和第三方包到你的Web应用的WEB-INF/lib文g夹中

q就是所有需要的步骤Q是的,相当单?br />
XFire的其他高U特?/span>

XFire的用可能比较简单,但是在特性和功能性上Q它却占据着领导者的位置。下面是它的高Ҏ:
---本地数据l定支持POJOsQplain-old Java objectsQ、XMLBeans、JAXBQJava Architecture for XML BindingQ、Castor{等。数据绑定说明了Web Services的XMLh和映到Java对象的XML响应?br />---使用StAXQStreaming API for XMLQ处理XML文档。同DOM的基于树和SAX的事仉动的处理方式相比QStAX使用了拉QpullQ机Ӟ它处理更快速,内存效率更高?br />---支持多种传输协议Q如HTTP、JMSQJava Message ServiceQ和JVM内部传输?br />---嵌入式,q是XFire的核心功能之一。你可以把这个SOAP引擎嵌入C的应用中Q完全隐藏所有XFire特定引用Q同h有配|都是程序驱动?br />---丰富的APIQ它使XFire可高度自定义Q允许开发者在不同的阶D|莯求,q且对他们进行处理?br />---兼容最新的标准例如SOAP1.1Q没有加密远E工E调用,或者RPCQ和1.2、WSDL1.1、the Web Services Interoperability Organization’s Basic Profile 1.0、Web Services Addressing和WS-Security?br />
最重要的是QXFire属于C代Web Services引擎。不仅仅是营销用语Q“新一代”有一些重要的意义。Apache Axis是第一代Java语言的Web Services引擎Q已l成Z所有后来工L参考标准。在q去的几q里QAxis以及q些其它的工具已l在很多生环境中进行了实地试。从中得出的一个关键的问题是Web Servicesq不最适合RPCcd的通信。对于性能和效率,面向文档的消息Ş式是最好的方式。但是Apache Axis和很多其他的Web Services引擎都被设计成了面向RPC的(管它们支持文档形式Q。现在,整个行业正在开发新一代的SOAP引擎Q设计ؓ面向文档的。Apache已经宣布l束旧版本的Axis引擎开发,现在专注于Axis2Q现在它的预发布版本?.95。XFire在今q的2月䆾发布了它的第一个品版本(1.0Q。它的下一个版本(1.1Q仅仅在几个星期之后p行了发布?br />
性能

Web Services需要消耗很多资源,但是性能斚w它们不是那么引h注目。XFire打破了这U趋ѝ它消耗更的内存Q部分因?StAX的用)Q但是表现却比多数可比较的SOAP引擎。你可以在资源中提供的链接中看到比较的结果?br />此外QXFireq提供了各种Ҏ来进一步优化性能。一个方法是使用JVM内置传输Qin-JVM transportQ。如果你知道Web Services和客Lq行在同一个JVM上,你可以选择使用本地传输Q它可以大幅提升性能。在CZ中的客户端代码,看以下指定服务端点URL的这行:
String serviceUrl = "http://localhost:8080/websvc/services/Banking";
替换?br />String serviceUrl = "xfire.local://Banking";

你会看到性能上的明显提高Q因为它l过了整个网l层?br />
局限?/span>

XFire有些重要的局限性你应该清楚Q?br />---开发Web Services的好的实跉|从WSDL开始。大部分的SOAP引擎提供了从WSDL生成服务stub的工兗XFire也提供了q样一个工兗但是它是基于注释(annotations-basedQ的Q因此需要J2SE5.0。对于仍坚持使用J2SE1.4.x的h来说Q它不是一个o人拍手叫好的工具Q因为我们有很多其他方式来编写客LQ一个就是文章中演示的方式?br />---附g支持Q它会包含在未来发行的版本中?br />---易于学习的用户向对{XFire团队在这个方面还有很多工作需要做?br />
l论

Java当前的趋势是化技术的使用。因此,我们正看C波基于POJO的开发成。同Ӟ面向服务架构QSOAQServices-oriented architectureQ和Web Services已经变成了当前行业的热点话题。XFire正是在这U情况下产生的。它能够使POJO发布为最的Web ServicesQ而只需要付出最化的努力。从而,它希望使用q项技术的初开发者的学习曲线变得q缓。同Ӟ׃它兼Ҏ新标准和提供了丰富的APIQXFire为高U用h供了更多的大好机会?br />
关于作?/b>
Shahid Ahmed是一个Y件架构师Q如今在国一家主要的无线q行商作咨询工作。他?2q前开始开发YӞ当时Kaypro、Osborne、Apple II和TRS-80sl治着整个地球。在q去?q里Q他更多的精力集中于Java。他现在的工作包括SOA、Web Services、消息、POJO、Spring、Ajax{等。Shahid是一个Y件热衯,每天都在奋斗以求在技术的qh和社会生zȝ热爱之间Lq炏V?br />
资源Q?/b>
Matrix JavaC֌:http://www.matrix.org.cn
下蝲本文中的CZ应用Q?a target="_new">http://www.javaworld.com/javaworld/jw-05-2006/xfire/jw-0501-xfire.zip
Web Services架构:http://www.w3.org/TR/ws-arch/
WSDL2.0Q原来提议ؓWSDL1.2Q现在重新命名了Q:W一部分Q核心语aQW3C Candidate Recommendation 27 March 2006Q?br />


xzc0202 2006-10-08 15:40 发表评论
]]>
jsp + mysql 的分늨?/title><link>http://www.tkk7.com/xzc0202/archive/2006/10/08/73836.html</link><dc:creator>xzc0202</dc:creator><author>xzc0202</author><pubDate>Sun, 08 Oct 2006 07:22:00 GMT</pubDate><guid>http://www.tkk7.com/xzc0202/archive/2006/10/08/73836.html</guid><wfw:comment>http://www.tkk7.com/xzc0202/comments/73836.html</wfw:comment><comments>http://www.tkk7.com/xzc0202/archive/2006/10/08/73836.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/xzc0202/comments/commentRss/73836.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/xzc0202/services/trackbacks/73836.html</trackback:ping><description><![CDATA[<%@ page contentType="text/html; charset=gb2312" %><br /><%@ page language="java" %><br /><%@ page import="com.mysql.jdbc.Driver" %><br /><%@ page import="java.sql.*" %> <p><% <br /> Connection sqlCon; //数据库连接对?</p><p> Statement sqlStmt; //SQL语句对象 </p><p> ResultSet sqlRst; //l果集对?</p><p> String strCon; //数据库连接字W串 </p><p> String strSQL; //SQL语句 </p><p> int intPageSize; //一|C的记录?</p><p> int intRowCount; //记录L </p><p> int intPageCount; //总页?</p><p> int intPage; //待显C页?</p><p> String strPage; </p><p> int i; </p><p> intPageSize = 2; //讄一|C的记录?</p><p> strPage = request.getParameter("page"); //取得待显C页?</p><p> if(strPage==null)<br /> { </p><p>  //表明在QueryString中没有pageq一个参敎ͼ此时昄W一|?</p><p>  intPage = 1; </p><p> }<br /> else<br /> { </p><p>  //字W串转换成整?</p><p>  intPage = java.lang.Integer.parseInt(strPage); </p><p>  if(intPage<1) intPage = 1; </p><p> } </p><p> //装蝲JDBC驱动E序 </p><p>   //驱动E序?/p><p>   String driverName="com.mysql.jdbc.Driver";</p><p>   //数据库用户名</p><p>   String userName="test";</p><p>   //密码</p><p>   String userPasswd="123456";</p><p>   //数据库名<br /> <br />   String dbName="shujuku";</p><p>   //表名</p><p>   String tableName="biao";</p><p>   //联结字符?/p><p>   String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd;</p><p>   Class.forName("com.mysql.jdbc.Driver").newInstance();</p><p>   sqlCon=DriverManager.getConnection(url);</p><p>   //创徏语句对象 <br /> <br /> sqlStmt = sqlCon.createStatement(); //执行SQL语句 </p><p>    strSQL = "select name from " + tableName; </p><p>    //执行SQL语句q获取结果集 </p><p>    sqlRst = sqlStmt.executeQuery(strSQL); </p><p>    //获取记录L </p><p> sqlRst.last(); </p><p> intRowCount = sqlRst.getRow(); </p><p> //记算总页?</p><p> intPageCount = (intRowCount+intPageSize-1) / intPageSize; </p><p> //调整待显C的늠 </p><p> if(intPage>intPageCount) intPage = intPageCount; </p><p>%> </p><p><html> </p><p><head> </p><p><meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </p><p><title>JSP数据库操作例E?- 数据分页昄 - JDBC 2.0 - mysql</title> </p><p></head> </p><p><body> </p><p><table border="1" cellspacing="0" cellpadding="0"> </p><p><tr> </p><p><th>姓名</th> </p><p></tr> </p><p><% if(intPageCount>0) </p><p>{ </p><p> //记录指针定位到待显C页的第一条记录上 </p><p> sqlRst.absolute((intPage-1) * intPageSize + 1); </p><p> //昄数据 </p><p> i = 0; </p><p> while(i<intPageSize && !sqlRst.isAfterLast()){ %> </p><p><tr> </p><p><td> </p><p><%=sqlRst.getString(1)%> </p><p></td> </p><p></tr> </p><p><% sqlRst.next(); </p><p>i++; </p><p>} </p><p>} </p><p>%> </p><p></table> </p><p>W?lt;%=intPage%>??lt;%=intPageCount%>?</p><p><%if(intPage<intPageCount){%><a href="test1.jsp?page=<%=intPage+1%>">下一?lt;/a><%}%> </p><p><%if(intPage>1){%><a href="test1.jsp?page=<%=intPage-1%>">上一?lt;/a><%}%> </p><p></body> </p><p></html> </p><p><% </p><p>//关闭l果?</p><p>sqlRst.close(); </p><p>//关闭SQL语句对象 </p><p>sqlStmt.close(); </p><p>//关闭数据?</p><p>sqlCon.close(); </p><p>%> <br /> <br /> <br /> </p><img src ="http://www.tkk7.com/xzc0202/aggbug/73836.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/xzc0202/" target="_blank">xzc0202</a> 2006-10-08 15:22 <a href="http://www.tkk7.com/xzc0202/archive/2006/10/08/73836.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://51jingpai.com" target="_blank">˳ëƬ߲</a>| <a href="http://sdhuamo.com" target="_blank">Ʒ99þѹۿ</a>| <a href="http://79909d.com" target="_blank">޾ƷŮƵ</a>| <a href="http://by6174.com" target="_blank">޹ƷۺϾþһ</a>| <a href="http://977446.com" target="_blank">һѹۿƵİ</a>| <a href="http://lyaa60.com" target="_blank">ƷۺרĻѲ</a>| <a href="http://xjdz8.com" target="_blank">һվ </a>| <a href="http://520xiang.com" target="_blank">վɫƬѸ</a>| <a href="http://kimnote.com" target="_blank">޹Ůֱһ</a>| <a href="http://jogador1.com" target="_blank">AVרAWWW </a>| <a href="http://webgame86.com" target="_blank">Ůվѹۿ</a>| <a href="http://www-yhty.com" target="_blank">˳վ߹ۿ</a>| <a href="http://34pmpm.com" target="_blank">AV鶹Խ</a>| <a href="http://mt181.com" target="_blank">Ƶ</a>| <a href="http://477077.com" target="_blank">ձѸһƵ</a>| <a href="http://666mou.com" target="_blank">ӰԺֻ߹ۿ </a>| <a href="http://13813855.com" target="_blank">ɫר߹ۿ</a>| <a href="http://shlamore.com" target="_blank">AҹƬƷվ</a>| <a href="http://wwwhaole10.com" target="_blank">Կ60Ƶ</a>| <a href="http://51nianyefan.com" target="_blank">һaëһa˽</a>| <a href="http://caoporg.com" target="_blank">ҹƵ</a>| <a href="http://zzjiji.com" target="_blank">˳߹ۿ</a>| <a href="http://wwwy66y6.com" target="_blank">ۺɫ</a>| <a href="http://dw168cn.com" target="_blank">޾ƷþþþAƬԾ</a>| <a href="http://by7258.com" target="_blank">xxxë׵</a>| <a href="http://maomi02.com" target="_blank">˾þô߽</a>| <a href="http://0595laser.com" target="_blank">츾avһ</a>| <a href="http://ystchem.com" target="_blank">츾밮v߹ۿ</a>| <a href="http://4husese.com" target="_blank">ŷղ߹ۿ</a>| <a href="http://www9k832.com" target="_blank">޾ƷƬ</a>| <a href="http://www62hth.com" target="_blank">ɫվwww</a>| <a href="http://cc006.com" target="_blank">޸Ƶһ</a>| <a href="http://88ww99.com" target="_blank">޾ƷߵӰ</a>| <a href="http://www-7607.com" target="_blank">޹ۺ</a>| <a href="http://webgame86.com" target="_blank">avɫ</a>| <a href="http://dd99com.com" target="_blank">Ʒ鶹123</a>| <a href="http://huakangweicai.com" target="_blank">޸Ƶ</a>| <a href="http://juytv.com" target="_blank">˳7777</a>| <a href="http://xzdlgp.com" target="_blank">þav޾Ʒɫҹ</a>| <a href="http://www759696b.com" target="_blank">ѿŮҹƬ</a>| <a href="http://tao-zhe.com" target="_blank">һһƬƵ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>