Jersey框架和springmvc框架
前言:Jersey是一个RESTFUL请求服务JAVA框架,与常规的JAVA编程使用的struts框架类似,它主要用于处理业务逻辑层。与springmvc 的区别:1. jersey同样提供DI,是由glassfish hk2实现,也就是说,如果想单独使用jersey一套,需要另外学习Bean容器;2. MVC出发点即是WEB,但jersey出发点确实RESTFull,体现点在与接口的设计方面,如
目录
3:修改web.xml,添加一个Jersey的核心servlet(简单理解为MVC框架中的前端控制器即可)
前言:
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的支持
更多推荐
所有评论(0)