目录

前言:

一:Rest接口简介

1:Rest介绍

2:Rest风格下的url 

 二:Jersey框架介绍

1:什么是Jersey框架介绍

2:导入jerseyjar包

3:修改web.xml,添加一个Jersey的核心servlet(简单理解为MVC框架中的前端控制器即可)

4:创建基于jersey的Helloword

5:jersey注解

6:jersey下载文件

7:外部访问jersey接口方法

三:springmvc对Rest的支持


前言:

Jersey是一个RESTFUL请求服务JAVA框架,与常规的JAVA编程使用的struts框架类似,它主要用于处理业务逻辑层。

与springmvc 的区别:

1. jersey同样提供DI,是由glassfish hk2实现,也就是说,如果想单独使用jersey一套,需要另外学习Bean容器;

2. MVC出发点即是WEB,但jersey出发点确实RESTFull,体现点在与接口的设计方面,
如MVC返回复杂结构需要使用ModelAndView,而jersey仅仅需要返回一个流或者文件句柄;

3. jersey提供一种子资源的概念,这也是RESTFull中提倡所有url都是资源;

4. jersey直接提供application.wadl资源url说明;

5. MVC提供Session等状态管理,jersey没有,这个源自RESTFull设计无状态化;

6. Response方法支持更好返回结果,方便的返回Status,包括200,303,401,403;

7. 提供超级特别方便的方式访问RESTFull;

一:Rest接口简介

1:Rest介绍

REST:即 Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用

  • 资源(Resources:网络上的一个实体,或者说是网络上的一个具体信息。

它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。

可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的 URI 。

获取这个资源,访问它的URI就可以,因此 URI 即为每一个资源的独一无二的识别符。

  • 表现层(Representation:把资源具体呈现出来的形式,叫做它的表现层(Representation)。比如,文本可以用 txt 格式表现,也可以用 HTML 格式、XML 格式、JSON 格式表现,甚至可以采用二进制格式。
  • 状态转化(State Transfer:每发出一个请求,就代表了客户端和服务器的一次交互过程。HTTP协议,是一个无状态协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生“状态转化”(State Transfer)。

而这种转化是建立在表现层之上的,所以就是 “表现层状态转化”。

  • 具体说,就是 HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE

它们分别对应四种基本操作:GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE 用来删除资源。

2:Rest风格下的url 

/order/1  HTTP GET :得到 id = 1 的 order   

/order/1  HTTP DELETE删除 id = 1的 order   

/order/1  HTTP PUT:更新id = 1的 order   

/order     HTTP POST:新增 order 

 二:Jersey框架介绍

1:什么是Jersey框架介绍

Jersey是一个REST框架,既然是REST框架,那自然提供了REST服务相关的一切东西。那么我们在使用的时候,自然可以和SpringMVC做对比。但是,因为是一个全新的框架,所以自然细节和相关概念会比SpringMVC实现RESTful要多很多,这点需要注意。

Jersey的一大特点就是,基于Jersey的REST应用,可以运行在Servlet环境下面,也可以脱离该环境。下面就分别使用两种方式来完成Jersey的Hello world。

2:导入jerseyjar包

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.25</version>
</dependency>

3:修改web.xml,添加一个Jersey的核心servlet(简单理解为MVC框架中的前端控制器即可)

<servlet>
  <servlet-name>JerseyServletContainer</servlet-name>
  <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
  <init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>com.wkl</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>JerseyServletContainer</servlet-name>
  <url-pattern>/api/*</url-pattern>
</servlet-mapping>

其中注意ServletContainer即为核心控制器,而jersey.config.server.provider.packages参数一看就是用于扫描jersey中REST服务类所在的包(可以简单理解为SpringMVC中的component-scan);

注上边是jersey2.x的配置,jersey1.x配置参考如下

<servlet> 
        <servlet-name>restservlet</servlet-name>  
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>  
        <init-param> 
            <param-name>com.sun.jersey.config.property.packages</param-name>  
            <param-value>com.cloudstore;com.api</param-value> 
        </init-param> 
    </servlet>
    <servlet-mapping> 
        <servlet-name>restservlet</servlet-name>  
        <url-pattern>/api/*</url-pattern> 
    </servlet-mapping>

4:创建基于jersey的Helloword

package com.wkl.jersey;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

/**
 * Description:
 * Date:       2020/7/29 - 下午 11:11
 * author:     wangkanglu
 * version:    V1.0
 */
@Path("/hello")
public class HelloController {

    /**
     * /api/hello/test01
     */
    @Path("/test01")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String create() {

        return "helloworld!";
    }
}

简单解释一下这段代码:
1,注意类是放在com.wkl包中,而这个包是我们jersey.config.server.provider.packages参数中配置的包的子包,即该类是能够被扫描到的;
2,在类上面添加了@Path("hello"),代表资源根路径为hello,类似于SpringMVC中在类上面添加@RequestMapping("hello");
3,方法hi上面添加了三个标签,@GET标签代表该方法接受GET类型请求,类似于SpringMVC中的@GetMapping标签;@Path("/test01")标识在/hello后加上路径/test01
4,@Produces标签代表该方法的响应MIME类型为text/plain,类似于@RequestMapping中的produces属性;
5,该方法返回String,这个String值Jersey会自动按照text/plain格式输出。

结果:

浏览器访问

postman访问:

5:jersey注解

@Path
uri路径
定义资源的访问路径,client通过这个路径访问资源。比如:@Path("user")

@Produces
返回
指定返回MIME格式
资源按照那种数据格式返回,可取的值有:MediaType.APPLICATION_XXX。比如:@Produces(MediaType.APPLICATION_XML)

@Consumes
接收入参
接受指定的MIME格式
只有符合这个参数设置的请求再能访问到这个资源。比如@Consumes("application/x-www-form-urlencoded")

@PathParam
uri路径参数
写在方法的参数中,获得请求路径参数。比如:@PathParam("username")  String userName

6:jersey下载文件

Java实现Excel文件导入导出_苍煜的博客-CSDN博客_java导入导出excel

7:外部访问jersey接口方法

Java创建URL后台访问接口,返回数据(Http请求-HttpClient方法)_苍煜的博客-CSDN博客

三:springmvc对Rest的支持

JavaWeb-15-SpringMVC的Rest接口_苍煜的博客-CSDN博客_rest接口 spring

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐