??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩久久在线,国产精品蜜臀,波多野结衣av在线播放http://www.aygfsteel.com/ducklyl/category/26693.html用心(j)׃Q努力工作?/description>zh-cnWed, 21 Nov 2007 12:00:18 GMTWed, 21 Nov 2007 12:00:18 GMT60Zspring+ibatis的架? 2007-11-20http://www.aygfsteel.com/ducklyl/archive/2007/11/20/161938.htmlducklylducklylTue, 20 Nov 2007 13:30:00 GMThttp://www.aygfsteel.com/ducklyl/archive/2007/11/20/161938.htmlhttp://www.aygfsteel.com/ducklyl/comments/161938.htmlhttp://www.aygfsteel.com/ducklyl/archive/2007/11/20/161938.html#Feedback0http://www.aygfsteel.com/ducklyl/comments/commentRss/161938.htmlhttp://www.aygfsteel.com/ducklyl/services/trackbacks/161938.htmlZspring+ibatis的架?/span>

有一D|间没有来更新文章?/span>,呵呵,最q在研究pȝ的架?/span>,Z一期系l做前期准备.准备采用spring+ibatis+JSF的架?/span>.我个人目前只?jin)?/span>spring+ibatisq两?/span>,因此q里也只讨论关于q两层的l合.
下图为工E目?/span>:



(1)首先?/span>spring的配|文?/span>: applicationContext.xml

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEbeansPUBLIC"-//SPRING//DTD BEAN 2.0//EN""http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>

    <beanid="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

       <propertyname="locations">

           <list>

              <value>com/conf/jdbc.properties</value><!?/span>数据库配|?/span>-->

           </list>

       </property>

    </bean>

    <beanid="dataSource"class="org.springframework.jndi.JndiObjectFactoryBean">

       <propertyname="jndiName"value="${dataSource}"/>

    </bean>   

    <beanid="sqlMapClient"class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">

       <propertyname="configLocation"value="com/ibatis/sql-map-config.xml"/>

    </bean>

    <beanid="sqlMapDAO"class="com.doone.database.SqlMapClientDAO">

       <propertyname="dataSource"ref="dataSource"/>

       <propertyname="sqlMapClient"ref="sqlMapClient"/>

    </bean>

    <beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

       <propertyname="dataSource"ref="dataSource"/>

    </bean>

</beans>

(2) jdbc.properties配置文g(配置数据?/span>dataSource)

dataSource=test

(3) IbatisDAO接口

package com.doone.database;

import java.util.HashMap;

import java.util.List;

publicinterface IbatisDAO {

     /**

       *查询数据库{换成List

       *@paramsqlMapIdString

       *@returnList

       */

     public List ibatisQueryForList(String sqlMapId, Object parameter);

     public List ibatisQueryForList(String sqlMapId);

     //cM在这里实现删?/span>,更新的方?/span>.

}

(4) SqlMapClientDAOc?/span>

package com.doone.database;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Vector;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

public class SqlMapClientDAO extends SqlMapClientDaoSupport implements IbatisDAO{

        /**

          * 查询数据库{换成List

          * @param sqlMapId String

          * @param parameter Object

          * @return List

          */

        public List ibatisQueryForList(String sqlMapId, Object parameter) {

           List list = null;

           try {

                  list = (List) getSqlMapClientTemplate().queryForList(sqlMapId, parameter);

           }

           catch (Exception er) {

             //log4j.log4jInfo("Ibatis操作出错,原因:", er.getMessage());

           }

           if (list == null)

             list = new ArrayList();

           return list;

        }

        /**

          * 查询数据库{换成List

          * @param sqlMapId String

          * @return List

          */

        public List ibatisQueryForList(String sqlMapId) {

           return ibatisQueryForList(sqlMapId, null);

        }

}

(5)sql-map-config.xml配置文g

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEsqlMapConfigPUBLIC"-//iBATIS.com//DTD SQL Map Config 2.0//EN"

    "http://www.ibatis.com/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

    <sqlMapresource="com/ibatis/Account.xml"/>

</sqlMapConfig>

(5) Account.xml配置文g

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEsqlMapPUBLIC"-//iBATIS.com//DTD SQL Map 2.0//EN""http://www.ibatis.com/dtd/sql-map-2.dtd">

<sqlMapnamespace="Account">

 <selectid="getList"parameterClass="java.util.HashMap"resultClass="java.util.HashMap">

    select username as value from signon

 </select>

</sqlMap>

Signon为数据库的一张表

(6)试c?/span>Main.java

package com.main;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.doone.database.IbatisDAO;

import java.util.*;

public class Main {

       private ApplicationContext context;

       public void run()

       {

              System.out.println("初始化环?/span>.....");

              context=new ClassPathXmlApplicationContext("com/conf/applicationContext.xml");

              System.out.println("获取 sqlMapDAO.....");

              IbatisDAO sqlMapDAO=(IbatisDAO)context.getBean("sqlMapDAO");

              list=sqlMapDAO.ibatisQueryForList("getList");

              System.out.println("查询l果?"+list);

       }

       public static void main(String[] args)

       {

              new Main().run();

       }

}



ducklyl 2007-11-20 21:30 发表评论
]]>
Spring学习(fn)W记 2007-10-31http://www.aygfsteel.com/ducklyl/archive/2007/10/31/157279.htmlducklylducklylWed, 31 Oct 2007 11:14:00 GMThttp://www.aygfsteel.com/ducklyl/archive/2007/10/31/157279.htmlhttp://www.aygfsteel.com/ducklyl/comments/157279.htmlhttp://www.aygfsteel.com/ducklyl/archive/2007/10/31/157279.html#Feedback0http://www.aygfsteel.com/ducklyl/comments/commentRss/157279.htmlhttp://www.aygfsteel.com/ducklyl/services/trackbacks/157279.html呵呵Q这两天目比较急,事情也比较多Q所以没有及(qing)时更新?br /> 上一回简单介l了(jin)代理机制Q通过创徏LogBeforeAdvice来实现。通过实现MethodBeforeAdvice接口Q会(x)在目标对象的Ҏ(gu)执行之前被呼叫。当然也可以通过实现AfterReturningAdviceQ得目标对象的Ҏ(gu)在执行之后被调用?br /> 同样创徏LogAfterAdvicec,实现AfterReturningAdvice接口?br />
(1)LogAfterAdvice.java

package com.proxy;

import java.lang.reflect.*;
import java.util.logging.Logger;
import java.util.logging.Level;
import org.springframework.aop.AfterReturningAdvice;

public class LogAfterAdvice  implements AfterReturningAdvice{

 private Logger logger=Logger.getLogger(this.getClass().getName());
 public void afterReturning(Object object,Method method,Object[] args,Object target) throws Throwable
 {
  logger.log(Level.INFO,"LogAfterAdvice mehtod ends "+method);
 }

}
(2)advice-config.xml修改如下Q?/p>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
 <bean id="logBeforeAdvice" class="com.proxy.LogBeforeAdvice" />
    <bean id="logAfterAdvice" class="com.proxy.LogAfterAdvice" />
 <bean id="helloSpeaker" class="com.proxy.HelloSpeaker" />
 
 <bean id="helloProxy"
  class="org.springframework.aop.framework.ProxyFactoryBean"><!--建立代理对象-->
  <property name="proxyInterfaces"><!--代理接口-->
   <value>com.proxy.IHello</value>
  </property>
  <property name="target"><!--代理目标-->
   <ref bean="helloSpeaker"/>
  </property>
  <property name="interceptorNames"><!--代理实现c?->
   <list>
    <value>logBeforeAdvice</value>
    <value>logAfterAdvice</value>
   </list>
  </property>
 </bean>
 
</beans>

q样实C(jin)目标对象的方法在执行之后被调用?br />

同样Q在Ҏ(gu)执行前后调用目标对象的方法也可以不通过上面的这U方?毕竟实现两个接口比较ȝ(ch))Q可以直接通过实现MethodInterceptor接口Q达到目的?br /> 如LogInterceptorcM实现?jin)这L(fng)接口Q如?br /> (3)LogInterceptor.java

package com.proxy;

import java.util.logging.Logger;
import java.util.logging.Level;
import org.aopalliance.intercept.*;

public class LogInterceptor  implements MethodInterceptor{

 private Logger logger=Logger.getLogger(this.getClass().getName());

 public Object invoke(MethodInvocation Invocation) throws Throwable {
  
  logger.log(Level.INFO,"LogInterceptor method starts..."+Invocation.getMethod());
  
  Object result=null;
  
  try
  {
   result=Invocation.proceed();
  }
  finally
  {
   logger.log(Level.INFO,"LogInterceptor method ends..."+Invocation.getMethod());
  }
  return result;
 }

}

(4)advice-config.xml 配置文g修改如下Q?/p>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
 <bean id="logInterceptor" class="com.proxy.LogInterceptor" />
 <bean id="helloSpeaker" class="com.proxy.HelloSpeaker" />
 
 <bean id="helloProxy"
  class="org.springframework.aop.framework.ProxyFactoryBean"><!--建立代理对象-->
  <property name="proxyInterfaces"><!--代理接口-->
   <value>com.proxy.IHello</value>
  </property>
  <property name="target"><!--代理目标-->
   <ref bean="helloSpeaker"/>
  </property>
  <property name="interceptorNames"><!--代理实现c?->
   <list>
    <value>logInterceptor</value>
   </list>
  </property>
 </bean>
 
</beans>

通过实现MethodInterceptor接口Q同样实C(jin)q样的功能?/p>



 



ducklyl 2007-10-31 19:14 发表评论
]]>
Spring学习(fn)W记 2007-10-28 Spring实现代理机制http://www.aygfsteel.com/ducklyl/archive/2007/10/28/156500.htmlducklylducklylSun, 28 Oct 2007 09:47:00 GMThttp://www.aygfsteel.com/ducklyl/archive/2007/10/28/156500.htmlhttp://www.aygfsteel.com/ducklyl/comments/156500.htmlhttp://www.aygfsteel.com/ducklyl/archive/2007/10/28/156500.html#Feedback0http://www.aygfsteel.com/ducklyl/comments/commentRss/156500.htmlhttp://www.aygfsteel.com/ducklyl/services/trackbacks/156500.html 通过一个例子来说明?br /> 包下载地址(两个都要?Q?br /> http://www.aygfsteel.com/Files/ducklyl/springaop.rar
http://www.aygfsteel.com/Files/ducklyl/Spring.rar

(1)创徏LogBeforeAdvicec?实现MethodBeforeAdvice接口Q会(x)在目标对象的Ҏ(gu)执行之前被呼?

package com.proxy;

import java.lang.reflect.*;
import java.util.logging.Logger;
import java.util.logging.Level;
import org.springframework.aop.MethodBeforeAdvice;;

public class LogBeforeAdvice  implements MethodBeforeAdvice{

 private Logger logger=Logger.getLogger(this.getClass().getName());
 public void before(Method method,Object[] args,Object target) throws Throwable
 {
  logger.log(Level.INFO,"mehtod starts "+method);
 }
}


(2)创徏配置文gadvice-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
 <bean id="logBeforeAdvice" class="com.proxy.LogBeforeAdvice" />
 <bean id="helloSpeaker" class="com.proxy.HelloSpeaker" />
 
 <bean id="helloProxy"
  class="org.springframework.aop.framework.ProxyFactoryBean"><!--建立代理对象-->
  <property name="proxyInterfaces"><!--代理接口-->
   <value>com.proxy.IHello</value>
  </property>
  <property name="target"><!--代理目标-->
   <ref bean="helloSpeaker" />
  </property>
  <property name="interceptorNames"><!--代理实现c?->
   <list>
    <value>logBeforeAdvice</value>
   </list>
  </property>
 </bean>
 
</beans>
(3)试cSpringAOPDemo

package com.proxy;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class SpringAOPDemo {
 public static void main(String[] args)
 {
  //d配置文g
  ApplicationContext context=new FileSystemXmlApplicationContext("advice-config.xml");
  IHello helloProxy=(IHello)context.getBean("helloProxy");
  helloProxy.hello("ducklyl");
  
 }
}

q行试c,l果如下Q?br /> Hello,ducklyl



ducklyl 2007-10-28 17:47 发表评论
]]>
Spring学习(fn)W记 2007-10-28 代理机制http://www.aygfsteel.com/ducklyl/archive/2007/10/28/156452.htmlducklylducklylSun, 28 Oct 2007 03:00:00 GMThttp://www.aygfsteel.com/ducklyl/archive/2007/10/28/156452.htmlhttp://www.aygfsteel.com/ducklyl/comments/156452.htmlhttp://www.aygfsteel.com/ducklyl/archive/2007/10/28/156452.html#Feedback0http://www.aygfsteel.com/ducklyl/comments/commentRss/156452.htmlhttp://www.aygfsteel.com/ducklyl/services/trackbacks/156452.html 通过一个例子来?jin)解静(rn)态代理?br /> (1)一个简单的接口IHello

package com.proxy;
/**
 * 接口
 *
 * **/
public interface IHello {
 public void hello(String name);

}
(2)实现cHelloSpeaker

package com.proxy;

public class HelloSpeaker implements IHello{

 public void hello(String name) {
  System.out.println("Hello,"+name);
  
 }

}
(3)代理cHelloProxy

package com.proxy;
import java.util.logging.*;
/**
 * ?rn)态代理类,代理真正的实现类HelloSpeaker来执?br />  *
 * */
public class HelloProxy implements IHello{

 private Logger logger=Logger.getLogger(this.getClass().getName());
 
 private IHello helloObject;//接口声明

 //构造函?br />  public HelloProxy(IHello helloObject)
 {
  this.helloObject=helloObject;
 }
 //接口实现Ҏ(gu)
 public void hello(String name)
 {
  log("hello methods starts...");
  helloObject.hello(name);
  log("hello methods ends...");
 }
 private void log(String msg)
 {
  logger.log(Level.INFO,msg);
 }

}

(4)试cProxyDemo

package com.proxy;

public class ProxyDemo {
 public static void main(String[] args)
 {
  //?rn)态代理模?br />   HelloProxy proxy=new HelloProxy(new HelloSpeaker());
  proxy.hello("ducklyl");
 }

}
q行试c,l果为:(x)
Hello,ducklyl
2007-10-28 10:52:26 com.proxy.HelloProxy log
信息: hello methods starts...
2007-10-28 10:52:27 com.proxy.HelloProxy log
信息: hello methods ends...



接下来介l动态代?br /> (1)创徏动态代理类LogHandler

package com.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.logging.*;
/**
 *
 * 动态代理类
 * **/

public class LogHandler implements InvocationHandler {

 private Logger logger = Logger.getLogger(this.getClass().getName());

 private Object delegate;

 public LogHandler()
 {
 }
 
 public Object bind(Object delegate) {
  this.delegate = delegate;
  log("bind starts...");
  return Proxy.newProxyInstance(delegate.getClass().getClassLoader(),
    delegate.getClass().getInterfaces(), this);
 }

 public Object invoke(Object proxy, Method method, Object[] args)
   throws Throwable {
  Object result = null;
  try {
   log("method starts..." + method);
   result = method.invoke(delegate, args);
   log("method ends..." + method);
  } catch (Exception e) {
   log(e.toString());
  }
  return null;
 }

 private void log(String msg) {
  logger.log(Level.INFO, msg);
 }

}
(2)创徏试cProxyTest

package com.proxy;

public class ProxyTest {
 public static void main(String[] args)
 {
  LogHandler logHandler=new LogHandler();
  //logHandler代理HelloSpeaker实例Q调用hello
  IHello helloProxy=(IHello)logHandler.bind(new HelloSpeaker());
  helloProxy.hello("ducklyl");
 }

}

q行试c,l果为:(x)
Hello,ducklyl
2007-10-28 11:24:59 com.proxy.LogHandler log
信息: bind starts...
2007-10-28 11:24:59 com.proxy.LogHandler log
信息: method starts...public abstract void com.proxy.IHello.hello(java.lang.String)
2007-10-28 11:24:59 com.proxy.LogHandler log
信息: method ends...public abstract void com.proxy.IHello.hello(java.lang.String)




ducklyl 2007-10-28 11:00 发表评论
]]>
Spring学习(fn)W记 2007-10-25http://www.aygfsteel.com/ducklyl/archive/2007/10/25/155937.htmlducklylducklylThu, 25 Oct 2007 11:28:00 GMThttp://www.aygfsteel.com/ducklyl/archive/2007/10/25/155937.htmlhttp://www.aygfsteel.com/ducklyl/comments/155937.htmlhttp://www.aygfsteel.com/ducklyl/archive/2007/10/25/155937.html#Feedback1http://www.aygfsteel.com/ducklyl/comments/commentRss/155937.htmlhttp://www.aygfsteel.com/ducklyl/services/trackbacks/155937.html 通过一个例子来说明?br /> 导入Spring所需的包Qcommons-logging.jarQspring.jar ?日志包和Spring?
包下载地址Q?br /> http://www.aygfsteel.com/Files/ducklyl/Spring.rar

(1)创徏resource-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
 <property name="basename">
    <value>duck</value> <!-- 资源文g名前~ -->
 </property>
</bean>

</beans>
(2)创徏资源文gduck_en_US.properties,duck_zh_CN.properties两个文g
duck_en_US.properties内容为:(x)
ducklyl=User {0} login at {1}

duck_zh_CN.properties内容(l过JDK工具native2ascii)~码转换?
ducklyl=\u7528\u6237 {0} \u4e8e {1} \u767b\u9646

(3)创徏试c?/p>

package com.resource;

import java.util.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;


public class SpringTest {
 public static void main(String[] args)
 {
 //d配置文g
 ApplicationContext context=new FileSystemXmlApplicationContext("src/com/resource/resource-config.xml");
 
 //传入两个参数,替换资源文g{0},{1}
 String[] para=new String[]{"王生?,Calendar.getInstance().getTime().toString()};
 
 System.out.println(context.getMessage("ducklyl", para,Locale.US));
 System.out.println(context.getMessage("ducklyl", para,Locale.CHINA));
 
}
}

如果以上配置正确Q运行结果ؓ(f)Q?br />
User 王生?login at Thu Oct 25 19:15:59 CST 2007
用户 王生??Thu Oct 25 19:15:59 CST 2007 登陆



ducklyl 2007-10-25 19:28 发表评论
]]>
Spring学习(fn)W记 2007-10-24http://www.aygfsteel.com/ducklyl/archive/2007/10/24/155660.htmlducklylducklylWed, 24 Oct 2007 11:32:00 GMThttp://www.aygfsteel.com/ducklyl/archive/2007/10/24/155660.htmlhttp://www.aygfsteel.com/ducklyl/comments/155660.htmlhttp://www.aygfsteel.com/ducklyl/archive/2007/10/24/155660.html#Feedback1http://www.aygfsteel.com/ducklyl/comments/commentRss/155660.htmlhttp://www.aygfsteel.com/ducklyl/services/trackbacks/155660.html 通过一个简单的例子来说明?br /> 导入Spring所需的包Qcommons-logging.jarQspring.jar ?日志包和Spring?
包下载地址Q?br /> http://www.aygfsteel.com/Files/ducklyl/Spring.rar

(1)创徏User c?br />

package com.editor;

public class User {
 private String name;
 private int number;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getNumber() {
  return number;
 }
 public void setNumber(int number) {
  this.number = number;
 }

}

(2)创徏HelloBean c?br />

package com.editor;

public class HelloBean {
 private String helloWord;
 private User user;
 public String getHelloWord() {
  return helloWord;
 }
 public void setHelloWord(String helloWord) {
  this.helloWord = helloWord;
 }
 public User getUser() {
  return user;
 }
 public void setUser(User user) {
  this.user = user;
 }


}
(3)创徏UserEditor c?/p>

package com.editor;
import java.beans.PropertyEditorSupport;

public class UserEditor extends PropertyEditorSupport{
 public void setAsText(String text)
 {
  String[] strs=text.split(",");
  int number=Integer.parseInt(strs[1]);
  
  User user=new User();
  user.setName(strs[0]);
  user.setNumber(number);
  
  setValue(user);
 }

}


(4)在类路径下创建property-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
 <bean id="EditorConfigBean"
  class="org.springframework.beans.factory.config.CustomEditorConfigurer">
  <property name="customEditors"><!--CustomEditorConfigurercM(x)加蝲"customEditors"属性设定的map-->
   <map>
    <entry key="com.editor.User">
     <bean id="userEditor" class="com.editor.UserEditor" />
    </entry>
   </map>
  </property>
 </bean>

 <bean id="helloBean" class="com.editor.HelloBean">
  <property name="helloWord">
   <value>Hello!</value>
  </property>
  <property name="user">
   <value>ducklyl,123456</value>
  </property>
 </bean>

</beans>
(5)创徏试c?br />

package com.editor;

import org.springframework.context.*;
import org.springframework.context.support.*;


public class SpirngTest {
 public static void main(String[] args)
 {
  //d配置文g
  ApplicationContext context=new FileSystemXmlApplicationContext("property-config.xml");
  //获取id="helloBean"对象
  HelloBean hello=(HelloBean)context.getBean("helloBean");
  //调用helloBean对象getHelloWord()Ҏ(gu)
  System.out.println(hello.getHelloWord());
  System.out.println("Name:"+hello.getUser().getName());
  System.out.println("Number:"+hello.getUser().getNumber());
 }

}
如果以上正确讄Q运行结果ؓ(f)Q?br /> Hello!
Name:ducklyl
Number:123456



ducklyl 2007-10-24 19:32 发表评论
]]>
Spring学习(fn)W记 2007-10-22http://www.aygfsteel.com/ducklyl/archive/2007/10/22/155030.htmlducklylducklylMon, 22 Oct 2007 08:40:00 GMThttp://www.aygfsteel.com/ducklyl/archive/2007/10/22/155030.htmlhttp://www.aygfsteel.com/ducklyl/comments/155030.htmlhttp://www.aygfsteel.com/ducklyl/archive/2007/10/22/155030.html#Feedback3http://www.aygfsteel.com/ducklyl/comments/commentRss/155030.htmlhttp://www.aygfsteel.com/ducklyl/services/trackbacks/155030.html之前的例子比较简单,打算?jin)解一下Spring的基本用法。Spring的依赖注入有三种实现方式Q常用是setter和construct方式。对于像数组和集合对象注入,注入前必d充一些对象到集合中,然后再把集合注入到BeanQ采用setter方式来完成?br /> 通过一个例子来说明?br /> 导入Spring所需的包Qcommons-logging.jarQspring.jar ?日志包和Spring?
包下载地址Q?br /> http://www.aygfsteel.com/Files/ducklyl/Spring.rar

(1)创徏ObjectSetc?br /> package com.set;

public class ObjectSet {
 private String name;

 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String toString()
 {
  return name;
 }
}
(2)创徏SomeBeanc?br /> package com.set;

import java.util.List;
import java.util.Map;

public class SomeBean {
 private String[] someStrArray;
 private ObjectSet[] someObjArray;
 private List someList;
 private Map someMap;
 public SomeBean()
 {}
 public List getSomeList() {
  return someList;
 }
 public void setSomeList(List someList) {
  this.someList = someList;
 }
 public Map getSomeMap() {
  return someMap;
 }
 public void setSomeMap(Map someMap) {
  this.someMap = someMap;
 }
 public ObjectSet[] getSomeObjArray() {
  return someObjArray;
 }
 public void setSomeObjArray(ObjectSet[] someObjArray) {
  this.someObjArray = someObjArray;
 }
 public String[] getSomeStrArray() {
  return someStrArray;
 }
 public void setSomeStrArray(String[] someStrArray) {
  this.someStrArray = someStrArray;
 }
}
(3)在类路径下,创徏set-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="first_object" class="com.set.ObjectSet" >
 <property name="name">
    <value>ducklyl</value>
 </property>
</bean>
<bean id="second_object" class="com.set.ObjectSet" >
 <property name="name">
    <value>wangsp</value>
 </property>
</bean>

<bean id="someBean" class="com.set.SomeBean" >
 <property name="someStrArray">
    <list>
     <value>Hello</value>
     <value>Welcome</value>
    </list>
 </property>
 <property name="someObjArray">
  <list>
   <ref bean="first_object"/>
   <ref bean="second_object"/>
  </list>
 </property>
 <property name="someList">
  <list>
   <value>ListTest</value>
   <ref bean="first_object"/>
   <ref bean="second_object"/>
  </list>
 </property>
 <property name="someMap">
  <map>
   <entry key="first">
    <value>Hello,ducklyl!</value>
   </entry>
   <entry key="second">
    <ref bean="first_object"/>
   </entry>
  </map>
 </property>
</bean>
</beans>
(4)创徏试cSpringTest

package com.set;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import java.util.*;

public class SpringTest {
 public static void main(String[] args)
 {
 //d配置文g
 ApplicationContext context=new FileSystemXmlApplicationContext("set-config.xml");
 //获取id="setBean"对象
 SomeBean someBean=(SomeBean)context.getBean("someBean");
 
    //获取someStrArray,someObjArray
 String[] strs=someBean.getSomeStrArray();
 ObjectSet[] some=someBean.getSomeObjArray();
 
 for(int i=0;i<strs.length;i++)
 System.out.println(strs[i]+","+some[i]);
 
    //获取someList
 List someList=(List)someBean.getSomeList();
 for(int i=0;i<someList.size();i++)
  System.out.println(someList.get(i));
 
 //获取someMap
 Map someMap=someBean.getSomeMap();
 System.out.println(someMap);
 
}
}

如果以上配置正确Q运行测试程序,l果如下Q?br /> Hello,ducklyl
Welcome,wangsp
ListTest
ducklyl
wangsp
{first=Hello,ducklyl!, second=ducklyl}



ducklyl 2007-10-22 16:40 发表评论
]]>
Hessian 一个简单二q制协议实现webservicehttp://www.aygfsteel.com/ducklyl/archive/2007/10/21/154757.htmlducklylducklylSun, 21 Oct 2007 12:20:00 GMThttp://www.aygfsteel.com/ducklyl/archive/2007/10/21/154757.htmlhttp://www.aygfsteel.com/ducklyl/comments/154757.htmlhttp://www.aygfsteel.com/ducklyl/archive/2007/10/21/154757.html#Feedback2http://www.aygfsteel.com/ducklyl/comments/commentRss/154757.htmlhttp://www.aygfsteel.com/ducklyl/services/trackbacks/154757.html 下面q个例子我是从Hessian官方上,E微改了(jin)炏V?br /> 创徏一个名为Hessian的web工程Q测试服务器为tomcat5.0Qlib目录下必d含hessian-3.0.20.jar包,下蝲地址Qhttp://www.aygfsteel.com/Files/ducklyl/hessian-3.0.20.jar.rar
(1)接口Basic

package example;

public interface Basic {
   public String hello(); //与服务端的helloҎ(gu)对应
}
(2)服务端实现类

package example;

public class BasicService implements Basic {
  private String _greeting = "Hello,ducklyl!";

  public void setGreeting(String greeting)
  {
    _greeting = greeting;
  }

  public String hello()
  {
    return _greeting;
  }
}

(3)客户端实现类

package example;

import com.caucho.hessian.client.HessianProxyFactory;
/**  
 * <p>Title: hessian实现q程调用</p>  
 * <p>Copyright: Copyright (c) 2007</p>  
 * @author ducklyl  
 * @version 1.0  
 */  
public class BasicClient {
  public static void main(String []args)
    throws Exception
  {
    String url = "http://127.0.0.1:8080/Hessian/ducklyl";
    //创徏factory实例
    HessianProxyFactory factory = new HessianProxyFactory();
    //客户端需实现Basic接口
    Basic basic = (Basic) factory.create(Basic.class, url);

    System.out.println("Hessian: " + basic.hello());
  }
}

(4) web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
 <web-app>
  <servlet>
   <servlet-name>ducklyl</servlet-name>
   <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
    <init-param>
      <param-name>home-class</param-name>
      <param-value>example.BasicService</param-value>
    </init-param>
    <init-param>
      <param-name>home-api</param-name>
      <param-value>example.Basic</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
 <servlet-name>ducklyl</servlet-name>
    <url-pattern>/ducklyl</url-pattern>
  </servlet-mapping>
</web-app>

 q行客户端程序BasicClient Q如果以下配|没问题Q输出结果ؓ(f)Q?/p> Hessian: Hello,ducklyl!

ducklyl 2007-10-21 20:20 发表评论
]]>
Spring学习(fn)W记 2007-10-21http://www.aygfsteel.com/ducklyl/archive/2007/10/21/154686.htmlducklylducklylSun, 21 Oct 2007 05:26:00 GMThttp://www.aygfsteel.com/ducklyl/archive/2007/10/21/154686.htmlhttp://www.aygfsteel.com/ducklyl/comments/154686.htmlhttp://www.aygfsteel.com/ducklyl/archive/2007/10/21/154686.html#Feedback10http://www.aygfsteel.com/ducklyl/comments/commentRss/154686.htmlhttp://www.aygfsteel.com/ducklyl/services/trackbacks/154686.html计划用一个月旉来学?fn)SpringQ在q里把自q学习(fn)q程记录下来Q方便想学习(fn)Spring的hQ也己日后复?fn)有个参考。以下通过一个简单的例子来先?jin)解下Spring的用法?br /> (1)创徏一个java工程Q徏立如下类QHelloBean

package com.ducklyl;

public class HelloBean {
 private String helloWord;

 public String getHelloWord() {
  return helloWord;
 }

 public void setHelloWord(String helloWord) {
  this.helloWord = helloWord;
 }


}


(2)创徏Spring配置文gQbeans-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<bean id="helloBean" class="com.ducklyl.HelloBean">
 <property name="helloWord">
    <value>Hello,ducklyl!</value>
 </property>
</bean>

</beans>

(3)导入Spring所需的包Qcommons-logging.jarQspring.jar ?日志包和Spring?
包下载地址Q?br /> http://www.aygfsteel.com/Files/ducklyl/Spring.rar
(4)创徏试c:(x)SpringDemo.java

package com.ducklyl;

import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.*;


public class SpringDemo{
 public static void main(String[] args)
 {
  //d配置文g
  Resource rs=new FileSystemResource("beans-config.xml");
  //实例化Bean工厂
  BeanFactory factory=new XmlBeanFactory(rs);
  
  //获取id="helloBean"对象
  HelloBean hello=(HelloBean)factory.getBean("helloBean");
  //调用helloBean对象getHelloWord()Ҏ(gu)
  System.out.println(hello.getHelloWord());
 }

}

如果以上配置正确的话Q运行SpringDemo.javaQ可以看到输出结果:(x)Hello,ducklylQ?br />



    



ducklyl 2007-10-21 13:26 发表评论
]]>
Java中的SOAP技?/title><link>http://www.aygfsteel.com/ducklyl/archive/2007/10/20/154497.html</link><dc:creator>ducklyl</dc:creator><author>ducklyl</author><pubDate>Sat, 20 Oct 2007 06:59:00 GMT</pubDate><guid>http://www.aygfsteel.com/ducklyl/archive/2007/10/20/154497.html</guid><wfw:comment>http://www.aygfsteel.com/ducklyl/comments/154497.html</wfw:comment><comments>http://www.aygfsteel.com/ducklyl/archive/2007/10/20/154497.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ducklyl/comments/commentRss/154497.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ducklyl/services/trackbacks/154497.html</trackback:ping><description><![CDATA[开始之前,我想本文即讨论的主题和读者需要具备的L(fng)知识做一些必需的描叙。本文的主题是讨论SOAP技术,我们尽可能的讲得通俗易懂一些,所以,我们引入?jin)一个普通的“Hello World”范例来给读者说明它们是怎么q作的,让读者知道它们的q作方式。我认ؓ(f)Q如果光看官Ҏ(gu)档是很难开始学?fn)这门新技术的Q官Ҏ(gu)档中包含大量的范例,q解释了(jin)所有的Ҏ(gu)和优点Q但是没解释它们的运作方式? <p> 在这文章中Q我不打只肤浅的解释SOAP技术的定义Q我们假设读者熟(zhn)JAVA语言QW(xu)eb技术,hXML语言QXML NamespacesQXML Schema的基。在q种情况下,理解本文不存在M困难。然而,即没有q些知识Q你也不必担?j),我们尽可能的解释得单,但是当你开始做自己的SOAP应用E序时会(x)遇到一些问题和ȝ(ch)。因此,p一定时间来学习(fn)上面的知识是很有必要的?/p> <p>  从技术的角度来说Q有必要提一下我们的调试环境。我们用的是Windows XP操作pȝQ安装有JAVA 2 SDK 1.4.1QApache SOAP 2.3.1QJAF 1.0.2QJAVAMAIL 1.3.1和Xerces 2.6.0。上面所提及(qing)的都能在Tcomcat 4.1.29 JSP/Servlet容器中正常运行。所有的软g都是免费自由软gQ因此你能够很容易的下蝲它们q自己在M你喜Ƣ的q_如Windows或UNIX上安装它们。Java SDKQJAF和JAVAMAIL位于SUN的官方网?http://java.sun.com)Q其他的软g在Jakarta目l的官方|站(http://jakarta.apache.org)上有down的?/p> <p>  可能你在看到我们需要这么多不同的包(package)时已l有Ҏ(gu)?j)和不安了(jin),但是实际上你不应该担心(j)这些的。一旦你懂了(jin)基础Q那么对你将相当Ҏ(gu)。安装不是一件很隄事情Q你只需要在讄环境变量的时候仔l些Q比如CATALINA_HOME, CLASSPATH, JAVA_HOME {等Q所有这些步骤都是手工的。由于我仅仅是想你的注意力再次集中到它们n上,所以你能很快的完成以上配|过E。我只是d下面的一些字W串到Tomcat的bin/setclasspath.bat文g?<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />set CATALINA_HOME</span><span style="color: #000000">=</span><span style="color: #000000">C:\Tomcat4</span><span style="color: #000000">.1.29</span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />set CLASSPATH</span><span style="color: #000000">=</span><span style="color: #000000">%JAVA_HOME%\lib\tools.jar<br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />set CLASSPATH</span><span style="color: #000000">=</span><span style="color: #000000">%JAVA_HOME%\soap-</span><span style="color: #000000">2.3.1</span><span style="color: #000000">\lib\soap.jar<br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />set CLASSPATH</span><span style="color: #000000">=</span><span style="color: #000000">%CLASSPATH%</span><span style="color: #008000">;</span><span style="color: #008000">%JAVA_HOME%\javamail-1.3.1\mail.jar</span><span style="color: #008000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">set CLASSPATH</span><span style="color: #000000">=</span><span style="color: #000000">%CLASSPATH%</span><span style="color: #008000">;</span><span style="color: #008000">%JAVA_HOME%\jaf-1.0.2\activation.jar</span><span style="color: #008000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">set CLASSPATH</span><span style="color: #000000">=</span><span style="color: #000000">%CLASSPATH%</span><span style="color: #008000">;</span><span style="color: #008000">%JAVA_HOME%\xerces-2_6_0\xercesImpl.jar</span><span style="color: #008000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">set CLASSPATH</span><span style="color: #000000">=</span><span style="color: #000000">%CLASSPATH%</span><span style="color: #008000">;</span><span style="color: #008000">%JAVA_HOME%\xerces-2_6_0\xercesSamples.jar</span><span style="color: #008000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">set CLASSPATH</span><span style="color: #000000">=</span><span style="color: #000000">%CLASSPATH%</span><span style="color: #008000">;</span><span style="color: #008000">%JAVA_HOME%\xerces-2_6_0\xml-apis.jar</span><span style="color: #008000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">set CLASSPATH</span><span style="color: #000000">=</span><span style="color: #000000">%CLASSPATH%</span><span style="color: #008000">;</span><span style="color: #008000">%JAVA_HOME%\xerces-2_6_0\xmlParserAPIs.jar</span><span style="color: #008000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">set CLASSPATH</span><span style="color: #000000">=</span><span style="color: #000000">%CLASSPATH%</span><span style="color: #008000">;</span><span style="color: #008000">%CATALINA_HOME%\common\lib\servlet.jar</span><span style="color: #008000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">set CLASSPATH</span><span style="color: #000000">=</span><span style="color: #000000">%CLASSPATH%</span><span style="color: #008000">;</span><span style="color: #008000">%CATALINA_HOME%\common\lib\tools.jar</span><span style="color: #008000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /> </span></div> <p> </p>       如果你的安装路径(installation paths)和上面用的不同Q你需要更正它们,然后关闭和重启Tomcat以它们生效。这P你就有ؓ(f)q行SOAP作好?jin)准备。但是现在,我要忘记有关的技术部分,来学一点理论知识? <p>  SOAP意思是单对象访问协?Simple Object Access Protocol)。的如它的名字一PSOAP是很单的。它是一个基于XML的协议,允许E序lg和应用程序彼此用一U标准的Internet协议--HTTP来通讯。SOAP是一U独立的q_Q它不依赖程序语aQ它是简单的Q弹性的Q很Ҏ(gu)扩展的。目前,应用E序能够彼此使用一U基于DCOM和CORBA技术的q程q程调用(RPC)来进行相互通讯Q但HTTP不被设计个目的。RPC在Internet上应用是非常困难的,它们?x)出现许多兼?gu)和安全性的问题Q因为防火墙和代理服务器通常都会(x)L(block)q些cd的流量。应用程序之间最好的通讯方式是通过HTTP协议Q因为HTTP是支持所有Internet览器和服务器的。基于这个目的,SOAP协议被创建出来?br /> 那么Q它们是如何q作的呢?比如Q一个应用程?A)需要和另一个应用程?B)在SOAP的帮助下q行彼此通讯。它们将使用下面的框架图来完成这个过E?</p> <p><img style="border-left-color: #000000; border-bottom-color: #000000; width: 500px; border-top-color: #000000; border-right-color: #000000" alt="" src="http://searchwebservices.techtarget.com.cn/imagelist/06/38/6ali8sib0zrt.gif" border="0" /></p> <p>  q个SOAP信封(SOAP envelope)是一个包含以下内容的XML文档:</p> <p>  <img height="263" alt="" src="http://searchwebservices.techtarget.com.cn/imagelist/06/38/wd23k20qxnm8.gif" width="229" /></p> <p>  正如你看到的Q它是非常简单的。它看v来确实就象一个普通的信封或者你的email。你想看看它们是如何动作的吗?下面跟我们一h吧。其实我们有很多Ҏ(gu)是不用SOAP来在创徏和运行我们自q“Hello World”应用E序的,但是因ؓ(f)我们要保持它的简单性,我会(x)l你一个它q作方式的框架图(scheme)?/p> <p>  我们?#8220;Hello World”范例?x)包含一个SOAP Service。我们的SOAP Client发送它们的名字到该SOAP ServiceQƈ试图得到一些答复或响应。这个SOAP Service需要部|到一个SOAP Admin的工P以至重定位所有请求的SOAP(Proxy) RPC Router能够知道它们应该使用哪种服务来运作。总而言之,q个是以下面的方式来q作?</p> <p><a target="_blank"><img style="border-left-color: #000000; border-bottom-color: #000000; border-top-color: #000000; border-right-color: #000000" alt="点击攑֤此图? src="http://searchwebservices.techtarget.com.cn/imagelist/06/38/612k2813eo29s.gif" border="0" /></a><br /> 现在Q我们来一步步的看看到底发生了(jin)什么。在Step 1里,HelloWorldClient连接一个SOAP RPC RouterQ请求我们的SOAP Serviceq将包含我们名字的一个字W串传递给它。该SOAP RPC Router?x)检查是否它已经部v?jin)这个SOAP Service。如果它被发现是被部|的Q那么它?yu)传递数据到q个SOAP Serviceq调用特定的Ҏ(gu)Q这个是Step 2。然后SOAP ServiceҎ(gu)?x)被执行Q将q回某个字符串?该值就是SOAP Client的答复或者响?(Step 3)。在Step4中,SOAP RPC Router仅仅只是重定向q个数据到SOAP Client。所有在Step1和Step4里传输的数据是通过SOAP Envelope来完成的。正如你所看到的,法是相当简单的Q因此我们只准备兛_(j)实际的代码?/p> <p>  首先Q我们要创徏一个SOAP Service。下面是它的代码Q请不要忘记它攑օHelloWorld/ 目录?必须被包含在你的CLASSPATH?:<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #008000">//</span><span style="color: #008000"> SOAPService.java </span><span style="color: #008000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">  </span><span style="color: #0000ff">package</span><span style="color: #000000"> HelloWorld; <br /> <img id="Codehighlighter1_71_183_Open_Image" onclick="this.style.display='none'; Codehighlighter1_71_183_Open_Text.style.display='none'; Codehighlighter1_71_183_Closed_Image.style.display='inline'; Codehighlighter1_71_183_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_71_183_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_71_183_Closed_Text.style.display='none'; Codehighlighter1_71_183_Open_Image.style.display='inline'; Codehighlighter1_71_183_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />  </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> SOAPService </span><span id="Codehighlighter1_71_183_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_71_183_Open_Text"><span style="color: #000000">{ <br /> <img id="Codehighlighter1_110_178_Open_Image" onclick="this.style.display='none'; Codehighlighter1_110_178_Open_Text.style.display='none'; Codehighlighter1_110_178_Closed_Image.style.display='inline'; Codehighlighter1_110_178_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_110_178_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_110_178_Closed_Text.style.display='none'; Codehighlighter1_110_178_Open_Image.style.display='inline'; Codehighlighter1_110_178_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />      </span><span style="color: #0000ff">public</span><span style="color: #000000"> String sayHi(String x) </span><span id="Codehighlighter1_110_178_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_110_178_Open_Text"><span style="color: #000000">{ <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="color: #0000ff">return</span><span style="color: #000000">(</span><span style="color: #000000">"</span><span style="color: #000000">Hello my friend, </span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> x </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">! Glad to see you!</span><span style="color: #000000">"</span><span style="color: #000000">); <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="color: #000000"> <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />  }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /></span></div>       dM注释也是很容易的。要~译它,只需要用下列命o(h):javac SOAPService.java<br /> <br />         W二步,一旦我们准备好?jin)SOAP ServiceQ我们需要用SOAP Service Manager来部|它。这个可以通过很多方式来实玎ͼ但是Z(jin)能让初学SOAP的读者更Ҏ(gu)理解SOAPQ我提供?jin)一个最Ҏ(gu)的方式。我们假设你的Web Server(Tomcat或其?已经正常q行Qƈ且你已经正确安装?jin)SOAP。那么当览器访问http://localhost:8080/soap/Q你?x)看见Apache SOAP的欢q页面。点击Run the admin client Q然?Deploy。你?x)得C个屏q显C,在那里你需要填入IDQScopeQMethodQProvider Type和JAVA Provider的信息到表单域中。你能忽略其他所有的表单域,除非你真的需要它们的信息。我们的“HelloWorld”例子不需要它们,所以,我们填的下面的?<br /> <li>  ID: urn:HelloWorld_SOAPService <li>        Scope: Application <li>  Methods: sayHi <li>  Provider Type: java <li>  Java Provider - Provider Class: HelloWorld.SOAPService <li>  Java Provider - Static? No <p>一些注?ID是我们要从SOAP Client标识我们的SOAP Service的唯一名字。Method包含SOAP Service提供的一pdҎ(gu)。JAVA Provider-Provider Class是SOAP Service Javacȝ名字?/p> <p>  现在Q点击Deploy 按钮Q那么你的服务会(x)被部|Ӏ再ơ强调,h意正设|CLASSPATH环境变量。然后,你的HelloWorld.SOAPServicec能够被扑ֈQƈ且所有必需的jar包也能被扑ֈ。这是个几乎每个人都?x)犯的普通错误。现在,你能够点?List Q将?x)看见你的服务已l被部vq来。恭?</p> <p>  最后,让我们来创徏一个SOAP Client。代码看h有点复杂Q但是在现实中不?x)只有这么点ѝ?br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">1</span><span style="color: #000000">: </span><span style="color: #008000">//</span><span style="color: #008000"> HelloWorldClient.java </span><span style="color: #008000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">  </span><span style="color: #000000">2</span><span style="color: #000000">: </span><span style="color: #0000ff">import</span><span style="color: #000000"> java.io.</span><span style="color: #000000">*</span><span style="color: #000000">; <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />  </span><span style="color: #000000">3</span><span style="color: #000000">: </span><span style="color: #0000ff">import</span><span style="color: #000000"> java.net.</span><span style="color: #000000">*</span><span style="color: #000000">; <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />  </span><span style="color: #000000">4</span><span style="color: #000000">: </span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.</span><span style="color: #000000">*</span><span style="color: #000000">; <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />  </span><span style="color: #000000">5</span><span style="color: #000000">: </span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.soap.</span><span style="color: #000000">*</span><span style="color: #000000">; <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />  </span><span style="color: #000000">6</span><span style="color: #000000">: </span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.soap.rpc.</span><span style="color: #000000">*</span><span style="color: #000000">; <br /> <img id="Codehighlighter1_207_1443_Open_Image" onclick="this.style.display='none'; Codehighlighter1_207_1443_Open_Text.style.display='none'; Codehighlighter1_207_1443_Closed_Image.style.display='inline'; Codehighlighter1_207_1443_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_207_1443_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_207_1443_Closed_Text.style.display='none'; Codehighlighter1_207_1443_Open_Image.style.display='inline'; Codehighlighter1_207_1443_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />  </span><span style="color: #000000">7</span><span style="color: #000000">: </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> HelloWorldClient </span><span id="Codehighlighter1_207_1443_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_207_1443_Open_Text"><span style="color: #000000">{ <br /> <img id="Codehighlighter1_270_1435_Open_Image" onclick="this.style.display='none'; Codehighlighter1_270_1435_Open_Text.style.display='none'; Codehighlighter1_270_1435_Closed_Image.style.display='inline'; Codehighlighter1_270_1435_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_270_1435_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_270_1435_Closed_Text.style.display='none'; Codehighlighter1_270_1435_Open_Image.style.display='inline'; Codehighlighter1_270_1435_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="color: #000000">8</span><span style="color: #000000">: </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] arg) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_270_1435_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_270_1435_Open_Text"><span style="color: #000000">{ <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">9</span><span style="color: #000000">: Call c </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">; <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">10</span><span style="color: #000000">: URL url </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">; <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">11</span><span style="color: #000000">: Vector params </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">; <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">12</span><span style="color: #000000">: Response rep </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">; <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">13</span><span style="color: #000000">: String ourName </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">Superman</span><span style="color: #000000">"</span><span style="color: #000000">; <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">14</span><span style="color: #000000">: String ourUrn </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">urn:HelloWorld_SOAPService</span><span style="color: #000000">"</span><span style="color: #000000">; <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">15</span><span style="color: #000000">: String ourMethod </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">sayHi</span><span style="color: #000000">"</span><span style="color: #000000">; <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">16</span><span style="color: #000000">: url </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> URL(</span><span style="color: #000000">"</span><span style="color: #000000">http://localhost:8080/soap/servlet/ </span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">  rpcrouter</span><span style="color: #000000">"</span><span style="color: #000000">); </span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">  </span><span style="color: #000000">17</span><span style="color: #000000">: System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Passing to our deployed </span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">ourUrn</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">  our name (</span><span style="color: #000000">"</span><span style="color: #000000">+ourName+</span><span style="color: #000000">"</span><span style="color: #000000">): </span><span style="color: #000000">"</span><span style="color: #000000">); </span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">  </span><span style="color: #000000">18</span><span style="color: #000000">: c </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Call(); <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">19</span><span style="color: #000000">: c.setTargetObjectURI(ourUrn); <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">20</span><span style="color: #000000">: c.setMethodName(ourMethod); <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">21</span><span style="color: #000000">: c.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">22</span><span style="color: #000000">: params </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Vector(); <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">23</span><span style="color: #000000">: params.addElement(</span><span style="color: #0000ff">new</span><span style="color: #000000"> Parameter(</span><span style="color: #000000">"</span><span style="color: #000000">ourName</span><span style="color: #000000">"</span><span style="color: #000000">, String.</span><span style="color: #0000ff">class</span><span style="color: #000000">, <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  ourName, </span><span style="color: #0000ff">null</span><span style="color: #000000">)); <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">24</span><span style="color: #000000">: c.setParams(params); <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">25</span><span style="color: #000000">: System.out.print(</span><span style="color: #000000">"</span><span style="color: #000000">and its answer is: </span><span style="color: #000000">"</span><span style="color: #000000">); <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">26</span><span style="color: #000000">: rep </span><span style="color: #000000">=</span><span style="color: #000000"> c.invoke(url, </span><span style="color: #000000">""</span><span style="color: #000000">); <br /> <img id="Codehighlighter1_1071_1289_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1071_1289_Open_Text.style.display='none'; Codehighlighter1_1071_1289_Closed_Image.style.display='inline'; Codehighlighter1_1071_1289_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1071_1289_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1071_1289_Closed_Text.style.display='none'; Codehighlighter1_1071_1289_Open_Image.style.display='inline'; Codehighlighter1_1071_1289_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="color: #000000">27</span><span style="color: #000000">: </span><span style="color: #0000ff">if</span><span style="color: #000000"> (rep.generatedFault()) </span><span id="Codehighlighter1_1071_1289_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_1071_1289_Open_Text"><span style="color: #000000">{ <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">28</span><span style="color: #000000">: Fault fault </span><span style="color: #000000">=</span><span style="color: #000000"> rep.getFault(); <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">29</span><span style="color: #000000">: System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">\nCall failed!</span><span style="color: #000000">"</span><span style="color: #000000">); <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">30</span><span style="color: #000000">: System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Code = </span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> fault.getFaultCode()); <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">31</span><span style="color: #000000">: System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">String = </span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> fault.getFaultString()); <br /> <img id="Codehighlighter1_1296_1426_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1296_1426_Open_Text.style.display='none'; Codehighlighter1_1296_1426_Closed_Image.style.display='inline'; Codehighlighter1_1296_1426_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1296_1426_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1296_1426_Closed_Text.style.display='none'; Codehighlighter1_1296_1426_Open_Image.style.display='inline'; Codehighlighter1_1296_1426_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="color: #000000">32</span><span style="color: #000000">: }</span></span><span style="color: #000000"> </span><span style="color: #0000ff">else</span><span style="color: #000000"> </span><span id="Codehighlighter1_1296_1426_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_1296_1426_Open_Text"><span style="color: #000000">{ <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">33</span><span style="color: #000000">: Parameter result </span><span style="color: #000000">=</span><span style="color: #000000"> rep.getReturnValue(); <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">34</span><span style="color: #000000">: System.out.print(result.getValue()); <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">35</span><span style="color: #000000">: System.out.println(); <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  </span><span style="color: #000000">36</span><span style="color: #000000">: }</span></span><span style="color: #000000"> <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  </span><span style="color: #000000">37</span><span style="color: #000000">: }</span></span><span style="color: #000000"> <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />  </span><span style="color: #000000">38</span><span style="color: #000000">:}</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /></span></div> <br /> 下面我要做一些解释。在W?3行,我们讄?jin)我们的名字Q这个名字将?x)传递给SOAP Service。在W?4行,我们讄?jin)我们将要调用的服务的ID(service ID)Q和W?5行里讄的服务方?service method)。有?jin)这个IDQ服务能够被部v到SOAP服务理?SOAP Service Manager)中。我们没有设|Q何其他|仅仅只用刚才那些基础值就可以正常q作?jin)。你能从SOAP的官Ҏ(gu)档上得到相关信息Q该文档来自SOAP包中Q它们的解释出?jin)本文的范围? <p>  用以下方式编译这个SOAP Client:</p> <p>  javac HelloWorldClient.java</p> <p>  Z(jin)圆满完成它,让我们检查一下针Ҏ(gu)们的试Q是否所有事情都准备qA。Tomcat正在q行Q所有的环境变量都正,SOAP Service被编译和部vQSOAP Client被成功编译。OKQ让我们q行它,你将看到q个屏幕:<br /> <a target="_blank"><img style="border-left-color: #000000; border-bottom-color: #000000; border-top-color: #000000; border-right-color: #000000" alt="点击攑֤此图? src="http://searchwebservices.techtarget.com.cn/imagelist/06/38/500w6w006b97s.gif" border="0" /></a></p> <p>  正如你所看到的,我们的SOAP Client使用SOAP协议成功发送它的名字和接收?jin)一个答复。正如前面所说的QSOAP Service发送和接收的是SOAP envelope。这个是SOAP envelope的源代码?/p> <p>  被发送到SOAP Service的SOAP Envelope<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">Q?xml version=1.0 encoding=UTF-8?Q?br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />QSOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/<br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />soap/envelope/"<br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />xmlns:xsi="http://www.w3.org/2001/<br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />XMLSchema-instance"<br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />xmlns:xsd="http://www.w3.org/2001/XMLSchema"Q?br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />QSOAP-ENV:BodyQ?br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />Qns1:sayHi xmlns:ns1="urn:HelloWorld_SOAPService"<br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/<br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />soap/encoding/"Q?br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />QourName xsi:type="xsd:string"QSupermanQ?ourNameQ?br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />Q?ns1:sayHiQ?br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />Q?SOAP-ENV:BodyQ?br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />Q?SOAP-ENV:EnvelopeQ? </span></div> <br /> 从SOAP Service接收的SOAP Envelope<br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">Q?xml version=1.0 encoding=UTF-8?Q?br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />QSOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/<br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />soap/envelope/"<br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />xmlns:xsi="http://www.w3.org/2001/<br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />XMLSchema-instance"<br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />xmlns:xsd="http://www.w3.org/2001/XMLSchema"Q?br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />QSOAP-ENV:BodyQ?br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />Qns1:sayHiResponse xmlns:ns1="urn:HelloWorld_SOAPService"<br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />SOAP-ENV:encodingStyle="http://schemas.xmlsoap.<br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />org/soap/encoding/"Q?br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />Qreturn xsi:type="xsd:string"QHello my friend, Superman!<br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />Glad to see you!Q?returnQ?br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />Q?ns1:sayHiResponseQ?br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />Q?SOAP-ENV:BodyQ?br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />Q?SOAP-ENV:EnvelopeQ?nbsp;</span></div>       <br />       要理解SOAP Envelope中的所有标{含义Q我你花一Ҏ(gu)间阅?http://www.w3.org/2001/06/soap-envelope 命名I间规范? <p>  我希望本文能够在你理解SOAP技术上有一定帮助。这个技术是单的Q有的Q强大的Q弹性的。它被用在许多Web应用中,q些应用的数量也在不断增加。学?fn)SOAP是值得的,臛_你要知道它是什么和它是怎么q作的?/p> </li> <img src ="http://www.aygfsteel.com/ducklyl/aggbug/154497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ducklyl/" target="_blank">ducklyl</a> 2007-10-20 14:59 <a href="http://www.aygfsteel.com/ducklyl/archive/2007/10/20/154497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">ʱ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">е</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">տ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ӻ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͨ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank">߰</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϲ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˹</a>| <a href="http://" target="_blank">ξ</a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank">Ӣɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̨</a>| <a href="http://" 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>