zoukankan      html  css  js  c++  java
  • 在java项目中使用webservice

    今天学习webservice,主要参考了网络上的一些文章。

    1.关于原理的介绍:个人认为这篇文章写得不错了,戳这里。

    2.关于demo的编写:个人认为这篇文章很简洁,也能运行成功,戳这里。

    按照上面那篇文章的demo运行成功以后,我想在java web中加入一个webservice服务,供其他的java web项目调用。

    1.首先,在项目中添加com.xdx.webservice包,如图所示。

    2.在其中加入WetherServiceInter接口和其实现类WeatherService类。代码如下。

    package com.xdx.webservice;
    
    import javax.jws.WebMethod;
    import javax.jws.WebService;
    
    import com.xdx.entity.TAdmin;
    
    @WebService
    public interface WeatherServiceInter {
        @WebMethod
        public String getWeatherByCityname(String name);
        public TAdmin getAdminById(int adminId);
    
    }
    package com.xdx.webservice;
    
    import javax.jws.WebService;
    
    import org.springframework.web.context.ContextLoader;
    import org.springframework.web.context.WebApplicationContext;
    
    import com.xdx.entity.TAdmin;
    import com.xdx.service.AdminService;
    
    @WebService
    public class WeatherService implements WeatherServiceInter {
    
        public String getWeatherByCityname(String name) {
            System.out.println(name+"天气晴朗");
            return name+"天气晴朗";
        }
        public TAdmin getAdminById(int adminId){
            WebApplicationContext webApplicationContext = ContextLoader
                    .getCurrentWebApplicationContext();
            AdminService adminService=(AdminService) webApplicationContext.getBean("adminService");
            TAdmin admin = adminService.getAdminById(adminId);
            return admin;
        }
    
    }

    3.发布webservice服务,这边我们在web项目启动的时候发布webservice服务,建立一个filter,在filter中写入如下代码,负责启动websocket(之前的demo)和webservice。这边我们选用8085端口作为webservice的端口。

    package com.xdx.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.xml.ws.Endpoint;
    
    import org.java_websocket.WebSocketImpl;
    
    import com.xdx.webservice.WeatherService;
    import com.xdx.websocket.WsServer;
    
    
    public class StartFilter implements Filter {
    
        public void destroy() {
    
        }
    
        public void doFilter(ServletRequest arg0, ServletResponse arg1,
                FilterChain arg2) throws IOException, ServletException {
    
        }
    
        public void init(FilterConfig arg0) throws ServletException {
            this.startWebsocketInstantMsg();
        }
    
        /**
         * 启动即时聊天服务
         */
        public void startWebsocketInstantMsg() {
            WebSocketImpl.DEBUG = false;
            WsServer s;
            s = new WsServer(8887);
            s.start();
            System.err.println("websocket启动了");
            //启动webservice
            Endpoint.publish("http://localhost:8085/ws_server/weather", new WeatherService());
            System.out.println("webservice启动了");
        }
    }

    4.在web.xml中配置filter,配置如下。

        <!-- filter -->
        <filter>
            <filter-name>startFilter</filter-name>
            <filter-class>com.xdx.filter.StartFilter</filter-class>
        </filter>

    5.运行项目,在浏览器输入http://localhost:8085/ws_server/weather?wsdl  测试一下,会出现如下的xml文件。

     

    说明已经发布成功了。

    6.接下来我们在另外一个web项目(名为m_gecko)中来调用该webservice服务里面的方法。首先,通过cmd进入m_gecko项目的src/main/java目录下,如图所示,输入wsimport -keep http://localhost:8085/ws_server/weather?wsdl

    出现上述提示,说明已经在m_gecko项目中生成了webservice的客户端代码,我们刷新一下m_gecko项目看看。果然是的。

    7.在m_gecko项目中我们来写调用webservice服务的方法。首先我们来调用getWeatherByCityname方法。

        @ResponseBody
        @RequestMapping(value="webserviceDemo1", produces = "text/html; charset=utf-8")
        public String webserviceDemo1(){
            WeatherServiceService factory=new WeatherServiceService();
            WeatherService service=factory.getWeatherServicePort();
            String result=service.getWeatherByCityname("厦门");
            return result;
        }

    运行m_gecko项目(同时也要运行webservice服务所在的项目warrior项目),在浏览器中输入http://localhost:8080/m_gecko/webserviceDemo1。

     然后再来调用getAdminById方法。

    @ResponseBody
        @RequestMapping(value="webserviceDemo2")
        public TAdmin webserviceDemo2(){
            WeatherServiceService factory=new WeatherServiceService();
            WeatherService service=factory.getWeatherServicePort();
            TAdmin admin=service.getAdminById(5);
            return admin;
        }

    效果如下

     

  • 相关阅读:
    加一---简单
    gcc/g++常用命令
    2.3 进程间通信
    js( Object类闭包)
    js构造函数,成员函数详解
    二维数组 冒泡排序
    js数组
    js函数的调用
    仿搜狐首页的布局
    JavaScript基本语法1
  • 原文地址:https://www.cnblogs.com/roy-blog/p/7264057.html
Copyright © 2011-2022 走看看