服务端代码
代码总览
DBConnection.java
package com.itlwc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnection {
private static Connection conn;
private String user = "sa";
private String password = "sa";
private String className = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
private String url = "jdbc:microsoft:sqlserver:" +
"//localhost:1433;SelectMethod=Cursor;dataBaseName=itlwc";
private DBConnection() {
try {
Class.forName(this.className);
conn = DriverManager.getConnection(url, user, password);
System.out.println("连接数据库成功");
} catch (ClassNotFoundException e) {
System.out.println("连接数据库失败");
} catch (SQLException e) {
System.out.println("连接数据库失败");
}
}
@SuppressWarnings("static-access")
public static Connection getConn() {
return new DBConnection().conn;
}
// 测试数据库连接是否成功
public static void main(String[] args) {
getConn();
}
}
Student.java
package com.itlwc;
public class Student {
// 学号
private String id;
// 姓名
private String name;
// 性别
private String sex;
// 年龄
private String age;
public Student() {
super();
}
public Student(String id, String name, String sex, String age) {
super();
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "学号: " + id + "\n姓名: " + name + "\n性别: " + sex + "\n年龄: " + age;
}
}
IStudent.java
package com.itlwc;
public interface IStudent {
// 增加学生
public boolean add(Student student);
// 查找学生
public Student find(String id);
}
StudentImpl.java
package com.itlwc;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class StudentImpl implements IStudent {
private Connection conn = DBConnection.getConn();
// 增加
public boolean add(Student student) {
String sql = "insert into student values('" + student.getId() + "','"
+ student.getName() + "','" + student.getSex() + "','"
+ student.getAge() + "')";
PreparedStatement ps = null;
try {
ps = conn.prepareStatement(sql);
ps.executeUpdate();
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
// 查询
public Student find(String id) {
String sql = "select * from student where id='" + id + "'";
Student student = new Student();
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
if (rs.next()) {
student.setId(rs.getString(1));
student.setName(rs.getString(2));
student.setSex(rs.getString(3));
student.setAge(rs.getString(4));
}
} catch (SQLException e) {
e.printStackTrace();
}
return student;
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
services.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<service xmlns="http://xfire.codehaus.org/config/1.0">
<name>Student</name>
<serviceClass>
com.itlwc.IStudent
</serviceClass>
<implementationClass>
com.itlwc.StudentImpl
</implementationClass>
</service>
</beans>
http://localhost:8090/MyService/services/Student?wsdl
<?xml version="1.0" encoding="UTF-8" ?>
<wsdl:definitions targetNamespace="http://itlwc.com"
xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding"
xmlns:tns="http://itlwc.com"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<wsdl:types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="qualified" elementFormDefault="qualified"
targetNamespace="http://itlwc.com">
<xsd:complexType name="Student">
<xsd:sequence>
<xsd:element minOccurs="0" name="age"
nillable="true" type="xsd:string" />
<xsd:element minOccurs="0" name="id" nillable="true"
type="xsd:string" />
<xsd:element minOccurs="0" name="name"
nillable="true" type="xsd:string" />
<xsd:element minOccurs="0" name="sex"
nillable="true" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="add">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1"
name="in0" nillable="true" type="tns:Student" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="addResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1"
name="out" type="xsd:boolean" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="find">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1"
name="in0" nillable="true" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="findResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1"
name="out" nillable="true" type="tns:Student" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="addRequest">
<wsdl:part name="parameters" element="tns:add" />
</wsdl:message>
<wsdl:message name="findResponse">
<wsdl:part name="parameters" element="tns:findResponse" />
</wsdl:message>
<wsdl:message name="findRequest">
<wsdl:part name="parameters" element="tns:find" />
</wsdl:message>
<wsdl:message name="addResponse">
<wsdl:part name="parameters" element="tns:addResponse" />
</wsdl:message>
<wsdl:portType name="StudentPortType">
<wsdl:operation name="add">
<wsdl:input name="addRequest" message="tns:addRequest" />
<wsdl:output name="addResponse" message="tns:addResponse" />
</wsdl:operation>
<wsdl:operation name="find">
<wsdl:input name="findRequest" message="tns:findRequest" />
<wsdl:output name="findResponse" message="tns:findResponse" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="StudentHttpBinding"
type="tns:StudentPortType">
<wsdlsoap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="add">
<wsdlsoap:operation soapAction="" />
<wsdl:input name="addRequest">
<wsdlsoap:body use="literal" />
</wsdl:input>
<wsdl:output name="addResponse">
<wsdlsoap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="find">
<wsdlsoap:operation soapAction="" />
<wsdl:input name="findRequest">
<wsdlsoap:body use="literal" />
</wsdl:input>
<wsdl:output name="findResponse">
<wsdlsoap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="Student">
<wsdl:port name="StudentHttpPort"
binding="tns:StudentHttpBinding">
<wsdlsoap:address
location="http://localhost:8090/MyService/services/Student" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
客户端代码
代码总览
客户端中IStudent,Student两个java文件与服务端中IStudent,Student是一样的
Test.java
package com.itlwc;
import java.net.MalformedURLException;
import org.codehaus.xfire.XFire;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
public class Test {
public static void main(String[] args) {
//创建web服务的元数据
Service service = new ObjectServiceFactory().create(IStudent.class);
//创建web服务代理
XFire xFire = XFireFactory.newInstance().getXFire();
XFireProxyFactory factory = new XFireProxyFactory(xFire);
//服务地址(注意这个url地址后面不带?wsdl)
String url = "http://192.168.0.161:8080/MyService/services/Student";
//生成web服务调用对象
try {
IStudent is = (IStudent)factory.create(service, url);
//增加方法
boolean b = is.add(new Student("1001","李文超","男","18"));
if(b){
System.out.println("增加成功");
}else{
System.out.println("增加失败");
}
//查询方法
Student student = is.find("1001");
System.out.println(student.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
/*
打印结果
增加成功
学号: 1001
姓名: 李文超
性别: 男
年龄: 18
*/