1. 程式人生 > >WebService的基礎整合ssh框架的應用

WebService的基礎整合ssh框架的應用

還是基於maven的整合.

在pom.xml檔案中新增依賴:

 <properties>
<cxf.version>3.0.1</cxf.version>
</properties>

  <!-- 匯入webservice依賴 -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>${cxf.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
            <version>${cxf.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-rs-client</artifactId>
            <version>${cxf.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-rs-extension-providers</artifactId>
            <version>${cxf.version}</version>
        </dependency>


在web.xml中加入對CXF的宣告:

<!--配置CXF宣告-->
    <servlet>
        <servlet-name>CXFService</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>CXFService</servlet-name>
        <!--配置CXF的訪問路徑./services/後面接appli.... .xml中的 /GandPandService". 然後接每個方法上獨有的path-->
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
編寫一個applicationContext-webService.xml. 記得在web.xml檔案中配置掃描spring的xml配置檔案的時候要能掃描到這個檔案.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:task="http://www.springframework.org/schema/task"
	xmlns:jaxrs="http://cxf.apache.org/jaxrs"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
		http://www.springframework.org/schema/data/jpa 
		http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
		http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd ">

	<!--
	address="/UsersService. 這個是自定義的一個訪問路徑, 接在web.xml檔案中配置的/service後面.
	-->
	<jaxrs:server id="usersService" address="/UsersService">
		<jaxrs:serviceBeans>
			<!--具體的實現類-->
			<bean class="com.cn.webservice_serviceimpl.UsersServiceImpl" />
		</jaxrs:serviceBeans>

		<!--配置的WebService需要用到的interceptor(攔截器)-->
		<jaxrs:inInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
		</jaxrs:inInterceptors>
		<jaxrs:outInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
		</jaxrs:outInterceptors>
	</jaxrs:server>
	

</beans>
以下就是正式的編寫一個能被其他專案以及跨專案進行訪問的一個service層.
package com.cn.webservice_service;

import com.cn.hnust.domain.User;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import java.util.List;

//這裡定義的是CXF預留的訪問介面. 通過以下這些註解的path等進行約定訪問.
public interface UsersService {

    /*
    * @GET:表示的是請求的方法.
    * @Path("/findAllUsers")配置的訪問路徑.
    *  @Produces({"application/xml", "application/json"}):表示可以以xml和json格式返回資料
    * */
    @GET
    @Path("/findAllUsers")
    @Produces({"application/xml", "application/json"})
    public List<User> findAllUsers();//查詢所有

    @GET
    @Path("/findAllUsers")
    @Produces({"application/xml", "application/json"})
    public User findByUsername(String username);//通過使用者名稱查詢使用者物件

    @GET
    @Path("/getUser/{id}")
    @Produces({"application/xml", "application/json"})
    public User getUser(@PathParam("id") int id);//通過id查詢對應資料

//    @Consumes({"application/xml", "application/json"}): 表示可以接受xml和json格式的資料
    @POST
    @Path("/saveUser")
    @Consumes({"application/xml", "application/json"})
    public void saveUser(User user);//儲存一個Bean物件.

    @PUT
    @Path(value = "/update")
    @Consumes({"application/xml", "application/json"})
    public void updateUser(User user);//修改一個物件內容上.
}


這裡是上面service的具體實現類.

package com.cn.webservice_serviceimpl;

import com.cn.hnust.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.cn.webservice_dao.UserRepository;
import com.cn.webservice_service.UsersService;

import java.util.List;

@Service
@Transactional
public class UsersServiceImpl implements UsersService {

//    注入DAO層
    @Autowired
    private UserRepository userRepository;

    @Override
    public List<User> findAllUsers() {
        return userRepository.findAll();
    }

//    通過使用者名稱查詢有沒有匹配的使用者
    @Override
    public User findByUsername(String username) {
        return userRepository.findByUsername(username);
    }

    @Override
    public User getUser(int id) {
        return null;
    }

    @Override
    public void saveUser(User user) {

    }

    @Override
    public void updateUser(User user) {

    }
}


最後就是一個簡短的使用Spring - data -  JPA框架編寫的一個DAO層了.

package com.cn.webservice_dao;

import com.cn.hnust.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

public interface UserRepository extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> {

//    一個簡單的通過使用者名稱查詢使用者物件的方法.
    User findByUsername(String username);
}
以上,真正的重點是 在web.xml中的配置, 以及編寫的applicationContext-Webservice.xml

之後就是service層的一些註解需要注意一下.


在另一個專案中訪問這個專案的service的話, 基礎程式碼如下:

第一個是訪問路徑. 

accpet指的是宣告接收資料的格式.

get(類名.class): 指的是將獲取到的json格式一一對應封裝到這個實體類中.

 WebClient.create("http://localhost:9012/taotao-manager-web/services/UsersService/findAllUsers").accept(MediaType.APPLICATION_JSON_TYPE).getCollection(Games.class);