1.使用idea首先建立一个Web项目或普通项目
2.写一个接口类MyService如下:
package pers.liam.countManager;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public interface MyService {
@WebMethod
int addUser(String username, String password);
@WebMethod
boolean modify_userInfo();
@WebMethod
String get_userInfo(String username, String password);
@WebMethod
int verify_userInfo(String usernaem, String password);
}
然后写具体方法MyServiceImpl如下,暂时只写了addUser与verify_userInfo方法:
package pers.liam.countManager;
import pers.liam.DB.JDBCUtil;
import javax.jws.WebService;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
@WebService(targetNamespace = "pers.liam.countManager.MyService")
public class MyServiceImpl implements MyService {
@Override
public int addUser(String username, String password) { //返回值 1-该用户已存在 2-注册成功 3-服务器异常
int i = 0;
System.out.println(username);
System.out.println(password);
Connection conn = JDBCUtil.get_conn();
try {
String sql_select = "SELECT Susername,Spassword FROM AccountManager.Account WHERE Susername=?";
String sql_insert = "INSERT INTO AccountManager.Account(Susername,Spassword) VALUES(?,?)";
assert conn != null;
PreparedStatement pstmt_select = conn.prepareStatement(sql_select);
pstmt_select.setString(1, username);
ResultSet resultSet = pstmt_select.executeQuery();
resultSet.last();
int n = resultSet.getRow();
resultSet.beforeFirst();
if (n == 1) {
JDBCUtil.close(conn, pstmt_select, resultSet);
return 1;
}
PreparedStatement pstmt_insert = conn.prepareStatement(sql_insert);
pstmt_insert.setString(1, username);
pstmt_insert.setString(2, password);
i = pstmt_insert.executeUpdate();
if (i == 1) {
JDBCUtil.close(conn, pstmt_select, resultSet);
JDBCUtil.close(conn, pstmt_insert, resultSet);
return 2;
} else {
JDBCUtil.close(conn, pstmt_select, resultSet);
JDBCUtil.close(conn, pstmt_insert, resultSet);
return 3;
}
} catch (SQLException e) {
e.printStackTrace();
return 3;
}
}
@Override
public boolean modify_userInfo() {
return false;
}
@Override
public String get_userInfo(String user, String password) {
System.out.println(user);
System.out.println(password);
return "Hello world";
}
@Override
public int verify_userInfo(String username, String password) { //返回值 0-服务器异常 1-该用户不存在 2-密码错误 3-登录成功
String db_password;
System.out.println(username);
System.out.println(password);
Connection conn = JDBCUtil.get_conn();
String sql_select = "SELECT Susername,Spassword FROM AccountManager.Account WHERE Susername=?";
try {
assert conn != null;
PreparedStatement pstmt = conn.prepareStatement(sql_select);
pstmt.setString(1, username);
ResultSet resultSet = pstmt.executeQuery();
resultSet.last();
int n = resultSet.getRow();
resultSet.first();
if (n == 0) {
JDBCUtil.close(conn, pstmt, resultSet);
return 1;
} else {
db_password = resultSet.getString("Spassword").trim();
boolean flag = password.equals(db_password);
if (!flag) {
JDBCUtil.close(conn, pstmt, resultSet);
return 2;
} else {
JDBCUtil.close(conn, pstmt, resultSet);
return 3;
}
}
} catch (SQLException e) {
e.printStackTrace();
return 0;
}
}
}
中间使用JDBC工具包JDBCUtil来连接数据库与关闭:
package pers.liam.DB;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class JDBCUtil {
private static String driver;
private static String dbURL;
private static String username;
private static String password;
//静态语句块(自动执行)
static {
//加载资源文件
InputStream resource = JDBCUtil.class.getClassLoader().getResourceAsStream("db.properties");
Properties p = new Properties();
try {
p.load(resource);
} catch (IOException e) {
System.out.println("加载流文件失败!");
e.printStackTrace();
}
driver = p.getProperty("driver");
dbURL = p.getProperty("dbURL");
username = p.getProperty("username");
password = p.getProperty("password");
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
System.out.println("加载驱动失败!");
e.printStackTrace();
}
}
public static Connection get_conn() {
try {
return DriverManager.getConnection(dbURL, username, password);
} catch (SQLException e) {
System.out.println("连接数据库失败!");
e.printStackTrace();
return null;
}
}
public static void close(Connection conn, PreparedStatement pstmt, ResultSet resultSet) {
try {
if (resultSet != null) {
resultSet.close();
resultSet = null;
}
if (pstmt != null) {
pstmt.close();
pstmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
最后写Publish方法来发布服务:
package pers.liam.countManager;
import javax.xml.ws.Endpoint;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class MyServicePublish {
public static void main(String[] args) {
InputStream resource = MyServicePublish.class.getClassLoader().getResourceAsStream("db.properties");
Properties p = new Properties();
try {
p.load(resource);
} catch (IOException e) {
System.out.println("加载流文件(URL)失败!");
e.printStackTrace();
}
String address = p.getProperty("publishURL");
Endpoint.publish(address, new MyServiceImpl());
System.out.println("服务发布成功!");
}
}
访问WSDL在publishURL后加上?wsdl 即可
所有配置字段均写在db.properties文件中,该文件放在src文件夹下:
driver=org.mariadb.jdbc.Driver
dbURL=
publishURL=http://localhost:8080/MyService
username=liam
password=password
等于号后面不需要引号,不需要空格,不需要分号
在需要用到字段的类中使用类加载器来加载配置文件:
InputStream resource = MyServicePublish.class.getClassLoader().getResourceAsStream("db.properties");
Properties p = new Properties();
try {
p.load(resource);
} catch (IOException e) {
System.out.println("加载流文件(URL)失败!");
e.printStackTrace();
}
String address = p.getProperty("publishURL");
然后就可以访问改WebService了