webservice技术的实现 使用servlet监听器发布,tomcate运行提供对外访问

WebService搭建与Durid连接池
本文详细介绍了WebService的实现步骤,包括接口定义、实现、发布和服务监听,并使用Durid连接池管理数据库连接。

1.webservice的实现,建议先详细了解webservice的意思,以及包含的核心技术

以下主要说明实现过程,其中加入durid连接池作为数据库连接,管理,监测日志

1.1使用接口webservice,@WebMethod定义发布方法 


import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public interface WebserviceI {
      @WebMethod
      public String lnterfac(String startTime,String endTime,String intgmedNo);
      
}

1.2实现接口,实例化,添加具体逻辑过程


import javax.jws.WebService;

import com.Databasepool.Databasepool;
import com.inte.WebserviceI;
@WebService
public class WebServiceImpl  implements WebserviceI{

    @Override
    public String Interfac(String startTime, String endTime, String intgmedNo) {
        String result=   Databasepool.databse(startTime,endTime,intgmedNo);
//        String result = "你好,"+startTime+intgmedNo+endTime;
            System.out.println(result);
            return result;
    }

}

1.4,发布方法,通过实践监听机制实现


import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpServlet;
import javax.xml.ws.Endpoint;

import com.imp.WebServiceImpl;
//通过用ServletContextListener发布
public class Webcontextlistener implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
         //必须要是部署机器的ip,端口也要开,我就用tomcat的端口了
        String address = "http://192.168.23.75:8087/WS_Server2/Webservices";
        //用endpoint发布webservice
        Endpoint.publish(address, new WebServiceImpl());
        System.out.println("通过servletcontextlistener部署webservice成功");
}

}

配置web.xml,实现监听

 <listener>  
      <listener-class>com.web.Webcontextlistener</listener-class>  
  </listener> 

2.1配置durid连接池

import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

public class DruidDatasource {
    private static Properties p;
    private static DataSource dataSource;

    static {
        try {
            ClassLoader loader = Thread.currentThread().getContextClassLoader();
            InputStream inputStream = loader.getResourceAsStream("jdbc.properties");
            p = new Properties();
            p.load(inputStream);
            // 通过工厂类获取DataSource对象
            dataSource = DruidDataSourceFactory.createDataSource(p);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection() {
        try {
            return dataSource.getConnection();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void close(Connection conn, Statement state, ResultSet result) {

        try {
            if (result != null) {
                result.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (state != null) {
                        state.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }}
    

}

2.1.1连接池配置文件

driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://127.0.0.1:1433;databaseName=test;
username=root
password=sroot


# 配置参数,让ConfigFilter解密密码
#connectionProperties=config.decrypt=true;config.decrypt.key=xxxx

# 监控统计拦截的filters
filters=stat

# 初始化时建立物理连接的个数,初始化发生在显示调用init方法,或者第一次getConnection时
initialSize=5
# 最大连接池数量
maxActive=20
# 最小连接池数量
minIdle:5
# 获取连接等待超时的时间,单位毫秒
maxWait=5000
#一条物理连接的最大存活时间 120分钟
phyTimeoutMillis=7200000
# 强行关闭从连接池获取而长时间未归还给druid的连接(认为异常连接)
removeAbandoned=true
#异常连接判断条件,超过180 秒 则认为是异常的,需要强行关闭
removeAbandonedTimeout=180
#从连接池获取到连接后,如果超过被空闲剔除周期,是否做一次连接有效性检查 
testWhileIdle=true
#从连接池获取连接后,是否马上执行一次检查
testOnBorrow=false
#归还连接到连接池时是否马上做一次检查
testOnReturn=false
#连接有效性检查的SQL
validationQuery=SELECT 1
#连接有效性检查的超时时间 1 秒
validationQueryTimeout=1
#周期性剔除长时间呆在池子里未被使用的空闲连接, 15秒一次
timeBetweenEvictionRunsMillis=15000
#空闲多久可以认为是空闲太长而需要剔除 54 秒
minEvictableIdleTimeMillis=54000
#如果空闲时间太长即使连接池所剩连接 < minIdle 也要被剔除 54 秒 
maxEvictableIdleTimeMillis=54000
#是否设置自动提交,相当于每个语句一个事务 
defaultAutoCommit=true
#记录被判定为异常的连接
logAbandoned=true
# 网络读取超时,网络连接超时 socketTimeout : 对于线上业务小于5s,对于BI等执行时间较长的业务的SQL,需要设置大一点
connectionProperties=socketTimeout=3000;connectTimeout=1000
# 是否缓存preparedStatement,也就是PSCache
poolPreparedStatements=true

maxPoolPreparedStatementPerConnectionSize=200

3.1数据库连接过程省去,自行查找

注意:重点说明webservice客户端请求服务端报错问题,

 

在客户端方法 及方法response中进行插入

namespace名称空间,报错原因主要是命名一直所致,导致不能区分。

3.1 打包war在tomcate webapp下挂载,启动运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值