WebService开发实例 (Xfire+Spring+Hibernate)
?
请注意,需要下载Xfire
?
一、?????????? 首先在web.xml中添加对xfire及spring支持的相关内容,如下:
?
<?xml version="1.0" encoding="ISO-8859-1"?>
?
<!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> <!-- START SNIPPET: xfire --> <context-param> <!—xfire及spring相关配置文件位置 -->
?
??????? <param-name>contextConfigLocation</param-name> ??????? <param-value>/WEB-INF/applicationContext.xml ??????? classpath:org/codehaus/xfire/spring/xfire.xml</param-value> ??? </context-param>
?
??? <context-param> ??????? <param-name>log4jConfigLocation</param-name> ??????? <param-value>/WEB-INF/log4j.properties</param-value> ??? </context-param> ??? ??? <context-param> ??????? <param-name>webAppRootKey</param-name> ??????? <param-value>webservicetest.root</param-value> ??? </context-param>
?
?
??? ?<filter> ??????? <filter-name>sessionFilter</filter-name> ??????? <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> ??? </filter>?? ??? <filter-mapping> ??????? <filter-name>sessionFilter</filter-name> ??????? <url-pattern>/services/*</url-pattern> ??? </filter-mapping>??????? ?????? ??? <listener> ??????? <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> ??? </listener>
?
??? <listener> ??????? <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> ??? </listener>??? ????? ???? <servlet> ??????? <servlet-name>xfire</servlet-name> ??????? <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> ??? </servlet> ??
?
??? <servlet-mapping> ??????? <servlet-name>xfire</servlet-name> ??????? <url-pattern>/services/*</url-pattern> ??? </servlet-mapping>?????? ??? <!-- END SNIPPET: xfire --> </web-app>
?
二、?????????? applicationContext.xml文件内容: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> ? <!--?数据库连接配置 --> ??? <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> ??? ??????? <property name="location" value="/WEB-INF/jdbc_connect.properties"/> ??????? ??? </bean> ??????? ??? <!-- C3P0连接池配置 --> ??? ??? <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">???? ??????? ??????? <property name="driverClass" value="${jdbc.driverClassName}"/> ??????? <property name="jdbcUrl" value="${jdbc.url}"/> ??????? <property name="user" value="${jdbc.username}"/> ??????? <property name="password" value="${jdbc.password}"/> ??????? ??????? <property name="initialPoolSize"> ??????????? <value>5</value> ??????? </property> ????? ?? <property name="minPoolSize"> ????? ?????? <value>5</value> ????? ?? </property> ????? ?? <property name="maxPoolSize"> ????? ?????? <value>10</value> ????? ?? </property> ????? ?? <property name="acquireIncrement"> ????? ?????? <value>2</value> ????? ?? </property> ????? ?? <property name="maxIdleTime"> ????? ?????? <value>60</value> ????? ?? </property> ????? ?? <property name="maxStatements"> ????? ?????? <value>0</value> ????? ?? </property>???? ??? </bean> ??? <!-- C3P0结束 --> ??? ??? <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> ??????? <property name="dataSource" ref="dataSource"/> ??????? <property name="mappingResources"> ??????????? <list> ??????????? <!—hibernate的hbm文件位置 ,至于hbm文件可以通过工具生成,这里就不详述了--> ??????????????? <value>com/dao/emp.hbm.xml</value>????????????? ??????????? </list> ??????? </property> ??????? <property name="hibernateProperties"> ??????????? <props> ??????????????? <prop key="hibernate.dialect">${hibernate.dialect}</prop>?????? ??????????????? <prop key="hibernate.show_sql">true</prop>????????????????? ??????????? ??? <prop key="hibernate.jdbc.fetch_size">100</prop> ??????????????? <prop key="hibernate.jdbc.batch_size">50</prop> ??????????? ??? <prop key="hibernate.use_outer_join">true</prop> ?????????????? ??????????????? <prop key="hibernate.connection.SetBigStringTryClob">true</prop> ??????????? </props>??????????? ??????? </property> ??????? ??????? <property name="eventListeners"> ??????????? <map> ??????????????? <entry key="merge"> ??????????????????? <bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener"/> ??????????????? </entry> ??????????? </map> ??????? </property> ??? ??? </bean> ??? ??? ??? ??? <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> ??????? <property name="sessionFactory" ref="sessionFactory"/> ??? </bean> ??? ??? <bean id="QueryHib" class="Hello.HelloworldImpl "> ??????? <property name="sessionFactory" ref="sessionFactory"/> ??? </bean> ??? ? ??? ??? <!—webservice 的bean类 --> ??? ??? <bean id="QueryHibRis" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> ??????? <property name="transactionManager" ref="transactionManager"/> ??????? <property name="target" ref="QueryHib"/> ??????? <property name="transactionAttributes"> ??????????? <props>???????? ??????????? <prop key="*">PROPAGATION_REQUIRED</prop>?????????????????? ??????????? </props> ??????? </property> ??? </bean> ??? </beans>
?
<!-- jdbc_connect.properties文件内容,主要是数据库配置,以下是oracle数据库 -->
?
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle:thin:@172.17.99.230:1521:bsrun jdbc.username=user jdbc.password=user hibernate.dialect=org.hibernate.dialect.Oracle9Dialect
?
三、?????????? xfire-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> ??? <!-- START SNIPPET: xfire --> ??? <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> ??????? <property name="urlMap"> ??????????? <map> ??????????????? <entry key="/QueryService"> ??????????????????? <ref bean="query"/> ??????????????? </entry>? ? ???????????? </map> ??????? </property> ??????? ??? </bean> ??? ??? <!-- Declare a parent bean with all properties common to both services --> ??? <bean id="query" class="org.codehaus.xfire.spring.remoting.XFireExporter"> ??????? <property name="serviceFactory"> ??????????? <ref bean="xfire.serviceFactory"/> ??????? </property> ??????? <property name="xfire"> ??????????? <ref bean="xfire"/> ??????? </property> ??????? <property name="serviceBean"> ??????????? <ref bean="QueryHibRis"/> ?<!—请注意这个需在applicationContext.xml有定义-->
?
??????? </property> ??????? <property name="serviceClass"> ??????????? <value> Hello.IHelloworld </value> ??????? </property> ??????? ??? </bean>?? ??? <!-- END SNIPPET: xfire --> </beans>
?
四、Hello.HelloworldImpl类内容,主要是查询数据库并返回结果
?
package Hello;
?
import java.util.Collection;
?
//Generated by MyEclipse
?
public class HelloworldImpl implements IHelloworld { ??? ??? public Collection User(){?? ??? return getHibernateTemplate().find("select new Helloworld.User(userid,username) from emp"); ??????? ??????? ??? } ??? }
?
IHelloworld接口内容 package Hello; //Generated by MyEclipse
?
import java.util.Collection;
?
public interface IHelloworld { ??? ??? public Collection User(); } //xfire对于返回collection的,需要定义接口的IHelloworld.aegis.xml文件,需放在当前接口文件目录下。
?
<?xml version="1.0" encoding="UTF-8"?> ?<mappings> ??? <mapping> ??????? <method name= "User" > ??????????? <return-type componentType= "Helloworld.User" />?????????? ??????? </method>????????? ??????? ??? </mapping>??? ??? </mappings>
?
Helloworld.User类内容: package Helloworld;
?
public class User { ??? ??? String userid; ??? String username; //一定要定义此构造函数,在Hello.HelloworldImpl中有用到哟。 ??? Public User(String userid,String username){ ??????? this.userid = userid; this.username = username;
?
}??
?
??? public String getUserid() { ??????? return userid; ??? } ??? public void setUserid(String userid) { ??????? this.userid = userid; ??? } ??? public String getUsername() { ??????? return username; ??? } ??? public void setUsername(String username) { ??????? this.username = username; ??? }
?
} ? 完结,以上代码是我在实际应用中改编而成,都经过测试,肯定好用。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- unix – 如何合并PDF文件(如果不可能,则为PS),以便每个文件
- 在Scala Play应用程序中没有实现OWrites和Reads
- 让Bootstrap的popover在鼠标移入弹窗时不消失
- 一个控制器中的AngularJS window.onbeforeunload正在另一个
- AngularJS 1.x学习<2>
- WebService开发笔记(二)-- VS2005访问WebServcie更简单
- scala – 根据设置重新定义sbt任务
- yum源配置
- 1. KEYS/RENAME/DEL/EXISTS/MOVE/RENAMENX: #在Shell命令行
- scala – JonasBonér的依赖注入策略似乎有限 – 但也许我不