JAX-WS之旅(二)
——Angel
注意:
1>在看本文之前需要您有一定的JAX-WS基础。
基础可以看相关的<<JAX-WS之旅(一)>>
网址:http://linxingliang.iteye.com/admin/blogs/1190850
2>版权归作者所有
3>允许随意使用
4>这是一个完整的例子,带有源码
5>图片不能复制上来,所以放在附件中。
?
目录
1.新建一个工程
2. 新建包
3. 建立所需要的类
3.1 WebService_Model类
3.2 WebService_Control类
3.3 编写服务器类
3.4 WebService_View类
?
前言
在JAX-WS我们简单的对webservice有了一定的了解,但是你会发现我们的所有代码都是放在同一个工程当中,并不能看出webservice的厉害之前。本节课我们将探索webservice的分层开发结构。
?
?
?
1.新建一个工程
这一步骤相信大家都应该没有问题了,再有问题,那就回家种田了,嘎嘎,跟家人们开个玩笑,别太在意呀。
但是这次建立工程并不是简单的建立一个工程了。我们要严格按照MVC模式进行编程,所以有关model的类我们放在一个工程里,有关
View的放在一个工程里,有关Control的放在一个工程里。
那么就需要我们建立三个工程:工程名分别为:
WebService_Model
WebService_View
WebService_Control
建立完成之后文件目录结构:
?
2. 新建包
在各个工程中建立包,各个工程所需要建立的包如下:
WebService_Model包如下:
net.angel.model
WebService_View包如下:
net.angel.view
WebService_Control包如下:
net.angel.control
建立完成之后文件目录结构:
?
3. 建立所需要的类
3.1 WebService_Model类
在工程WebService_Model工程中建立Person 类
代码如下:
package net.angel.model;
?
import java.io.Serializable;
import java.util.Date;
?
/**
?* Person model
?*
?* @author Administrator
?*
?*/
public class Person? implements Serializable{
??? private String id;// 编号
?
??? private String name;// 姓名
?
??? private String sex;// 性别
?
??? private int age;// 年龄
?
??? private Date birthday;// 出生年月
?
??? /**
??? ?* @return the id
??? ?*/
??? public String getId() {
??? ??? return id;
??? }
?
??? /**
??? ?* @param id
??? ?*??????????? the id to set
??? ?*/
??? public void setId(String id) {
?????? this.id = id;
??? }
?
??? /**
??? ?* @return the name
??? ?*/
??? public String getName() {
?????? return name;
??? }
?
??? /**
??? ?* @param name
??? ?*??????????? the name to set
??? ?*/
??? public void setName(String name) {
?????? this.name = name;
??? }
?
??? /**
??? ?* @return the sex
??? ?*/
??? public String getSex() {
?????? return sex;
??? }
?
??? /**
??? ?* @param sex
??? ?*??????????? the sex to set
??? ?*/
??? public void setSex(String sex) {
?????? this.sex = sex;
??? }
?
??? /**
??? ?* @return the age
??? ?*/
??? public int getAge() {
?????? return age;
??? }
?
??? /**
??? ?* @param age
??? ?*??????????? the age to set
??? ?*/
??? public void setAge(int age) {
?????? this.age = age;
??? }
?
??? /**
??? ?* @return the birthday
??? ?*/
??? public Date getBirthday() {
?????? return birthday;
??? }
?
??? /**
??? ?* @param birthday
??? ?*??????????? the birthday to set
??? ?*/
??? public void setBirthday(Date birthday) {
?????? this.birthday = birthday;
??? }
?
??? /**
??? ?*
??? ?*/
??? public Person() {
??????
??? }
?
??? /**
??? ?* @param id
??? ?* @param name
??? ?* @param sex
??? ?* @param age
??? ?* @param birthday
??? ?*/
??? public Person(String id, String name, String sex, int age, Date birthday) {
?????? this.id = id;
?????? this.name = name;
?????? this.sex = sex;
?????? this.age = age;
?????? this.birthday = birthday;
??? }
}
建立完成之后文件目录结构如下:
?
3.2 WebService_Control类
在工程WebService_Control工程中编写 IPersonService接口和PersonServiceImpl的实现类,代码分别如下:
IPersonService接口的代码(提供四个方法,增删改查):
在写代码之前需要我们做一下配置。因为Model类是大家都需要的,需要导入到我们其他的工程。现在我们就一起操作下如何把工程WebService_Model中的类让WebService_Control工程中的其他类使用。
具体步骤如下:
选中【WebService_Control】--【右键】--【Properties】--【Java Build Path】--右边选择【Projects】--【Add】--选择【WebService_Model】
?
?
图片操作:
?
OK完成之后在WebService_Control类中就可以使用Person类了。
现在让我们来编写IPersonService和PersonServiceImpl类吧。
IPersonService类的代码如下:
?
package net.angel.control;
?
import javax.jws.WebService;
?
import net.angel.model.Person;
?
?
/**
?* 操作Person的接口
?* @author Administrator
?*
?*/
@WebService//将该接口交给WebService进行管理
public interface IPersonService {
???
??? /**
??? ?* 保存数据方法
??? ?*/
??? public void save(Person person);
???
??? /**
??? ?* 删除数据方法
??? ?*/
??? public void delete(Person person);
???
??? /**
??? ?* 修改方法
??? ?*/
??? public void update(Person person);
???
??? /**
??? ?* 查询方法
??? ?*/
??? public void select(Person person);
}
?
PersonServiceImpl类的代码如下:
??? package net.angel.control;
?
import java.util.ArrayList;
import java.util.List;
?
import javax.jws.WebService;
?
import net.angel.model.Person;
?
/**
?* 实现类
?* @author Administrator
?*
?*/
?
// 定义客户端访问的WSDL服务名
@WebService(endpointInterface = "net.angel.control.IPersonService")
public class PersonServiceImpl implements IPersonService {
?
??? //用List进行保存,模拟保存到数据库
??? private List<Person> list = new ArrayList<Person>();
???
??? @Override
??? public void save(Person person) {
?????? list.add(person);
??? }
?
??? @Override
??? public String delete(Person person) {
?????? // TODO Auto-generated method stub
??????
?????? String alert = "";
?????? if(person == null){
?????????? alert = "删除失败! null对象 ";
?????? }else {
?????????? alert = "没有找到id:"+person.getId()+"--name:"+person.getName()+"的用户,无法进行删除";
?????????? int size = list.size();
?????????? for(int i=0;i<size;i++){
????????????? if(person.getId().equals(list.get(i).getId())){
????????????????? alert = "成功删除id:"+list.get(i).getId() +"--name:"+list.get(i).getName()+"的用户";
????????????????? list.remove(i);
????????????????? break;
?????????????????
????????????? }
?????????? }
?????? }
??????
?????? return alert;
??? }
?
??? @Override
??? public String update(Person person) {
?????? // TODO Auto-generated method stub
?????? String alert = "";
?????? if(person == null){
?????????? alert = "null对象,删除失败";
?????? }else {
?????????? alert = "没有找到id:"+person.getId()+"---name"+person.getName()+"的用户,无法进行更新。";
?????????? int size= list.size();
?????????? for(int i=0;i<size;i++){
????????????? if(person.getId().equals(list.get(i).getId())){
????????????????? list.set(i,person);
????????????????? break;
????????????? }
?????????? }
?????? }??
?????? return alert;
??? }
?
??? @Override
??? public Person select(String id) {
?????? // TODO Auto-generated method stub
?????? Person p = null;
??????
?????? for(Person person : list){
?????????? if(person.getId().equals(id)){
????????????? p = person;
????????????? break;
?????????? }
?????? }
??????
?????? return p;
??? }
}
完成这些之后文件的目录结构如下:
?
3.3 编写服务器类
为了方便讲解我们的服务类直接在WebService_Control工程中建立启动服务类,类名为StartServer
代码如下:
package net.angel.control;
?
import javax.xml.ws.Endpoint;
?
public class StartServer {
?
??? /**
??? ?* @param args
??? ?*/
??? public static void main(String[] args) {
?
?????? //启动服务
??? ??? Endpoint.publish("http://127.0.0.1:1988/angel",new PersonServiceImpl());
??????
?????? System.out.println("The Server is started!");
??? }
?
}
启动服务类:
在dos控制台可以看到:
完成之后文件目录结构如下:
?
3.4 WebService_View类
在工程WebService_View中编写类 PersonView。
在写之前,我们同样需要配置下:导入工程WebService_View和WebService_Control.(如果把接口类和实现类分开会更好。)
操作方式和上面的是一样的。
具体操作如下:
选中【WebService_View】--【Properties】--【Java Build Path】--【Projects】--【Add】--选中【WebService_Model】和【WebService_Control】工程--【OK】--【OK】.
图片操作略。
?
现在我们可以编写PersonView的代码了
代码如下:
?
package net.angel.view;
?
import java.net.MalformedURLException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.SimpleFormatter;
?
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
?
import net.angel.control.IPersonService;
import net.angel.model.Person;
?
public class PersonView {
?
??? public static void main(String[] args) throws MalformedURLException {
???????
??????? //url定位
??????? URL url = new URL("http://127.0.0.1:1988/angel");
???????
??????? //定位WSDL服务----http://control.angel.net这个是包名的倒序PersonServiceImplService
??????? QName qname = new QName("http://control.angel.net/","PersonServiceImplService");
???????
??????? //创建服务
??????? Service service = Service.create(url, qname);
???????
??????? //通过端口获取接口
??????? IPersonService personService = service.getPort(IPersonService.class);
???????
??????? System.out.println("连接成功!!!!!!!!!!");
???????
???????
??????? //模拟往数据库添加数据
??????? SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
??????? Calendar calendar = Calendar.getInstance();
???????
???????
??????? //第一个人
??????? calendar.set(1988,11,29);
??????? Person qian = new Person("080840238", "林祥纤","男", 24,calendar.getTime());
??????? personService.save(qian);
???????
??????? //第二个人
??????? calendar.set(1989, 10,12);
??????? Person miao = new Person("080840237","练端渺","男",23,calendar.getTime());
??????? personService.save(miao);
?
???????
??????? //第三个人
??????? calendar.set(1989, 6,10);
??????? Person bing = new Person("080840236","陈兵","男",23,calendar.getTime());
??????? personService.save(bing);
?
???????
??????? //第四个人
??????? calendar.set(1988, 6,10);
??????? Person yang = new Person("080840235","姜美洋","男",24,calendar.getTime());
???????
??????? //第五个人
??????? calendar.set(1988, 6,10);
??????? Person wei = new Person("080840234","张庆伟","男",24,calendar.getTime());
??????? personService.save(wei);
?
???????
??????? //第六个人 8 月相当于 9月
??????? calendar.set(1990,8,2);
??????? Person tong = new Person("080840233","韩雨彤","女",22,calendar.getTime());
??????? personService.save(tong);
?
???????
??????? //模拟查询
??????? Person person? = personService.select("080840233");
??????? System.out.println("模拟查找-------------------------");
??????? System.out.println("找到的信息为:id:"+person.getId()+"----姓名为:"+person.getName()+
??????????????? "生日为:"+format.format(person.getBirthday()));
???????
??????? //模拟删除
??????? Person pp = new Person();
??????? System.out.println(person.getId()+"========");
??????? String msg? = personService.delete(person);
??????? System.out.println("从服务器接受的信息:"+msg);
???????
??? }
}
?
?
?
?
运行该类:
在控制台可以看到如下信息:
终于完工了,可以休息了。
下次模拟一个更真实的系统,进行讲解。
系统为:学生管理系统,有学生对象和老师对象。
代码绝对的分离。
?
源码下载:
?
?
?
?