Jersey框架和springmvc框架

前言:

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包


    org.glassfish.jersey.containers
    jersey-container-servlet
    2.25

Jersey框架和springmvc框架_第1张图片 

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


  JerseyServletContainer
  org.glassfish.jersey.servlet.ServletContainer
  
    jersey.config.server.provider.packages
    com.wkl
  
  1



  JerseyServletContainer
  /api/*

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

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

 
        restservlet  
        com.sun.jersey.spi.container.servlet.ServletContainer  
         
            com.sun.jersey.config.property.packages  
            com.cloudstore;com.api 
       
 
   

     
        restservlet  
        /api/* 
   

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格式输出。

结果:

浏览器访问

Jersey框架和springmvc框架_第2张图片

postman访问:

Jersey框架和springmvc框架_第3张图片

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下载文件

https://blog.csdn.net/qq_41694906/article/details/107200144

7:外部访问jersey接口方法

https://blog.csdn.net/qq_41694906/article/details/90242545

三:springmvc对Rest的支持

https://blog.csdn.net/qq_41694906/article/details/107140276

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(JavaWeb,JAVASE,java)