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下挂载,启动运行