疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

webService开发


 

 
最近做社保查询的东西,然而这个是三个公司一起做的,需要调其他公司的接口,他们公司用了webService这个当年比较流行的技术,于是乎就研究了一下这个webService.还有一种写接口的技术叫restful api,有兴趣的可以研究一下.
 
首先定义两个webService功能接口
 
复制代码
@WebService
public interface WebserviceI {
    @WebMethod
    public String sayHello(String name);
    @WebMethod
    public String sayBye(String name);
}
 
@WebService
public interface Webservice2I {
    @WebMethod
    public String run(String name);
    @WebMethod
    public String lover(String name);
}
复制代码
然后实现webService功能接口
 
复制代码
@WebService
public class WebServiceImpl implements WebserviceI {
 
    @Override
    public String sayHello(String name) {
        String result = "你好,"+name;
        System.out.println(result);
        return result;
    }
 
    @Override
    public String sayBye(String name) {
        String result = "再见,"+name;
        System.out.println(result);
        return result;
    }
 
}
 
 
@WebService
public class WebService2Impl implements Webservice2I {
    
    @Override
    public String run(String name) {
        String result = "not flash , but have to run."+name;
        System.out.println(result);
        return result;
    }
    
    @Override
    public String lover(String name) {
        String result = "dyl,"+name;
        System.out.println(result);
        return result;
    }
}
复制代码
最后发布出去,我们用三种示例方式发布
 
1.直接在java类中发布
 
复制代码
public static void main(String[] args) {
        //必须要是部署机器的ip,端口也要开,我就用tomcat的端口了
        String address = "http://222.222.221.137:8080/WS_Server/Webservice";
        //用endpoint发布webservice
        Endpoint.publish(address, new WebServiceImpl());
        System.out.println("通过java文件部署webservice成功");
    }
复制代码
2.通过设置servlet自动加载初始化,用servlet发布
 
复制代码
public class TestServlet extends HttpServlet {
 
    @Override
    public void init() throws ServletException {
        //必须要是部署机器的ip,端口也要开,我就用tomcat的端口了
        String address = "http://222.222.221.137:8088/WS_Server/Webservicesss";
        //用endpoint发布webservice
        Endpoint.publish(address, new WebServiceImpl());
        System.out.println("通过httpservlet部署webservice成功");
    }
    
}
复制代码
其中要在web.xml配置中配置
复制代码
<!-- 通过servlet部署 -->    
  <servlet>    
      <servlet-name>InitServlet</servlet-name>  
      <servlet-class>com.qy.servlet.TestServlet</servlet-class>  
      <init-param>  
          <param-name>username</param-name>  
          <param-value>qy</param-value>  
      </init-param>  
      <!-- 此处指定加载顺序为2,表明还有优先级更高的Servlet要先执行,数值越小,优先级越高   -->
      <load-on-startup>1</load-on-startup>  
  </servlet>  
  <servlet-mapping>    
      <servlet-name>InitServlet</servlet-name>  
      <url-pattern>/</url-pattern>  
  </servlet-mapping>
复制代码
3.通过用ServletContextListener发布
 
复制代码
public class contextlistener implements ServletContextListener {
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
    }
    
    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        //必须要是部署机器的ip,端口也要开,我就用tomcat的端口了
        String address = "http://222.222.221.137:8087/WS_Server2/Webservices2";
        //用endpoint发布webservice
        Endpoint.publish(address, new WebService2Impl());
        System.out.println("通过servletcontextlistener部署webservice成功");
    }
 
}
复制代码
web.xml中配置
 
<listener>  
      <listener-class>com.qy.servletcontextlistener.contextlistener</listener-class>  
  </listener> 
还有其他启动的方法,比如过滤器,使用ioc容器的可以在xml中配置
 
 
 
这下就好了,在浏览器中输入地址然后可以显示成这样子的
 
 
 
如果是demo,那么久结束了。
 
但是!!!浏览器的url请求成功并不代表这个接口可以调用!!!!一定要用专业的工具测试!!!!昨天就是另外一家公司的webservice部署好之后浏览器查看没事就溜了,结果根本不能调用,这里我们用wsCaller.jar测试.
 
 
 
 
 
这里是源码和测试工具,有兴趣的可以看一下