Java编写一个WebService并在Tomcat上发布
生活随笔
收集整理的這篇文章主要介紹了
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;@WebMethodpublic 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());@Overridepublic 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;}@Overridepublic String getJsonResultInfo() {// TODO Auto-generated method stubString str = "";try {Json<Employee> deJson = new Json<Employee>();//JSON處理類str = deJson.JsonStr(this.getResultInfo());} catch (SQLException e) {// TODO Auto-generated catch blocke.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端口,如下圖所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
啟動Tomcat,并輸入Url,Url是地址+web項目名稱+服務名。即可訪問服務:
總結
以上是生活随笔為你收集整理的Java编写一个WebService并在Tomcat上发布的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 题解P3745期末考试
- 下一篇: ExecutorService源码解读