如何利用Tomcat部署WebService进行客户端开发.docx
《如何利用Tomcat部署WebService进行客户端开发.docx》由会员分享,可在线阅读,更多相关《如何利用Tomcat部署WebService进行客户端开发.docx(26页珍藏版)》请在冰豆网上搜索。
如何利用Tomcat部署WebService进行客户端开发
如何利用Tomcat部署WebService服务进行客户端开发
环境的准备:
下载jaxws-ri-2.2.5包。
一、开发并发布WebService
在这里是通过jax在tomcat部署并发布WebService的,当然发布WebService还有其他
的方法,在这里有兴趣的读者可以深入研究,这里不再多做阐述。
我们先发布一个简单的WebService,逐步的添加其他功能。
首先从服务器端开始。
1.1
新建一个WebServiceproject/Webproject,
在这里我新建的名字为SSHSystemWebService。
接着新建包,包名为com.system.webservice。
接着步入正题。
开始编写我们的service。
这里新建一个接口,取名叫MyUserService。
在这个service中,打算提供用户登录、添加用户、删除用户、得到用户列表四个功能。
编写MyUserService.java:
packagecom.system.webservice;
importjava.util.List;
importjavax.jws.WebParam;
importjavax.jws.WebService;
importcom.system.entity.User;
@WebService
publicinterfaceMyUserService{
publicvoidadd(@WebParam(name="user")Useruser);
publicvoiddelete(@WebParam(name="user")Useruser);
publicListlist();
publicUserlogin(@WebParam(name="username")Stringusername,
@WebParam(name="password")Stringpassword);
}
上面红色@WebService是java自提供的注解,表示这是一个webService。
@WebParam(name="user")表示这个参数在wsdl中的名字是user,如果你没有指定,这个参数可能会是arg0等,为了让参数和我们本地服务器端的参数名统一起来,建议用这个@WebParam注解。
1.2接着编写实现类
新建一个实现类,这里取名叫:
MyUserServiceImpl,实现MyUserService接口
MyUserServiceImpl.java
packagecom.system.webservice;
importjava.util.List;
importjavax.jws.WebService;
importcom.system.dao.UserDao;
importcom.system.entity.User;
@WebService(endpointInterface="com.system.webservice.MyUserService",
wsdlLocation="WEB-INF/META-INF/wsdl/service.wsdl",
portName="UserServicePort",
serviceName="UserService",
targetNamespace="
publicclassMyUserServiceImplimplementsMyUserService{
publicUserDaouserDao=newUserDao();
publicUserDaogetUserDao(){
returnuserDao;
}
publicvoidsetUserDao(UserDaouserDao){
this.userDao=userDao;
}
publicUserlogin(Stringusername,Stringpassword){
System.out.println("[Service:
]Login(Method)isrunning@!
");
returnuserDao.login(username,password);
}
publicvoidadd(Useruser){
System.out.println("[Service:
]CreateUser(Method)isrunning@!
");
userDao.createUser(user);
}
publicListlist(){
System.out.println("[Service:
]UserList(Method)isrunning@!
");
returnuserDao.getUserList();
}
publicvoiddelete(Useruser){
System.out.println("[Service:
]Delete(Method)isrunning@!
");
userDao.deleteUser(user);
}
}
上面红色@WebService(endpointInterface"com.system.webservice.MyUserService")
暂时只需要这个注解参数,后面的注解在这里可以不理会。
他的意思是这个WebService的接口是谁。
在这里写上具体的包名和类名。
1.3现在一个简单的WebService已经写好,接着写发布类进行发布,测试是否成功。
新建一个类,这里取名叫做MyServiceStart
MyServiceStart.java:
packagecom.system.webservice;
importjavax.xml.ws.Endpoint;
publicclassMyServiceStart{
publicstaticvoidmain(String[]args){
Endpoint.publish("http:
//localhost:
8688/ssh",newMyUserServiceImpl());
}
}
Java中自带的封装类,进行WebService的发布。
Publish中的第一个参数,是我们发布的url,就是由你指定通过哪个地址来访问你刚刚发布的服务。
第二个参数是这个服务的具体实现类对象。
接着,我们运行这个这个类,然后访问http:
//localhost:
8688/ssh地址,进行测试。
如果出现能出现该页面,说明发布成功。
可以通过该http:
//localhost:
8688/ssh?
xsd=1地址查看具体的元素定义。
OK,到此,一个简单的WebService发布成功。
2但是我们的目的远没有达到。
我们希望把自己的WebService部署到类似Tomcat的服务器上,可以提供一个接口给开发人员。
而不去关心这个调用这个接口所依赖的系统和开发语言。
2.1在这里,提供的用户登录、添加用户、删除用户、得到用户列表四个功能都将具体的依赖于数据库。
所以第一步需要建立数据库。
表名为user_login,并插入了三条数据。
既然是WebProject,在这里就整用了Hebrinate进行数据库的操作。
2.2新建包,包名为com.system.entity.新建一个实体类,叫做User
User.class:
packagecom.system.entity;
publicclassUser{
privateintuserId;
privateStringusername;
privateStringpassword;
publicintgetUserId(){
returnuserId;
}
publicvoidsetUserId(intuserId){
this.userId=userId;
}
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicUser(){
super();
}
publicUser(intuserId,Stringusername,Stringpassword){
super();
this.userId=userId;
this.username=username;
this.password=password;
}
}
User类有三个属性,username.password,userId.和数据库中的user_login表的列相对应。
接着进行user.hbm.xml的编写:
xmlversion="1.0"encoding='utf-8'?
>
DOCTYPEhibernate-mappingPUBLIC
"-//Hibernate/HibernateMappingDTD3.0//EN"
"http:
//www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
oracl_sequence
这里就不再对配置文件进行过多的阐述和说明了。
编写hibernate.cfg.xml:
xmlversion='1.0'encoding='utf-8'?
>
DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN""http:
//www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
--Databaseconnectionsettings-->
oracle.jdbc.driver.OracleDriver
jdbc:
oracle:
thin:
@localhost:
1521:
ORCL
scott
orcl
--SQLdialect-->
org.hibernate.dialect.OracleDialect
true
--EchoallexecutedSQLtostdout-->
true
2.3OK,到这一步,hibernate的基本配置都OK了。
前提是你已经引入需要的jar包。
接下来就是我们具体的实现了。
也就是我们常说的dao层。
新建包,包名为com.system.dao.新建类,类名为UserDao
UserDao.class:
packagecom.system.dao;
importjava.util.List;
importorg.hibernate.Query;
importorg.hibernate.Session;
importorg.hibernate.Transaction;
importorg.hibernate.cfg.Configuration;
importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;
importcom.system.entity.User;
publicclassUserDaoextendsHibernateDaoSupport{
publicvoidcreateUser(Useruser){
Sessionsession=newConfiguration().configure().buildSessionFactory().openSession();
Transactiontran=session.beginTransaction();
session.save(user);
mit();
session.close();
}
publicvoiddeleteUser(Useruser){
Sessionsession=newConfiguration().configure().buildSessionFactory().openSession();
Transactiontran=session.beginTransaction();
session.delete(user);
mit();
session.close();
}
publicUserlogin(Stringusername,Stringpassword){
Listusers=this.getUserList();
intsize=users.size();
Usertempuser;
for(inti=0;itempuser=users.get(i);
if(tempuser.getUsername().equals(username)&&
tempuser.getPassword().equals(password)){
returntempuser;
}
}
returnnull;
}
@SuppressWarnings("unchecked")
publicListgetUserList(){
Stringstr="fromUser";
Sessionsession=newConfiguration().configure().buildSessionFactory().openSession();
Queryquery=session.createQuery(str);
Listusers=query.list();
session.close();
returnusers;
}
}
准确的说,基本的hibernate配置都已经好了,我们编写测试类进行测试。
引入Junit需要的jar包。
这里我就不贴代码了,我的测试结果OK,可以自行测试。
同样的,进行运行MyServiceStart类,进行发布。
测试加入Hibernate框架后的service能够正常运行。
可以通过MyEcplise快捷方便的进行访问。
输入url,点击GO。
可以输入参数,运行提供的服务,接着查看结果。
为了简洁,这块可以自己去操作,这里也不再一步一步的贴上操作截图了。
2.3到了最重要的一步了。
部署到Tomcat中。
在该WebProject中的WebRoot/WEB-INF新建文件夹META-INF,再在该新建文件夹下新建wsdl文件夹。
接着在wsl文件夹下新建service.wsdl。
最后的目录结构如下:
编写service.wsdl,可以通过访问http:
//localhost:
8688/ssh?
wsdl得到wsdl。
可以拷贝一些固定格式的一些配置。
然后在我们访问得到的wsdl中,具体的元素定义是在
http:
//localhost:
8688/ssh?
xsd=1中的,为了程序的移植性考虑,这里新建一个service.xsd存放元素定义。
最终service.xsd:
xmlversion="1.0"encoding="UTF-8"standalone="no"?
>
schemaxmlns:
tns="
xmlns:
xsd="http:
//www.w3.org/2001/XMLSchema"elementFormDefault="qualified"
targetNamespace="
elementname="add"type="tns:
add"/>
elementname="addResponse"type="tns:
addResponse"/>
elementname="delete"type="tns:
delete"/>
elementname="deleteResponse"type="tns:
deleteResponse"/>
elementname="list"type="tns:
list"/>
elementname="listResponse"type="tns:
listResponse"/>
elementname="login"type="tns:
login"/>
elementname="loginResponse"type="tns:
loginResponse"/>
complexTypename="add">
sequence>
elementname="user"type="tns:
user"/>
sequence>
complexType>
complexTypename="addResponse">
sequence/>
complexType>
complexTypename="delete">
sequence>
elementname="username"type="xsd:
string"/>
sequence>
complexType>
complexTypename="deleteResponse">
sequence/>
complexType>
complexTypename="list">
sequence/>
complexType>
complexTypename="listResponse">
sequencemaxOccurs="unbounded"minOccurs="1">
elementname="user"type="tns:
user"/>
sequence>
complexType>
complexTypename="login">
sequence>
elementname="username"type="xsd:
string"/>
elementname="password"type="xsd:
string"/>
sequence>
complexType>
complexTypename="loginResponse">
sequence>
elementname="user"type="tns:
user"/>
sequence>
complexType>
complexTypename="user">
sequence>
elementname="username"type="xsd:
string"/>
elementname="password"type="xsd:
string"/>
elementname="userId"type="xsd:
int"/>
sequence>
complexType>
schema>
因为在上次的培训过程中,我已经讲过这些配置文件中的各个含义。
这里就直接贴上代码了。
service.wsdl:
xmlversion="1.0"encodi