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;
    @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端口,如下圖所示:

                                          

啟動Tomcat,並輸入Url,Url是地址+web項目名稱+服務名。即可訪問服務:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM