IDEA2020使用Axis2服务创建简单的Web Server通信服务

1、引言

最近由于要提交课程作业的缘故所以学习了Web Service相关技术,学习了Axis2技术,该技术虽然较老,但是可能还有人用,所以在这边对其用法做一个简单介绍。由于Axis2配置以及使用方法较多,本文不赘述所有方法,只介绍IDEA中对其的简单食用过程,或许会对入门的小伙伴有一定作用。

2、下载文件

IDEA(需配置好Java所需jdk以及jre,在此不做赘述)下载链接(建议使用正版,学生认证后可免费)

Axis2:下载链接

目前最新版本是1.7.9,建议下载以下框出来的几个文件备用。

image-20210406224122086

Tomcat:下载链接

3、Axis2配置

3.1 IDEA中的Axis2插件

在setting里找到plugin,然后在图中位置找到对应按钮进行安装我们下载好的axis2-idea-plugin-1.7.9.zip这个插件包。

image-20210406224702739

3.2 安装axis插件到Tomcat

我们把下载下来的 axis2-1.7.9-war.zip文件直接放到tomcat安装目录下的webapps下即可。

我们下载的axis2-1.7.9-bin.zip文件解压备用,当我们写程序找不到相应的引用包时,可以在此文件夹的lib文件夹中找到。

4 创建Web项目

4.1 打开IDEA2020,创建Java项目

image-20210406225513277

创建成功的Java项目如图所示:

image-20210406225600346

4.2 创建服务端程序

在项目上右击,选择图中选项

image-20210406225724830

按下图所示操作:

image-20210406225842075

正确操作后,项目目录应该如图所示。

image-20210406225941887

4.3 修改服务端程序

服务端程序如下,我在这里读取了数据库,大家可以自己做一下或者换成别的。

数据库谓mysql数据库,表结构如下:

数据表 为Student (SNO, SName, SGender, SBrithday),填入三十条数据

使用数据库时记得导入驱动!!!!!

package example;
import bean.student;
import javax.jws.WebMethod;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class HelloWorld {
    student stuInfor = new student();
        // 返回一维字符串数组
        @WebMethod
        public String[] getMDArray ()
        {
            Connection con;
            //jdbc驱动
            String driver = "com.mysql.cj.jdbc.Driver";
            //这里我的数据库是fwjs
            String url = "jdbc:mysql://localhost:3306/fwjs";
            String user = "fwjs";
            String password = "fuwujisuan";
            //List<student> strArray = new ArrayList();
            String [] strArry = new String[30];
            strArry[0]= String.valueOf(0);
            try {
                //注册JDBC驱动程序
                Class.forName(driver);
                //建立连接
                con = DriverManager.getConnection(url, user, password);
                if (!con.isClosed()) {
                    System.out.println("数据库连接成功");
                    strArry[1]= String.valueOf(1);
                }
                Statement stmt = con.createStatement();
                String sql;
                sql = "select * from student";
                ResultSet stu = stmt.executeQuery(sql);
                int i = 0;
                while (stu.next()) {
//                    student stuInfor = new student();
                    stuInfor.setSno(stu.getString("SNO"));
                    stuInfor.setSbrithday(stu.getString("SBirthday"));
                    stuInfor.setSname(stu.getString("SName"));
                    stuInfor.setSgender( stu.getString("SGender"));
                    strArry[i]= String.valueOf("学号:") + stu.getString("SNO") + String.valueOf("  姓名:") + stu.getString("SName") + String.valueOf("  性别:") + stu.getString("SGender") + String.valueOf("  生日:") + stu.getString("SBirthday");
                    i++;
                }
            } catch (ClassNotFoundException e) {
                System.out.println("数据库驱动没有安装");
                strArry[1]= String.valueOf(2);
            } catch (SQLException e) {
                e.printStackTrace();
                System.out.println("数据库连接失败");
                strArry[1]= String.valueOf(3);
            }
            return strArry;
        }
}

另外,由于我此处建立了student对象,大家可以建立bean包,然后建立student类

以下为bean.student的代码

package bean;

public class student {
    private String sno;

    private String sname;

    private String sgender;

    private String sbrithday;

    public String getSno() {
        return sno;
    }

    public void setSno(String sno) {
        this.sno = sno == null ? null : sno.trim();
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname == null ? null : sname.trim();
    }

    public String getSgender() {
        return sgender;
    }

    public void setSgender(String sgender) {
        this.sgender = sgender == null ? null : sgender.trim();
    }

    public String getSbrithday() {
        return sbrithday;
    }

    public void setSbrithday(String sbrithday) {
        this.sbrithday = sbrithday == null ? null : sbrithday.trim();
    }

    @Override
    public String toString() {
        return "StudentInfo{" +
                "snumber='" + sno + '\'' +
                ", sname='" + sname + '\'' +
                ", sgender='" + sgender + '\'' +
                ", sbrithday='" + sbrithday + '\'' +
                '}';
    }
}

现在目录结构如图

image-20210406230846654

4.4 生成wsdl文件

按下图操作

image-20210406230941305
image-20210406230944420

这时会自动生成wsdl文件。

image-20210406231028404

5 配置服务端

按下图所示操作:

image-20210406231151440
image-20210406231348880
image-20210406231353889

上图中框中要改为/

通过file打开project structure,选择Artifacts,发现右下角有个FIX,点击,选择Add····

image-20210406231533807

6运行服务端

点击运行,在浏览器输入网址localhost:8080/services,看到HelloWorld(wsdl)表示我们已经成功发布。

image-20210406231738463

7 创建客户端

创建client包,然后下边创建ComplexTypeRPCClient类,该类代码如下

package client;

import bean.student;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

import javax.xml.namespace.QName;
import java.util.Scanner;

public class ComplexTypeRPCClient
{
    public static void main(String[] args) throws Exception
    {
        RPCServiceClient serviceClient = new RPCServiceClient();
        Options options = serviceClient.getOptions();
        EndpointReference targetEPR = new EndpointReference("http://localhost:8080/services/HelloWorld");
        options.setTo(targetEPR);

        QName opAddEntry = new QName("http://ws.apache.org/axis2", "getMDArray");
        String[] strArray = (String[]) serviceClient.invokeBlocking(opAddEntry,
                new Object[]{}, new Class[]{String[].class })[0];
        for (String s : strArray)
            System.out.println(s + " ");
        System.out.println();
    }
}

在创建该类时,可能会报缺少axis2包的错误,我们这时就可以导入bin包下的lib文件夹中的jar包来解决问题

8 运行客户端

在保证服务端以及tomcat正常运行的前提下,运行客户端。可以得到结果。

image-20210406232948670

参考

评论

  1. ssss
    3年前
    2021-4-08 16:39:40

    66666666

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇