Java編寫一個WebService並在Tomcat上發布
本例采用Myeclipse 2016 CI 6,JDK1.8 。新建一個Web Service Project。
選擇如下設置:
在src目錄下建個包:
編寫一個接口,其中一個方法返回ArrayList,另一個方法返回JSON:
package Services;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public interface ResultService<E> {
public ArrayList<E> getResultInfo() throws SQLException;
@WebMethod
public String getJsonResultInfo();
}
編寫四個JavaBean實體類用於返回泛型ArrayList<E>類型:
package Services;
public class Employee {
private String WORKCODE;
private String LASTNAME;
private Long SUBCOMPANYID1;
private Long DEPARTMENTID1;
private String JOBTITLEMARK;
private String JOBCALL;
private String JOBLEVEL;
private long MANAGERID;
private String STATUS;
private String LOCATIONNAME;
private String MOBILE;
private String MOBILECALL;
private String TELEPHONE;
private String STARTDATE;
private String LASTMODDATE;
//set and get.......
}
package Services;
public class Company {
private long ID;
private String SUBCOMPANYNAME;
//get and set.......
}
package Services;
public class Dept {
private long ID;
private String DEPARTMENTNAME;
private long SUPDEPID;
private long SUBCOMPANYID1;
private String DEPARTMENTMARK;
private String CANCELED;
//get and set......
}
package Services;
public class DeptLeader {
private long BMFZR;
private long BM;
//get and set....
}
編寫四個子類實現上面這個接口,這里就只舉例一個子類吧,其他三個模式一樣:
package Services;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.jws.WebService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@WebService
public class EmployeeServiceImpl implements ResultService<Employee>{
private ArrayList<Employee> employees;
private Log log = LogFactory.getLog(EmployeeServiceImpl.class.getName());
@Override
public ArrayList<Employee> getResultInfo() throws SQLException {
// TODO Auto-generated method stub
PropertiesServiceImpl pro = new PropertiesServiceImpl();//配置文件信息讀取類
String conn = pro.getConn();
String user = pro.getUser();
String password = pro.getPassword();
String table = pro.getViewEmployee();
JdbcUtils cs = new JdbcUtils(conn, user, password);//JDBC處理類
String sqlString = "SELECT * FROM " + table;
log.info("SQl:" + sqlString);
employees = cs.queryEmployeeResult(sqlString);
return employees;
}
@Override
public String getJsonResultInfo() {
// TODO Auto-generated method stub
String str = "";
try {
Json<Employee> deJson = new Json<Employee>();//JSON處理類
str = deJson.JsonStr(this.getResultInfo());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
}
其中,JSON類的代碼如下圖所示,該類能將ArrayList轉化為Json字符串,如下圖所示,使用JSONArray需要引用幾個jar包,點擊這里下載 json-lib jar包
package Services;
import java.util.ArrayList;
import net.sf.json.JSONArray;
public class Json<E>{
public String JsonStr(ArrayList<E> Lists){
return JSONArray.fromObject(Lists).toString();
}
}
編寫ServicePublish類,里面有個main函數,用於本地發布測試。
package Services;
import javax.xml.ws.Endpoint;
public class ServicePublish {
public static void main(String[] args){
PropertiesServiceImpl pro = new PropertiesServiceImpl();
String baseAddress = pro.getUrl();
String employeeAddress = baseAddress + "Service/Employee";
String companyAddress = baseAddress + "Service/Company";
String deptAddress = baseAddress + "Service/Dept";
String deptLeaderAddress = baseAddress + "Service/DeptLeader";
Object implementorEmployee = new EmployeeServiceImpl();
Object implementorCompany = new CompanyServiceImpl();
Object implementorDept = new DeptServiceImpl();
Object implementorDeptLeader = new DeptLeaderServiceImpl();
Endpoint.publish(employeeAddress, implementorEmployee);
Endpoint.publish(companyAddress, implementorCompany);
Endpoint.publish(deptAddress, implementorDept);
Endpoint.publish(deptLeaderAddress, implementorDeptLeader);
}
}
右鍵,選擇"Run As" ——"Java Application",如下圖所示,進行本地編譯測試:
能出現XML說明成功了,到此為止本地運行成功:
下面將此WebService部署到TomCat上
首先需要添加一些jar包,總共25個,將這25個jar包添加到Tomcat路徑的lib文件夾下。25個jar包的目錄如下圖所示:點擊這里下載這25個jar包
在web項目的WEB-INF目錄下,創建sun-jaxws.xml配置文件,內容如下圖所示:
然后還是在web項目的web-info目錄下,創建web.xml配置文件,內容下圖所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>BPMUserService</display-name>
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>EmployeeServiceImpl</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>EmployeeServiceImpl</servlet-name>
<url-pattern>/EmployeeServiceImpl</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>EmployeeServiceImpl</servlet-name>
<url-pattern>/CompanyServiceImpl</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>EmployeeServiceImpl</servlet-name>
<url-pattern>/DeptServiceImpl</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>EmployeeServiceImpl</servlet-name>
<url-pattern>/DeptLeaderServiceImpl</url-pattern>
</servlet-mapping>
</web-app>
右鍵點擊項目,將整個web項目導出為war包,如下圖所示:
選擇導出路徑,還可以選擇覆蓋原文件:
將war包放入Tomcat的webapps文件夾下,如下圖所示:
因為服務器中,默認的8080端口號已經被占用,所以我需要修改Tomcat默認的端口號, 在Tomcat的目錄結構下找到conf文件夾,里面有個server.xml文件。
修改為8090端口,如下圖所示: