Jersery的概念和简单使用(搭建Maven+Jersery)

Jersery的概念和简单使用(搭建Maven+Jersery)

REST

表述性状态转移(风格,设计方式,可以降低开发复杂度,提高系统的伸缩性)
Representation State Transfer

特点

客户端-服务器
无状态的,
可缓存的,
分层的,
统一的接口

对比:Remote Procedure Call(RPC)

远程调用过程,三个知识点:
1.Call ID 函数映射
2.反序列化对象
3.网络传输

我的理解:追求效率的(例如公司内部的访问,使用RPC),开放给互联网的API使用REST,因为它更加规范

资源

几乎所有的东西都可以称为使用URI定位的资源。

表述性状态

资源这一时刻的状态(快照)

转移

资源的移动
客户端的资源->服务器(发微博)
服务器->客户端(查询成绩)

RESTful

遵循REST风格的web Service应用,面向资源,(扩展SOA是面向服务的),进行对资源的增删改查

JAX-RS

Java API for RESTful Web Service
J2EE引进的RESTful风格开发部署服务器的标准
(Jax-RS 2.0 2013年)(这是一个标准)

JAX-RS2的目标

1.使用普通POJO来公布WEB资源
2.以HTTP为核心,采用HTTP协议,支持扩展协议
3.支持广泛的数据类型(二进制,json,流…)
4.相对于容器独立(可以部署在各种servlet中,tomcat,jetty等)
JAX-RS2是J2EE规范的一部分,需要jdk6以上的版本

JAX-RS2定义的元素

1.资源类(从表示层,业务层,dao层转变为resource层,业务层,dao层),使用@Path标识,(类似于控制器,接受请求,返回资源)
2.请求方法标识符(GET,POST,PUT…)
3.资源方法:在资源中标志方法
4.Proviver
5.Filter
6.Interceptor

Jersey框架(对JAX-RS标准的实现)
像这么牛逼的有:RESTeasy(Jboss)/CXF(Apache)
开发环境:
win10
Java9
Eclipse 4.7.3a
Maven3.5.3
PostMan6.0.10

Hello Jersey程序

Web2.5版本+Apache

1.https://jersey.github.io/-->getStarted-->复制这一段
mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-webapp \
            -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
            -DgroupId=com.example -DartifactId=simple-service-webapp -Dpackage=com.example \
            -DarchetypeVersion=2.27
2.新建一个MavenProject,把上面的模板配置好
3.pom文件添加servlet依赖
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
4.浏览器运行:8080/项目名/+(web.xml里面配置的地址)+/Resource里的name

Web2.5+Jetty

1.复制jetty插件
            <!-- jetty plugin -->
        <plugin>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>9.4.9.v20180320</version>
            <configuration>
                <httpConnector>
                    <port>9090</port>
                </httpConnector>
                <webApp>
                    <contextPath>/rest</contextPath>
                </webApp>
            </configuration>
        </plugin>
2.Run-configration-maven-create
配置base directory
goals:jetty:run
3.浏览器访问即可

Web3.1+jetty(apache9.0以上)

1.把头文件找一个web3.1的换上
2.修改jersey依赖为<!-- artifactId>jersey-container-servlet</artifactId -->
3.修改web.xml
(web3.0+)
<servlet>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
</servlet>
<servlet-mapping>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <url-pattern>/webapi/*</url-pattern>
</servlet-mapping>
4.浏览

Http请求方式注解(用在方法上面)

@POST       增
@DELETE     删
@PUT        改
@GET        查

@Path路径注解(使用在类【和方法】上)

类上:父路径
方法上:子路径 

参数注解

@QueryPram注解(使用在形参上)

value值要和页面的形参一样

@PathParam注解(结合@Path使用),后面跟正则(可以省略)

使用方法:{参数名:正则表达式}(正则表达式和冒号可以省略)
@GET
@Path("book3/{start}/{size}")
public String getBookByPage2(@PathParam("start") int start, @PathParam("size") int size) {
    return "success!param:" + start+";size="+size;
}

@GET
@Path("book4/{start:\\d+}-{size:\\d+}")
public String getBookByPage3(@PathParam("start") int start, @PathParam("size") int size) {
    return "success!param:" + start+";size="+size;
}

@FormParam表单注解,必须使用post提交,结合@POST

FormParam中value值必须和表单中name一样
(如果类型不匹配不会进入方法,例如int的值为aaa

@BeanParam注解

1.配置bean,在字段上加注释(PathParam或QueryParam或FormParam)
2.写方法
public class BookBean {
@PathParam("bookId")
private Integer bookId;
@FormParam("bookName")
private String bookName;
@FormParam("bookAuthor")
private String bookAuthor;

@POST
@Path("book6/{bookId}")
public String getBookByPage5(@BeanParam BookBean book) {
    return "book="+book;
}

@CookieParam注解

可以获得Cookie的值
@GET
@Path("book7")
public String getCookie(@CookieParam("name")String name) {
    return name;
}

MIME类型注解

消费类型(客户端传入的类型)

常用的有XML和JSON
@POST
@Path("book8")
@Consumes(MediaType.APPLICATION_XML)
public String getXML(String xml) {
    return "XML类型返回:"+xml;
}
@POST
@Path("book9")
@Consumes(MediaType.APPLICATION_JSON)
public String getJSON(String json) {
    return "json类型返回:"+json;
}

生产类型(传给客户端的类型)

1.导包
<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.9.5</version>
</dependency>
2.写方法(传入一个Bean,输出一个json格式的bean)
@POST
@Path("book10/{bookId}")
@Produces(MediaType.APPLICATION_JSON)
public BookBean getBook(@BeanParam BookBean book) {
    return book; 
}

单词释意

Consumes(消耗,消费)
Produce (生产,产生)
raw(原始)
MiediaType(媒体类型)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值