jersey学习笔记3-集成服务

集成服务

依赖包的引入

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    4.0.0
    com.example
    simple-service-webapp
    war
    1.0-SNAPSHOT
    simple-service-webapp

    
        1.7
        2.25
        4.12
        1.7.21
        1.2.17

        3.2.17.RELEASE
        3.1.1
        5.1.38

        UTF-8
        2.5.1
        2.3
        2.6
        2.9

        6.1.5
        3.4.1
        1.3.0
        1.4
        1.8.9
        1.0

    


    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                ${maven-compiler-plugin.version}
                
                    ${JDK.version}
                    ${JDK.version}
                    ${project.build.sourceEncoding}
                

            

            
                org.apache.maven.plugins
                maven-war-plugin
                ${maven-war-plugin.version}
            

            
                
                org.apache.maven.plugins
                maven-eclipse-plugin
                ${maven-eclipse-plugin.version}
                
                    false
                    2.0
                

            

            
                org.apache.maven.plugins
                maven-resources-plugin
                ${maven-resources-plugin.version}
                
                    ${project.build.sourceEncoding}
                

            

            
                org.mortbay.jetty
                maven-jetty-plugin
                ${jetty.version}
            

        

    


    

        
        
            org.glassfish.jersey.containers
            jersey-container-servlet
            ${jersey.version}
        


        
        
            org.glassfish.jersey.media
            jersey-media-moxy
            ${jersey.version}
        


        
        
            org.glassfish.jersey.ext
            jersey-spring3
            ${jersey.version}
        


        
        
            org.springframework
            spring-core
            ${spring.version}
        

        
            org.springframework
            spring-web
            ${spring.version}
            compile
        

        
            org.springframework
            spring-test
            ${spring.version}
            test
        

        
            org.springframework
            spring-tx
            ${spring.version}
        

        
            org.springframework
            spring-orm
            ${spring.version}
        


        
        
            junit
            junit
            ${junit.version}
        


        
            org.glassfish.jersey.test-framework
            jersey-test-framework-core
            ${jersey.version}
        


        
        
            org.glassfish.jersey.test-framework.providers
            jersey-test-framework-provider-grizzly2
            ${jersey.version}
        

        
            org.glassfish.jersey.test-framework.providers
            jersey-test-framework-provider-inmemory
            ${jersey.version}
        

        
            org.glassfish.jersey.test-framework.providers
            jersey-test-framework-provider-jdk-http
            ${jersey.version}
        

        
            org.glassfish.jersey.test-framework.providers
            jersey-test-framework-provider-simple
            ${jersey.version}
        


        
        
            org.webjars
            jquery
            ${jquery.version}
        


        
        
            log4j
            log4j
            ${log4j.version}
            
        

        
            org.slf4j
            slf4j-log4j12
            ${slf4j.version}
            
                
                    log4j
                    log4j
                

            

        


        
        
            org.aspectj
            aspectjweaver
            ${aspectjweaver.version}
        


        
        
            aopalliance
            aopalliance
            ${aopalliance.version}
        


        
        
            mysql
            mysql-connector-java
            ${mysql-connector.version}
        


        
            org.mybatis
            mybatis
            ${mybatis.version}
        

        
            org.mybatis
            mybatis-spring
            ${mybatis-spring.version}
        

        
            commons-dbcp
            commons-dbcp
            ${commons-dbcp.version}
        


    


    
        
            snapshots.codehaus.org
            Codehaus.org Snapshots Maven Repository
            http://nexus.codehaus.org/snapshots
            default
        

    


    
        
            release.maven.java.net
            java.net Maven Release Repository
            https://maven.java.net/content/groups/public
            default
        

    


该工程集成spring和mybatis,使用mysql数据库。

集成spring

applicationContext.xml


    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
        http://www.springframework.org/schema/util  
        http://www.springframework.org/schema/util/spring-util-3.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">

    
    

    
    

    
        
    


    
        
        
        
        
        
        
        
        
        
        
        
        
        
    


    
        
        
    



    
    
        
    

    
    


在web.xml中配置spring:


    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    simple-service-webapp

    
        contextConfigLocation
        classpath:applicationContext.xml
    

    
        org.springframework.web.context.ContextLoaderListener
    




数据库配置

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.183.129:3306/mysql?useUnicode=true&characterEncoding=UTF-8
username=root
password=duckking
initialSize=0
maxActive=20
maxIdle=20
minIdle=1
maxWait=60000

上面是jdbc.properties的内容,定义了数据库的属性。这些属性在spring的配置中读取。


创建数据库连接

在spring的配置中创建数据库连接,用的是dhcp的代码来创建的:

   
        
        
        
        
        
        
        
        
        
        
        
        
        
    


集成mybatis

   
        
        
    

用SqlSessionFactoryBean初始化数据,配置文件是configuration.xml,内容如下:


"http://mybatis.org/dtd/mybatis-3-config.dtd">

    
        
        
    

    
        
    


mybatis使用数据库的mapper如下:books.xml


    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">


现在我们建立起了一个由jersey提供api,后端集成了spring和mybatis的框架,还有一引动其它的小功能,如日志、测试等,但里面内容还是空的,现在我们向时面加内容。


定义实体类

@XmlRootElement
public class Book {
    private Long bookId;
    private String bookName;
    private String publisher;

    @XmlAttribute
    public Long getBookId() {
        return bookId;
    }

    public void setBookId(Long bookId) {
        this.bookId = bookId;
    }

    @XmlAttribute
    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    @XmlAttribute
    public String getPublisher() {
        return publisher;
    }

    public void setPublisher(String publisher) {
        this.publisher = publisher;
    }
}


@XmlRootElement(name = "books")
public class Books implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1398511916695349225L;

    private List bookList;

    @XmlElement(name = "book")
    @XmlElementWrapper
    public List getBookList() {
        return bookList;
    }

    public void setBookList(List bookList) {
        this.bookList = bookList;
    }

}


定义资源类

@Path("books")
public class BookResource {

    private static final Logger logger = LoggerFactory.getLogger(BookResource.class);

    @Autowired
    private BookService bookService;

    @GET
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public Books getAlBooks() {
        final Books books = bookService.getAllBooks();
        return books;
    }
    
    @Path("{bookId:[0-9]*}")
    @GET
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public Book getBookByPath(@PathParam("bookId") final Long bookId) {
        logger.info("bookId=" + bookId);
        final Book book = bookService.getBook(bookId);
        return book;
    }

    @Path("/book")
    @GET
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public Book getBookByQuery(@QueryParam("id") final Long bookId) {
        final Book book = bookService.getBook(bookId);
        return book;
    }
}

上述三个方法访问的方式分别为:

http://localhost:8080/simple-service-webapp/webapi/books

http://localhost:8080/simple-service-webapp/webapi/books/1

http://localhost:8080/simple-service-webapp/webapi/books/book?id=1

中间service层没有什么好说的,看下Dao层:

@Repository("bookDao")
public class BookDao extends SqlSessionDaoSupport {

    @Autowired
    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
        super.setSqlSessionFactory(sqlSessionFactory);
    }

    public Books getAllBooks() {
        List bookList = this.getSqlSession().selectList("getAllBooks");
        Books books = new Books();
        books.setBookList(bookList);
        return books;
    }
    
    public Book findById(final String bookId) {
        logger.info("bookId=" + bookId);
        return (Book) this.getSqlSession().selectOne("findById", bookId);
    }
}

在执行过程中可以看到后台日志:

[DEBUG] 2016-12-12 22:39:37,113 method:org.mybatis.spring.SqlSessionUtils.getSqlSession(SqlSessionUtils.java:99)
Creating a new SqlSession
[DEBUG] 2016-12-12 22:39:37,113 method:org.mybatis.spring.SqlSessionUtils.registerSessionHolder(SqlSessionUtils.java:150)
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1a753a0] was not registered for synchronization because synchronization is not active
[DEBUG] 2016-12-12 22:39:37,114 method:org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:110)
Fetching JDBC Connection from DataSource
[DEBUG] 2016-12-12 22:39:37,118 method:org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:89)
JDBC Connection [jdbc:mysql://192.168.183.129:3306/mysql?useUnicode=true&characterEncoding=UTF-8, [email protected], MySQL Connector Java] will not be managed
 by Spring
[DEBUG] 2016-12-12 22:39:37,119 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:145)
==>  Preparing: SELECT bookid,bookname,publisher FROM book where bookid=?
[DEBUG] 2016-12-12 22:39:37,121 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:145)
==> Parameters: 1(String)
[DEBUG] 2016-12-12 22:39:37,125 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:145)
<==      Total: 1
[DEBUG] 2016-12-12 22:39:37,125 method:org.mybatis.spring.SqlSessionUtils.closeSqlSession(SqlSessionUtils.java:193)
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1a753a0]
[DEBUG] 2016-12-12 22:39:37,126 method:org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:327)
Returning JDBC Connection to DataSource


发布服务

定义一个application类,由application类发布接口:

public class AirApplication2 extends ResourceConfig {

    public AirApplication2() {
        packages("com.example.resource");
    }
}

将Application启动,在web.xml中配置。

   
        Jersey Web Application
        org.glassfish.jersey.servlet.ServletContainer
        
            javax.ws.rs.Application
            com.example.AirApplication2
        

        1
    

    
        Jersey Web Application
        /webapi/*
    

一个后台服务就发布完成了,可以通过浏览器直接访问url的方式访问api了。


前台框架jQuery

我们前端使用augularJS来实现,这里不讲解jQuery通过Ajax来访问后台的具体内容。

测试框架

通过firefox的resteasy或rested插件来进行测试。


你可能感兴趣的:(JAVA,jersey,JAVA,jersey)