zoukankan      html  css  js  c++  java
  • sssp-webservce_restful

    pom

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.icil</groupId>
        <artifactId>springwebservice_rest_ser</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging>
    
    
    
    
    
        <!--配置版本号 -->
        <properties>
            <jackson.version>1.9.13</jackson.version>
            <cxf.version>3.1.9</cxf.version>
            <mysql.version>5.1.34</mysql.version>
            <spring.version>4.3.0.RELEASE</spring.version>
            <hibernate.version>5.1.0.Final</hibernate.version>
            <querydsl.version>4.1.4</querydsl.version>
        </properties>
    
    
        <dependencies>
            <!-- Spring Framework -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <!-- Spring Framework end -->
    
            <!-- c3p0 start -->
            <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
            <dependency>
                <groupId>com.mchange</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.5.2</version>
            </dependency>
            <!-- c3p0 end -->
    
            <!-- ehcache start -->
            <!-- <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> 
                <version>2.6.11</version> </dependency> -->
            <!-- ehcache end -->
    
            <!--JPA start -->
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-jpa</artifactId>
                <version>1.10.4.RELEASE</version>
            </dependency>
            <!--JPA end -->
    
            <!--hibernate start -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>${hibernate.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-entitymanager</artifactId>
                <version>${hibernate.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-ehcache -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-ehcache</artifactId>
                <version>${hibernate.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0 -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-c3p0</artifactId>
                <version>${hibernate.version}</version>
            </dependency>
    
            <!--hibernate end -->
    
    
    
            <!--mysql start -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!--mysql end -->
    
            <!--logger start -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.7</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>1.7.7</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.1.2</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.1.2</version>
            </dependency>
            <!--logger end -->
    
    
    
    
            <!--test start -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
            <!--test end -->
    
            <!--common start -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.3.2</version>
            </dependency>
            <!--common end -->
    
            <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
    
            <!-- CXF -->
            <!--cxf-rt-frontend-jaxws支持soap类型服务 -->
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-frontend-jaxws</artifactId>
                <version>${cxf.version}</version>
            </dependency>
            <!--cxf-rt-frontend-jaxrs支持rest服务 -->
            <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-transports-http</artifactId>
                <version>${cxf.version}</version>
            </dependency>
            <!--用于跨域的jar包 -->
            <dependency>
                <groupId>com.thetransactioncompany</groupId>
                <artifactId>java-property-utils</artifactId>
                <version>1.9</version>
            </dependency>
            <dependency>
                <groupId>com.thetransactioncompany</groupId>
                <artifactId>cors-filter</artifactId>
                <version>1.7</version>
            </dependency>
            
            
            
            
            <!-- Jackson Json处理工具包   用于处理bean 到 json json dao  bean   -->
                <dependency>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-databind</artifactId>
                    <version>2.4.2</version>
                </dependency>
            
            
            
            
            <!--json-->
            <dependency>  
                <groupId>org.codehaus.jackson</groupId>  
                <artifactId>jackson-core-asl</artifactId>  
                <version>${jackson.version}</version>  
            </dependency>  
            <dependency>  
                <groupId>org.codehaus.jackson</groupId>  
                <artifactId>jackson-mapper-asl</artifactId>  
                <version>${jackson.version}</version>  
            </dependency> 
            <!-- 用于序列化json服务 -->
            <dependency>  
                <groupId>org.codehaus.jackson</groupId>  
                <artifactId>jackson-jaxrs</artifactId>  
                <version>${jackson.version}</version>  
            </dependency>  
            <dependency>  
                <groupId>org.codehaus.jackson</groupId>  
                <artifactId>jackson-xc</artifactId>  
                <version>${jackson.version}</version>  
            </dependency>
    
    
        </dependencies>
    
    
        <build>
            <finalName>testjpa</finalName>
            <plugins>
                  <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>2.5</version>
                </plugin>
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
                <!-- 引入tomcat插件 -->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <path>/</path>
                        <port>8099</port>
                    </configuration>
                </plugin>
    
            </plugins>
        </build>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    </project>
    View Code

    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_2_5.xsd" version="2.5">
      <display-name>webservice</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      
      
      
    
    <!-- 配置过滤器 将POST请求转换为PUT和DELETE请求 -->
      <filter>
          <filter-name>HiddenHttpMethodFilter</filter-name>
          <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
          <filter-name>HiddenHttpMethodFilter</filter-name>
          <url-pattern>/*</url-pattern>
    </filter-mapping>
      
      
      
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:application*.xml</param-value>
      </context-param>
      
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      <servlet>
        <servlet-name>cxf</servlet-name>
        <servlet-class> org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>cxf</servlet-name>
        <url-pattern>/webservice/*</url-pattern>
      </servlet-mapping>
    </web-app>
    View Code

    applicationcontent.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:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:jaxws="http://cxf.apache.org/jaxws"
        xmlns:soap="http://cxf.apache.org/bindings/soap"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
                            http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/context
                            http://www.springframework.org/schema/context/spring-context.xsd
                            http://www.springframework.org/schema/aop
                            http://www.springframework.org/schema/aop/spring-aop.xsd
                            http://www.springframework.org/schema/tx 
                            http://www.springframework.org/schema/tx/spring-tx.xsd
                            http://cxf.apache.org/bindings/soap 
                            http://cxf.apache.org/schemas/configuration/soap.xsd
                            http://cxf.apache.org/jaxws 
                            http://cxf.apache.org/schemas/jaxws.xsd
                            ">
        <!-- 引入CXF Bean定义如下,早期的版本中使用 -->
        <!-- <import resource="classpath:META-INF/cxf/cxf.xml" />
        <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
        <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> -->
        
        <!-- 配置自动扫描的包 -->
        <context:component-scan base-package="com.icil"></context:component-scan>
    
        <!-- 配置 C3P0 数据源 -->
        <context:property-placeholder location="classpath:db.properties"/>
    
        <bean id="dataSource"
            class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="user" value="${jdbc.user}"></property>
            <property name="password" value="${jdbc.password}"></property>
            <property name="driverClass" value="${jdbc.driverClass}"></property>
            <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>    
            
            <!-- 配置其他属性 -->
        </bean>
        
        <!-- 配置 EntityManagerFactory -->
        <bean id="entityManagerFactory"
            class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
            <property name="dataSource" ref="dataSource"></property>
            <!-- 配置 JPA 提供商的适配器. 可以通过内部 bean 的方式来配置 -->
            <property name="jpaVendorAdapter">
                <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
            </property>    
            <!-- 配置实体类所在的包 -->
            <property name="packagesToScan" value="com.icil.entity"></property>
            <!-- 配置 JPA 的基本属性. 例如 JPA 实现产品的属性 -->
            <property name="jpaProperties">
                <props>
                    <prop key="hibernate.show_sql">true</prop>
                    <prop key="hibernate.format_sql">true</prop>
                    <prop key="hibernate.hbm2ddl.auto">update</prop>
                </props>
            </property>
        </bean>
        
        <!-- 配置 JPA 使用的事务管理器 -->
        <bean id="transactionManager"
            class="org.springframework.orm.jpa.JpaTransactionManager">
            <property name="entityManagerFactory" ref="entityManagerFactory"></property>    
        </bean>
        
        <!-- 配置支持基于注解是事务配置 -->
        <tx:annotation-driven transaction-manager="transactionManager"/>
      
    
       <!-- CXF 注册服务 -->
      <!-- <bean id="customerService" class="com.icil.service.CustomerServiceImpl"></bean> --> 
        <!-- <jaxws:server id="myService" address="/customer">
            <jaxws:serviceBean>
                <ref bean="customerService"/>
            </jaxws:serviceBean>
        </jaxws:server> -->
    
    
    
    </beans>
    View Code

    applicationWebService.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:jaxws="http://cxf.apache.org/jaxws"
        xmlns:jaxrs="http://cxf.apache.org/jaxrs"
        xsi:schemaLocation="http://www.springframework.org/schema/beans   
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd   
        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
        http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">  
    
        <!--
            <import resource="classpath:META-INF/cxf/cxf.xml"/>
            <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
            <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml"/>
            <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>-->
            
         <bean id="customerService" class="com.icil.service.CustomerServiceImpl"></bean> 
        <jaxrs:server id="webService" address="/">
            <!--输入拦截器设置-->
            <jaxrs:inInterceptors>
                <bean class="com.icil.interceptor.BeforeInterceptor1"></bean>
                <bean class="com.icil.interceptor.BeforeInterceptor"></bean>
            </jaxrs:inInterceptors>
    
            <!--输出拦截器设置-->
            <jaxrs:outInterceptors>
                <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"> </bean>
                <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
            </jaxrs:outInterceptors>
            
            <!--serviceBeans:暴露的WebService服务类-->
            <jaxrs:serviceBeans>
                <ref bean="customerService"/>
            </jaxrs:serviceBeans>
                
            <!--支持的协议-->
            <jaxrs:extensionMappings>
                <entry key="json" value="application/json"/>
                <entry key="xml" value="application/xml"/>
            </jaxrs:extensionMappings>
            <!--编码格式-->
            <jaxrs:languageMappings>
            
            </jaxrs:languageMappings>
            
            <!--对象转换, 此处可以定义多个-->
            <jaxrs:providers>
                 <!-- 注册数据转换器,该转换器会自动将JavaBean转换为json数据 -->
                <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider"/>
                <!--  JAX-RS 自动将传送的数据解析成 JAXBElement 包装类 -->
                <bean class="org.apache.cxf.jaxrs.provider.JAXBElementProvider" />  
            </jaxrs:providers>
        </jaxrs:server>
    </beans>
    View Code

    db.properties

    jdbc.user=root
    jdbc.password=dAhlofwww
    jdbc.driverClass=com.mysql.jdbc.Driver
    jdbc.jdbcUrl=jdbc:mysql:///sea
    View Code

    inteface:

    package com.icil.service;
    
    
    import java.util.List;
    
    import javax.jws.WebService;
    import javax.ws.rs.BeanParam;
    import javax.ws.rs.Consumes;
    import javax.ws.rs.DELETE;
    import javax.ws.rs.FormParam;
    import javax.ws.rs.GET;
    import javax.ws.rs.MatrixParam;
    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 javax.ws.rs.QueryParam;
    import javax.ws.rs.core.MediaType;
    
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestAttribute;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestParam;
    
    import com.icil.entity.Customer;
    @WebService
    @Path("/customerService")
    //@Produces({MediaType.APPLICATION_JSON,"application/json;charset=utf-8"}) //返回JSON
    public interface CustomerService {
        
       @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_XML})//@Produces  输出数据的格式 
       @GET //http中的get方法
       @Path("/find/{id}") // @PathParam("id")//可以获取URI中指定规则的参数
       Customer findCustomerById( @PathParam("id")int cid);
       
       @Produces({MediaType.APPLICATION_JSON,"application/json;charset=utf-8"}) //返回JSON
       @GET  
       @Path("/findCustomers")
       List<Customer> findCustomerAll();
       
       
       @GET  //查找
       @Path("/findAll")
       String findAllCustomer();  //该方法实现已将对象转为json
       
       
       
       
      /*   @PUT  //putch修改  update 
           @Consumes(MediaType.APPLICATION_JSON)//接受数据的格式
           @Path("/updateCustomerName/{cid}/{cname}")
           void updateCustomerName(@PathParam("cid")int cid,@PathParam("cname") String cname);
       */
      
       
       /*******************put  参数 形式  *******************/
       //http://locahost/customerService/updateCustomerName ? cid=2&cname="AAAAA"
       @PUT //putch修改  updPate 
      // @Consumes(MediaType.APPLICATION_JSON)//接受数据的格式
       @Path("/updateCustomerName/{cid}/{cname}")
      // @QueryParam 用于获取GET请求中的查询参数
       void updateCustomerName1(@PathParam("cid") int cid,@PathParam("cname") String cname);
       
       
       
       
       
       /*******************get  参数 形式1  *******************/
       //http://locahost/customerService/updateCustomerName ? cid=2&cname="AAAAA"
       @GET//putch修改  updPate 
      // @Consumes(MediaType.APPLICATION_JSON)//接受数据的格式
       @Path("/updateCustomerName")
      // @QueryParam 用于获取GET请求中的查询参数
       void updateCustomerName(@QueryParam("cid") int cid,@QueryParam("cname") String cname);
       
           
       
       /*******************get  参数 形式2 *******************/
       /**
        * @matrixparam注释可以用来绑定包含多个   property (属性)=value(值) 方法参数表达式。
        * 例如,你要调用一个网址 
                *   http://locahost/customerService/updateCustomerName ? cid=2&cname="AAAAA"
        * 
        */
      /*   @PUT
           @Consumes(MediaType.APPLICATION_JSON)//接受数据的格式
           @Path("/updateCustomerName")
           public String updateCustomerName(@MatrixParam("cid") String cid, @MatrixParam("cname") String cname) ;
      
       */
       
       
       
       
       /*******************表单提交 post  参数问题1 ********************************/
       
       //@FormParam,从POST请求的表单参数中获取数据
       @POST  
            /*    application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。
                   当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2…),
                    然后把这个字串append到url后面,用?分割,加载这个新的url。*/
    // @Consumes("application/x-www-form-urlencoded")
     //  @Consumes(value={"text/xml", "application/json"})
       @Path("/addForm")
       public void  addCustomerForm(@FormParam(value="cname") String cname);
       
       
       
       
       /*******************表单提交 post  参数问题2 ********************************/
       
       //@BeanParam的使用
      // 当请求参数很多时,比如客户端提交一个修改用户的PUT请求,请求中包含很多项用户信息。这时可以用@BeanParam。
    
       @POST
       //@Consumes(MediaType.APPLICATION_JSON)
       @Consumes(MediaType.APPLICATION_XML)
       @Path("/add")
       public void  add(@RequestBody Customer customer);
    
       
       
       
       
       @POST  //增加   不安全 ,每次都不一样,都会创建资源
       @Consumes(MediaType.APPLICATION_JSON)
       @Path("addCustomer")
       void addCustomer(Customer customer);
       
       
       
       @DELETE // 删除  
       //@Consumes(MediaType.APPLICATION_JSON)//接受数据的格式
       @Path("/deleteCustomerById/{cid}")
       void deleteCustomerById(@PathParam("cid")int cid );
       
    }
    View Code

    inteceptor

    package com.icil.interceptor;
    
    import org.apache.cxf.interceptor.Fault;
    import org.apache.cxf.interceptor.InterceptorChain;
    import org.apache.cxf.message.Message;
    import org.apache.cxf.phase.AbstractPhaseInterceptor;
    import org.apache.cxf.phase.Phase;
    import org.springframework.stereotype.Component;
    
    /**
     *自定义拦截器0
     */
    @Component
    public class BeforeInterceptor  extends AbstractPhaseInterceptor<Message>{
    
        public BeforeInterceptor() {
            super(Phase.POST_INVOKE); //在方法调用之后调用
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void handleMessage(Message mes) throws Fault {
            System.out.println("在方法调用之后调用:已经调用");
            
        }
    
        
    
    }
    View Code
  • 相关阅读:
    Java【第二篇】基本语法之--进制、运算符
    Java【第一篇】基本语法之--关键字、标识符、变量及分类、数据类型及转换
    安装运行zookeeper的坑
    部署java应用的几种方式
    解决sudo用户找不到环境变量的问题
    Python装饰器详解
    filebeat开启自带模块收集日志如何辨别日志来源等
    使用elasticsearch7.3版本在一台主机上部署多个实例组建集群
    redis 集群搭建
    Kibana多用户创建及角色权限控制
  • 原文地址:https://www.cnblogs.com/lshan/p/8857611.html
Copyright © 2011-2022 走看看