您的位置:首页 > 其它

初窥IE8不为人知的秘密

2011-01-06 11:38 211 查看
本篇介绍XFire + Spring构建Web Services服务器端的第二种办法。
两种办法的不同之处在于:
第一种办法的ServletClass是org.codehaus.xfire.spring.XFireSpringServlet,这种办法服务的声明在Spring配置文件中完成,即applicationContext.xml文件中。
第二种办法的ServletClass是org.springframework.web.servlet.DispatcherServlet,这种办法需要另外在WEB-INF文件夹下新建一个XFireServlet-servlet.xml,服务声明在该文件中(和applicationContext.xml,web.xml在同一目录下),这里的XFireServlet是web.xml文件中servlet的名字,需要保持一致。

1、web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/XFireServlet-servlet.xml,
/WEB-INF/applicationContext.xml
</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</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>

</web-app>


<servlet>中的servlet-name可自己设定,但是{servlet-name}-servlet必须为新建xml文件的名字,如程序中servlet-name为XFireServlet,则新建的xml文件的名字为:XFireServlet-servlet.xml,而且该文件的路径需要加入<context-param>下面的<param-value>中。(这个地方见到有的例子并没有加入这个文件的路径,而是:classpath:org/codehaus/xfire/spring/xfire.xml,这点我没写例子实践。)
 

2、接口类和实现类

package  webservice;

/**
*HelloWorld的接口类.
*/
public interface HelloWorld  {
/**
*对名字为name的人打招呼.
*@paramname名字
*@return返回打招呼的字符串
*/
String sayHelloWorld(String name);
}
我们还需要建立一个对应的实现类,来实现sayHelloWorld的功能,该实现类即为HelloWorldImpl.java。该类的详细内容如下:
package  webservice;
/**
*HelloWorld的实现类.
*/
public class HelloWorldImpl  implements  HelloWorld  {
public  String sayHelloWorld(String name)  {
String helloWorld  =   " hello, "   +  name;
return  helloWorld;
}
}


这个没什么特别的
 

3、配置applicationContext.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 ="HelloWorldBean"  class ="webservice.HelloWorldImpl" />
</ beans >


4、配置服务(XFireServlet-servlet.xml)
 

<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd" >
< beans >
<!--  引入XFire预配置信息  -->
< import  resource ="classpath:org/codehaus/xfire/spring/xfire.xml"   />
<! —定义访问的url-- >
< bean  class ="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >
< property  name ="urlMap" >
< map >
< entry  key ="/HelloWorldService.ws" >
< ref  bean ="HelloWorldService"   />
</ entry >
</ map >
</ property >
</ bean >

<!--  使用XFire导出器  -->
< bean  id ="baseWebService"  class ="org.codehaus.xfire.spring.remoting.XFireExporter"  lazy-init ="false"  abstract ="true" >
<!--  引用xfire.xml中定义的工厂  -->
< property  name ="serviceFactory"  ref ="xfire.serviceFactory"   />
<!--  引用xfire.xml中的xfire实例  -->
< property  name ="xfire"  ref ="xfire"   />
</ bean >
< bean  id ="HelloWorldService"  parent ="baseWebService" >
<!--  业务服务bean  -->
< property  name ="serviceBean"  ref ="HelloWorldBean"   />
<!--  业务服务bean的窄接口类  -->
< property  name ="serviceClass"  value ="webservice.HelloWorld"   />
</ bean >
</ beans >


如果有多个服务,添加多个<entry></entry>即可
 

配置完成在浏览器中输入http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl 测试一下是否正常
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: