写在前面的话:
网上的教程大多都是使用wsdl2java工具构建webservice。本文则直接采用编辑server-config.wsdd来发布webservice,相比而言,可以比较快速的部署一个项目,适应工作需要。
本教程模拟提供用户接口用于和别的系统结合,主要功能包括接受用户的增删改查。
一数据库创建
创建数据库webservice
,创建用户表user
,用户表内容如下:
2 | `uid` int ( ) unsigned NOT NULL auto_increment, |
3 | `name` varchar ( ) NOT NULL default '' , |
4 | `password` varchar ( ) NOT NULL default '' , |
5 | `nickname` varchar ( ) NOT NULL default '' , |
7 | ) ENGINE=InnoDB DEFAULT CHARSET= gbk; |
(您也可以直接使用附件中的sql文件创建数据库)
二新建web项目,搭建spring+hibernate框架。
1)新建用户模型,User类,如下:
01 | package com.zuidaima.model; |
34 | public User(String name, String password, String nickname) { |
36 | this .password = password; |
37 | this .nickname = nickname; |
40 | public Integer getUid() { |
44 | public void setUid(Integer uid) { |
48 | public String getName() { |
52 | public void setName(String name) { |
56 | public String getPassword() { |
60 | public void setPassword(String password) { |
61 | this .password = password; |
64 | public String getNickname() { |
68 | public void setNickname(String nickname) { |
69 | this .nickname = nickname; |
另外user的配置文件User.hbm.xml如下:
01 | <? xml version = "1.0" encoding = "UTF-8" ?> |
02 | <!DOCTYPE hibernate-mapping PUBLIC |
03 | "-//Hibernate/Hibernate Mapping DTD 2.0//EN" |
07 | < class name = "com.zuidaima.model.User" table = "user" > |
08 | < id name = "uid" type = "java.lang.Integer" column = "UID" > |
09 | < generator class = "native" ></ generator > |
11 | < property name = "name" type = "java.lang.String" column = "NAME" |
12 | length = "45" insert = "true" update = "true" /> |
13 | < property name = "password" type = "java.lang.String" column = "PASSWORD" |
14 | length = "45" insert = "true" update = "true" /> |
15 | < property name = "nickname" type = "java.lang.String" column = "NICKNAME" |
16 | length = "45" insert = "true" update = "true" /> |
2)新建DAO,UserDAO类,如下:
01 | package com.zuidaima.dao; |
05 | import org.springframework.orm.hibernate.support.HibernateDaoSupport; |
06 | import com.zuidaima.model.User; |
08 | public class UserDAO extends HibernateDaoSupport { |
09 | public User getUser( int uid) { |
10 | return (User) getHibernateTemplate().get(User. class , new Integer(uid)); |
18 | public void saveUser(User user) { |
19 | getHibernateTemplate().save(user); |
27 | public void deleteUser( int uid) { |
28 | StringBuffer strBuf = new StringBuffer(); |
29 | strBuf.append( "from User as u where u.uid=" ); |
31 | getHibernateTemplate().delete(strBuf.toString()); |
39 | public void updateUser(User user) { |
40 | getHibernateTemplate().saveOrUpdate(user); |
47 | * @return user or null |
70 | public List listUser() { |
71 | StringBuffer strBuf = new StringBuffer(); |
72 | strBuf.append( "select u from User as u " ); |
73 | return getHibernateTemplate().find(strBuf.toString()); |
3)新建管理层,UserManager接口和其实现UserManagerImpl。
UserManager接口:
01 | package org.yoo.service; |
03 | import java.util.List; |
05 | import org.yoo.model.User; |
07 | public interface UserManager { |
14 | public User getUserByUid( int uid); |
19 | public void saveUser(User user); |
24 | public void deleteUser( int uid); |
30 | public void updateUser(User user); |
37 | public User getUserByName(String name); |
43 | public List listUser(); |
UserManagerImpl如下:
01 | package com.zuidaima.service.impl; |
05 | import com.zuidaima.dao.UserDAO; |
06 | import com.zuidaima.model.User; |
07 | import com.zuidaima.service.UserManager; |
09 | public class UserManagerImpl implements UserManager { |
10 | private UserDAO userDAO = null ; |
12 | public void deleteUser( int uid) { |
13 | userDAO.deleteUser(uid); |
17 | public User getUserByName(String name) { |
19 | return userDAO.getUserByName(name); |
22 | public User getUserByUid( int uid) { |
24 | return userDAO.getUser(uid); |
27 | public List listUser() { |
29 | return userDAO.listUser(); |
32 | public void saveUser(User user) { |
33 | userDAO.saveUser(user); |
37 | public void updateUser(User user) { |
38 | userDAO.updateUser(user); |
45 | public void setUserDAO(UserDAO userDAO) { |
46 | this .userDAO = userDAO; |
4)配置xml文件。
Spring-config.xml
01 | <? xml version = "1.0" encoding = "UTF-8" ?> |
02 | <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" |
09 | < bean id = "dataSource_MYSQL" |
10 | class = "org.springframework.jdbc.datasource.DriverManagerDataSource" > |
11 | < property name = "driverClassName" > |
12 | < value >org.gjt.mm.mysql.Driver</ value > |
17 | < property name = "username" > |
20 | < property name = "password" > |
27 | < bean id = "sessionFactory" |
28 | class = "org.springframework.orm.hibernate.LocalSessionFactoryBean" > |
29 | < property name = "dataSource" > |
30 | < ref local = "dataSource_MYSQL" /> |
33 | < property name = "mappingResources" > |
35 | < value >com/zuidaima/model/mysql/User.hbm.xml</ value > |
39 | < property name = "hibernateProperties" > |
42 | < prop key = "hibernate.dialect" > |
43 | net.sf.hibernate.dialect.MySQLDialect |
45 | < prop key = "connection.pool.size" >10</ prop > |
46 | < prop key = "statement_cache.size" >25</ prop > |
47 | < prop key = "jdbc.fetch_size" >50</ prop > |
48 | < prop key = "jdbc.batch_size" >30</ prop > |
49 | < prop key = "hibernate.show_sql" >true</ prop > |
50 | < prop key = "cglib.use_reflection_optimizer" >true</ prop > |
56 | < bean id = "transactionManager" |
57 | class = "org.springframework.orm.hibernate.HibernateTransactionManager" > |
58 | < property name = "sessionFactory" > |
59 | < ref local = "sessionFactory" /> |
Spring-dao.xml
01 | <?xml version= "1.0" encoding= "UTF-8" ?> |
02 | <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" |
05 | <bean id= "userDAO" class = "com.zuidaima.dao.UserDAO" > |
06 | <property name= "sessionFactory" > |
07 | <ref bean= "sessionFactory" /> |
Spring-service.xml
01 | <?xml version= "1.0" encoding= "UTF-8" ?> |
02 | <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" |
06 | <bean id= "userManager" class = "com.zuidaima.service.impl.UserManagerImpl" > |
07 | <property name= "userDAO" > |
08 | <ref bean= "userDAO" /> |
(您也可以将这三个文件合并在一个文件中,我将它们分开是觉得便于管理。另外如果这部分的配置您不明白,请先查看有关spring+hibernate的相关文章)
5)构建bean工厂
在此只前,都是和利用spring+hibernate搭建web项目一致,这一步开始要有些不同了。由于axis1不支持spring,所以无法直接创建spring的容器,我们需要自己构建bean工厂。
创建BeanxmlFactoryl类,如下:
01 | package com.zuidaima.beanfactory; |
03 | import org.springframework.context.ApplicationContext; |
04 | import org.springframework.context.support.ClassPathXmlApplicationContext; |
05 | import com.zuidaima.service.UserManager; |
08 | * 单列模式的bean工厂类 SpringBean Factory |
13 | public class BeanxmlFactory { |
14 | private static BeanxmlFactory beanxmlfactory = null ; |
15 | private UserManager userManager = null ; |
36 | public synchronized static BeanxmlFactory getInstance() { |
37 | if (beanxmlfactory == null ) { |
38 | beanxmlfactory = new BeanxmlFactory(); |
40 | return beanxmlfactory; |
43 | public UserManager getUserManager() { |
到此我们的web项目已经搭建完成了,余下的事情就是构建webservice的服务了。
三构建service
1)新建一个类,我们命名它为UserService。该类利用由Spring提供的UserManager Bean,生产用户的增加和删除服务,如下:
01 | package com.zuidaima.webservice; |
03 | import java.util.ArrayList; |
06 | import org.apache.commons.logging.Log; |
07 | import org.apache.commons.logging.LogFactory; |
08 | import com.zuidaima.beanfactory.BeanxmlFactory; |
09 | import com.zuidaima.model.User; |
10 | import com.zuidaima.service.UserManager; |
12 | public class UserService { |
13 | private static Log log = LogFactory.getLog(UserService. class ); |
14 | private UserManager userManager = null ; |
60 | public boolean deleteUser( int uid) { |
61 | log.info( "come in deleteUser method" ); |
62 | boolean resultCode = true ; |
64 | userManager.deleteUser(uid); |
65 | } catch (Exception e) { |
66 | log.error( "deleteUser have error:" , e); |
2)添加axis1所需要的jar包。
复制axis-1_4"lib下所有的包到你的项目lib下。
(可以到apache网站上下载axis-1——4,或者在本文附件中获取)
3)Ok,最重要的一步,也是最奇妙的一步来了,构建server-config.wsdd,即利用axis1搭建webservice服务的描述文件。在web.xml同目录下,新建一xml文件,命名为server-config.wsdd文件类容如下:
01 | <?xml version= "1.0" encoding= "UTF-8" ?> |
06 | <parameter name= "adminPassword" value= "admin" /> |
07 | <parameter name= "attachments.implementation" |
08 | value= "org.apache.axis.attachments.AttachmentsImpl" /> |
09 | <parameter name= "sendXsiTypes" value= "true" /> |
10 | <parameter name= "sendMultiRefs" value= "true" /> |
11 | <parameter name= "sendXMLDeclaration" value= "true" /> |
12 | <parameter name= "axis.sendMinimizedElements" value= "true" /> |
14 | <handler type= "java:org.apache.axis.handlers.JWSHandler" > |
15 | <parameter name= "scope" value= "session" /> |
17 | <handler type= "java:org.apache.axis.handlers.JWSHandler" > |
18 | <parameter name= "scope" value= "request" /> |
19 | <parameter name= "extension" value= ".jwr" /> |
22 | </globalConfiguration> |
23 | <handler name= "LocalResponder" |
24 | type= "java:org.apache.axis.transport.local.LocalResponder" /> |
25 | <handler name= "URLMapper" type= "java:org.apache.axis.handlers.http.URLMapper" /> |
26 | <handler name= "Authenticate" |
27 | type= "java:org.apache.axis.handlers.SimpleAuthenticationHandler" /> |
29 | <service name= "UserService" provider= "java:RPC" > |
30 | <parameter name= "scope" value= "Request" /> |
32 | <parameter name= "allowedMethods" value= "*" /> |
34 | <parameter name= "className" value= "com.zuidaima.webservice.UserService" /> |
36 | <!-- other service --> |
38 | <!-- <service name= "balabala" provider= "java:RPC" > <parameter name= "allowedMethods" |
39 | value= "*" /> <parameter name= "scope" value= "Request" /> <parameter name= "className" |
40 | value= "balabala" /> </service> --> |
42 | <service name= "AdminService" provider= "java:MSG" > |
43 | <parameter name= "allowedMethods" value= "AdminService" /> |
44 | <parameter name= "enableRemoteAdmin" value= "false" /> |
45 | <parameter name= "className" value= "org.apache.axis.utils.Admin" /> |
48 | <service name= "Version" provider= "java:RPC" > |
49 | <parameter name= "allowedMethods" value= "getVersion" /> |
50 | <parameter name= "className" value= "org.apache.axis.Version" /> |
52 | <transport name= "http" > |
54 | <handler type= "URLMapper" /> |
55 | <handler type= "java:org.apache.axis.handlers.http.HTTPAuthHandler" /> |
58 | <transport name= "local" > |
60 | <handler type= "LocalResponder" /> |
4)最后一步,需要使用tomcat支持我们搭建的webservice。编辑web.xml,编辑后的文件内容如下:
01 | <?xml version= "1.0" encoding= "ISO-8859-1" ?> |
03 | <!DOCTYPE web-app PUBLIC "- |
07 | <display-name>aoservice-axis1</display-name> |
10 | <listener- class >org.apache.axis.transport.http.AxisHTTPSessionListener</listener- class > |
14 | <servlet-name>AxisServlet</servlet-name> |
15 | <display-name>Apache-Axis Servlet</display-name> |
17 | org.apache.axis.transport.http.AxisServlet |
22 | <servlet-name>AdminServlet</servlet-name> |
23 | <display-name>Axis Admin Servlet</display-name> |
25 | org.apache.axis.transport.http.AdminServlet |
27 | <load-on-startup> 100 </load-on-startup> |
31 | <servlet-name>SOAPMonitorService</servlet-name> |
32 | <display-name>SOAPMonitorService</display-name> |
34 | org.apache.axis.monitor.SOAPMonitorService |
37 | <param-name>SOAPMonitorPort</param-name> |
38 | <param-value> 5001 </param-value> |
40 | <load-on-startup> 100 </load-on-startup> |
44 | <servlet-name>AxisServlet</servlet-name> |
45 | <url-pattern>/servlet/AxisServlet</url-pattern> |
49 | <servlet-name>AxisServlet</servlet-name> |
50 | <url-pattern>*.jws</url-pattern> |
54 | <servlet-name>AxisServlet</servlet-name> |
55 | <url-pattern>/services/*</url-pattern> |
59 | <servlet-name>SOAPMonitorService</servlet-name> |
60 | <url-pattern>/SOAPMonitor</url-pattern> |
63 | <!-- uncomment this if you want the admin servlet --> |
64 | <!-- <servlet-mapping> <servlet-name>AdminServlet</servlet-name> <url-pattern>/servlet/AdminServlet</url-pattern> |
65 | </servlet-mapping> --> |
68 | <!-- Default to 5 minute session timeouts --> |
69 | <session-timeout> 5 </session-timeout> |
72 | <!-- currently the W3C havent settled on a media type for WSDL; http: |
73 | for now we go with the basic 'it' s XML' response --> |
75 | <extension>wsdl</extension> |
76 | <mime-type>text/xml</mime-type> |
81 | <extension>xsd</extension> |
82 | <mime-type>text/xml</mime-type> |
85 | <welcome-file-list id= "WelcomeFileList" > |
86 | <welcome-file>index.jsp</welcome-file> |
87 | <welcome-file>index.html</welcome-file> |
88 | <welcome-file>index.jws</welcome-file> |
到此,我们可以歇口气啦,我们已经搭建好了一个简单的webservice了。
项目截图:
![](https://i-blog.csdnimg.cn/blog_migrate/e94fd4f190addd0ff3f0d24107cb2e31.jpeg)
该项目由于我对webservice不熟悉,所以只是把文档涉及到的代码搭建成了maven工程,花了不少时间也没验证通过,大家谁有能力的帮忙验证下吧。