axis2之webservice新手超详细教程

更新时间:2024-04-13 02:14:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

AXIS2之WEBSERVICE新手超详细教程

---------------尚明

Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物。Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring、JSON等技术,本教程是主要阐述如何构建一个基本的Axis2 webservice应用,里面的许多环节高手可直接略过,本教程完全针对新手。

一、 环境安装 安装myeclipse 下载地址:

http://www.xlpan.com/file/4238159/48030981-6b56-40a4-a93b-8f424ee4f33a 安装mysql 下载地址:

http://www.xlpan.com/file/4238159/de64cf2f-4217-4e11-bb98-8e6c5dd24155

安装mysql-workbench(mysql可视化工具) 下载地址:

http://www.xlpan.com/file/4238159/becf913f-56a6-4d68-b248-134113b73535 安装tomcat

下载地址:

http://www.xlpan.com/file/4238159/ec6a2250-99ff-464e-a978-be184c96e4e7 下载Axis2服务包 下载地址:

http://www.xlpan.com/file/4238159/bb3db6e3-2f7d-4343-b472-c1fa714dba95 下载Axis2开发插件包 下载地址:

http://www.xlpan.com/file/4238159/aa39505f-079b-43be-9479-15a2d3e98cbb 安装jdk 下载地址:

http://www.xlpan.com/file/4238159/7ba342f9-277f-4b9c-b5e7-b0c5b7dfc151

二、

环境配置 1) Java环境配置

a) 设置JAVA_HOME 图1.

图2

设置JAVA_HOME= D:\\Program Files\\Java\\jdk1.6.0_10 * D:\\Program Files\\Java\\jdk1.6.0_10为笔者本机的JDK安装目录,请开发者根据实际安装路径来填写,注意环境变量最后面不能加分号,D:\\Program Files\\Java\\jdk1.6.0_10;这么写是错误的。 b) 设置CLASSPATH 图1

设置

CLASSPATH= .;%JAVA_HOME%\\lib;%JAVA_HOME%\\lib\\tools.jar

* 要加.表示当前路径 c) 设置path

设置

path=%JAVA_HOME%\\bin;%JAVA_HOME%\\jre\\bin

2) tomcat环境配置 a) 设置CATALINA_HOME

CATALINA_HOME=F:\\apache-tomcat-6.0.30

* F:\\apache-tomcat-6.0.30为笔者本机的JDK安装目录,请开发者根据实际安装路径来填写。 b) 测试Axis2服务包

将axis2服务包(axis2.war)放入F:\\apache-tomcat-6.0.30\\webapps下

点击F:\\apache-tomcat-6.0.30\\bin下的startup.bat文件

在浏览器中输入 http://localhost:8080/axis2/

若出现图中所示页面,那么说明axis2的服务包已经发布成功了;

按照图中所示配置tomcat

c) myeclipse下的jre配置

点击Java?InstalledJREs,点击Search按钮,选择D:\\Program Files\\Java\\jdk1.6.0_10路径(开发者根据实际路径自己调整)

如图中所示进行配置,点击OK

4) Mysql数据配置 a) 数据库安装配置

实例配置时,笔者选择的是服务器。

服务器字符集选择的是utf-8

点击New?Web Project新建一个Web工程

新建工程名为myservice,一直默认执行。

右键点击工程,右键菜单里选择Properties,将工程编码设置为UTF-8

b) 编写mysql数据库访问功能模块

将mysql的连接驱动包(mysql-connector-java-5.1.7-bin.jar)拷贝至WebRoot\\WEB-INF\\lib下

在src目录下新建一个database包,分别录入以下4个类,因为牵涉到jdbc封装类的开发,这里就不详细阐述,仅贴出源代码。

(一) ConnectionFactory.java (连接工厂类)

package database; import java.sql.Connection; import java.sql.DriverManager; import java.util.ResourceBundle;

/** 类名:ConnectionFactory
* 作用:产生数据库连接对象
* 属性:

* 方法:Connection getConnection()
* 作用:返回数据库连接对象
* 参数:无

* 返回:数据库连接对象

* 其它:返回的aConnection不会自动提交JDBC事务
* 创建人:陶尚明
* */

public abstract class ConnectionFactory { /** 数据库系统的属性文件名: */

private static final String propertiesFileName = \;

/** 获取Connection对象 *

* @return Connection对象

* @throws Exception SqlException异常 */

static synchronized public Connection getConnection() throws Exception {

String dbSystem=null;

Connection aConnection;

ResourceBundle db = ResourceBundle.getBundle(\); //读取配置文件

dbSystem=db.getString(propertiesFileName);

ResourceBundle rb = ResourceBundle.getBundle(dbSystem); //读取配置文件

Class.forName(rb.getString(\)).newInstance();

aConnection =

DriverManager.getConnection(rb.getString(\),rb.getString(\database.username\),rb.getString(\)); //创建aConnection对象

aConnection.setAutoCommit(false); //设置不自动提交事务

return aConnection; //返回aConnection对象 }

/** 当前使用的数据库系统名称 *

* @param echoable 如果启用回显将在控制台输出描述当前数据库系统的信息

* @return dbSystem 数据库系统名称 */

public static String getCurrentDBMS(boolean echoable) { String dbSystem=null;

ResourceBundle rb = ResourceBundle.getBundle(\); //读取配置文件

dbSystem=rb.getString(propertiesFileName);

if (echoable)System.out.println(\are \+dbSystem); return dbSystem; } }

(二) IOperationCore.java(数据库操作接口)

/**

* 数据库常用操作封装 */

package database;

import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collection;

/** 类名:IOperationCore
*

* 作用: 该接口封装了数据库操作的大部分方法
*

* 创建人:陶尚明
*/

public interface IOperationCore { /** sql更新语句 *

* @param queryString 查询语句

* @return 返回一个ResultSet结果集

*

* @exception SQLException */

ResultSet executeQuery(String queryString) throws SQLException; /**

* sql更新语句 *

* @param updateString 数据库更新语句 * @return 更新数据库影响行数 *

* @exception SQLException */

int executeUpdate(String updateString) throws SQLException; /**

* 读取行个数 *

* @param queryString 查询语句

* @return Transact-SQL 查询后的虚拟表的行数 *

* @exception SQLException */

int getRowCount(String queryString) throws SQLException; /**

* 读取列数个数 *

* @param queryString 查询语句

* @return Transact-SQL 查询后的虚拟表的列数 *

* @exception SQLException */

int getColumnCount(String queryString) throws SQLException; /** * 读取列名 *

* @param columIndex 列索引

* @param queryString 提供ResultSet二维表的查询字符串 * @return ResultSet表中的指定的列名 *

* @exception SQLException */

String getColumnName(int columIndex, String queryString) throws SQLException; /**

* 读取queryString查询结果集ResultSet表中的所有列名 *

* @param queryString 用于返回ResultSet结果集的语句

* @return 表中的所有列名

* @throws SQLException */

Collection getColumnNames(String queryString) throws SQLException; /**

* 读取queryString查询结果集ResultSet表中的所有字段类型名称 *

* @param queryString 用于返回查询结果集的语句 * @return 表中的所有字段类型名称 * @throws SQLException */

Collection getColumnTypeNames(String queryString) throws SQLException; /**

* 获取ResultSet二维表中指定位置的值,目前只支持mysql *

* @param rowIndex 行索引 * @param columnIndex 列索引

* @param queryString 产生一个ResultSet结果集的查询语句 * @return 指定位置的数据记录 *

* @exception SQLException */

Object getValueAt(int rowIndex, int columnIndex, String

queryString) throws SQLException; /** * 释放系统连接资源 *
一旦关闭,数据库的操作将全部无效 * @exception SQLException 如果关闭失败将抛出SQLException*/ void dispose() throws SQLException; } (三) OperationCoreImpl.java(数据库操作接口实现)

package database; import java.sql.Connection; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Collection; /** 类名:OperationCoreImplements
* * 作用: 该类实现IOperationCore接口的所有方法
*

* 创建人:陶尚明
* */

public class OperationCoreImpl implements IOperationCore { protected Connection aConnection = null; protected Statement aStatement = null; protected ResultSet aResultSet = null; protected ResultSetMetaData rsmd = null;

protected static OperationCoreImpl m_instance = null;

/** Singleton 即单例(态)模式,用来生成对象唯一实例的方法 *

* @return OperationCoreImplements的一个实例 * @throws Exception */

public static OperationCoreImpl createFactory() throws Exception { if(m_instance==null)

m_instance=new OperationCoreImpl();

return m_instance; }

/** @exception Exception */

private OperationCoreImpl() throws Exception {

init();

} /**

* 负责初始化Connection连接 * @throws Exception */

private void init() throws Exception{

aConnection=ConnectionFactory.getConnection();

} /**

* 释放系统连接资源

*
一旦关闭,数据库的操作将全部无效

*/

public void dispose() { try {

if(aResultSet!=null)

aResultSet.close();

} catch (SQLException e) {

}

e.printStackTrace();

try {

if(aStatement!=null)

aStatement.close();

} catch (SQLException e) { } try {

if(aConnection!=null)

aConnection.close();

e.printStackTrace();

} catch (SQLException e) { } }

/** sql更新语句 *

* @param queryString 查询语句

e.printStackTrace();

* @return 返回一个ResultSet结果集 *

* @exception SQLException */

public ResultSet executeQuery(String queryString) {

try {

aStatement = aConnection.createStatement(); aResultSet = aStatement.executeQuery(queryString);

} catch (SQLException e) { }

aResultSet=null; e.printStackTrace();

return aResultSet; } /**

* sql更新语句 *

* @param updateString 数据库更新语句 * @return 更新数据库影响行数 *

* @exception SQLException */

public int executeUpdate(String updateString) {

int effectedRows=0; try{

aConnection.setAutoCommit(false);

aStatement = aConnection.createStatement(); effectedRows =

aStatement.executeUpdate(updateString); }

aConnection.commit();

}catch(SQLException ex){ }

return effectedRows;

System.out.println(\数据库写操作失败!\if(aConnection!=null) { }

try {

aConnection.rollback();

System.out.println(\事务回滚成功\

} catch (SQLException e) { }

System.out.println(\事务回滚失败\e.printStackTrace();

/**

* 读取queryString查询结果集ResultSet表中的所有列名 *

* @param queryString 用于返回ResultSet结果集的语句

* @return 表中的所有列名 * @throws SQLException */

public Collection getColumnNames(String queryString) {

ArrayList ColumnNames=new ArrayList(); try {

aResultSet=executeQuery(queryString);

ResultSetMetaData rsmd=aResultSet.getMetaData(); int j=rsmd.getColumnCount(); for(int k=0;k

ColumnNames.add(rsmd.getColumnName(k+1));

} catch (SQLException e) {

ColumnNames=null; e.printStackTrace();

}

return ColumnNames; } /**

* 读取queryString查询结果集ResultSet表中的所有字段类型名称 *

* @param queryString 用于返回查询结果集的语句 * @return 表中的所有字段类型名称 * @throws SQLException */

public Collection getColumnTypeNames(String queryString) {

ArrayList ColumnNames=new ArrayList(); try {

aResultSet=executeQuery(queryString);

ResultSetMetaData rsmd=aResultSet.getMetaData(); int j=rsmd.getColumnCount(); for(int k=0;k

ColumnNames.add(rsmd.getColumnTypeName(k+1));

}

} /**

} catch (SQLException e) { }

return ColumnNames;

ColumnNames=null; e.printStackTrace();

* 读取列名 *

* @param columIndex 列索引

* @param queryString 提供ResultSet二维表的查询字符串 * @return ResultSet表中的指定的列名 *

* @exception SQLException */

public String getColumnName(int columIndex, String queryString)

{

String columnName=null; try {

aResultSet=executeQuery(queryString); rsmd=aResultSet.getMetaData();

columnName=rsmd.getColumnName(columIndex + 1);

} catch (SQLException e) { }

return columnName; } /**

* 读取列数个数 *

* @param queryString 查询语句

* @return Transact-SQL 查询后的虚拟表的列数 *

* @exception SQLException */

public int getColumnCount(String queryString) { int columnCount=0; try {

aResultSet=executeQuery(queryString);

ResultSetMetaData rsmd=aResultSet.getMetaData(); columnCount = rsmd.getColumnCount(); e.printStackTrace();

} catch (SQLException e) { }

e.printStackTrace();

return columnCount; } /**

* 读取行个数 *

* @param queryString 查询语句

* @return Transact-SQL 查询后的虚拟表的行数 *

* @exception SQLException */

public int getRowCount(String queryString) { int rowCount=0; try {

aResultSet=executeQuery(queryString); while(aResultSet.next())

rowCount=aResultSet.getInt(1);

} catch (SQLException e) { }

return rowCount; }

e.printStackTrace();

/**

* 获取ResultSet二维表中指定位置的值,目前只支持mysql *

* @param rowIndex 行索引 * @param columnIndex 列索引

* @param queryString 产生一个ResultSet结果集的查询语句 * @return 指定位置的数据记录 *

* @exception SQLException */

public Object getValueAt(int rowIndex, int columnIndex, String queryString) { Object values=null; try {

aResultSet=executeQuery(queryString); //指针下移一行

aResultSet.absolute(rowIndex + 1);

values=aResultSet.getObject(columnIndex + 1);

} catch (SQLException e) { }

return values; }

e.printStackTrace();

}

(四) DBOperationAdapter.java (对用户透明的数据库操作类)

package database;

import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collection;

/** 类名:DBOperationAdapter

* 作用: 该类中的所有方法对用户透明,提供数据库操作的常用方法
*

* 说明:该类使用了Adapter 模式与 Singleton 模式,

* 类自身为Adpater,OperationCoreImplements为Adapte类;
* 实例化类自生对象的时候用到了Singleton模式,

* 即DBOperationAdapter.getInstance()
* 创建人:陶尚明
*/

public class DBOperationAdapter extends ConnectionFactory {

private static IOperationCore objIOperationCore = null; private static DBOperationAdapter m_instance = null;

private DBOperationAdapter() { try {

objIOperationCore=OperationCoreImpl.createFactory();

} catch (Exception e) { } }

public static DBOperationAdapter getInstance() { if(m_instance==null)

m_instance=new DBOperationAdapter(); e.printStackTrace();

return m_instance; }

/** sql更新语句 *

* @param queryString 查询语句

* @return 返回一个ResultSet结果集 *

本文来源:https://www.bwwdw.com/article/9o0p.html

Top