_01_jersey_hello
第一章 jersey基础
jersey概述
Eclipse Jersey 是一个 REST 框架,提供了 JAX-RS (JSR-370) 的实现。
JAX-RS介绍
JAX-RS是JAVAEE6引入的一个新技术。JAX-RS即JavaAPIforRESTfulWebServices,是一个Java编程语言的应用程序接口,支持按照表述性状态转移(REST)架构风格创建Web服务。JAX-RS使用了JavaSE5引入的Java标注来简化Web服务的客户端和服务端的开发和部署。
JAX-RS提供了一些注解将一个资源类,一个POJO Java类,封装为Web资源。注解包括:
- @Path,标注资源类或者方法的相对路径
- @GET,@PUT,@POST,@DELETE:标注方法的HTTP请求的类型。
- @Produces:标注返回的MIME媒体类型
- @Consumes:标注可接受请求的MIME媒体类型
- @PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam
- 分别标注方法的参数来自于HTTP请求的不同位置,例如@PathParam来自于URL的路径,@QueryParam来自于URL的查询参数,@HeaderParam来自于HTTP请求的头信息,@CookieParam来自于HTTP请求的Cookie。
基于JAX-RS实现的框架有Jersey,RESTEasy等。
这两个框架创建的应用可以很方便地部署到Servlet 容器中,比如Tomcat,JBoss等。
值得一提的是RESTEasy是由JBoss公司开发的,所以将用RESTEasy框架实现的应用部署到JBoss服务器上,可以实现很多额外的功能。
jersey 用户指南
Jersey 2.31 User Guide
jersey入门案例
创建maven-webapp工程添加依赖
代码语言:javascript复制<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.byron4j</groupId>
<artifactId>_01_jersey_hello</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- servlet 依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--jersey 依赖-->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.17.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.17.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>1.17.1</version>
</dependency>
</dependencies>
<build>
<finalName>_01_jersey_hello</finalName>
</build>
</project>
web.xml
代码语言:javascript复制<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>ServletContainer</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<!-- 来自于:PackagesResourceConfig.PROPERTY_PACKAGES -->
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>org.byron4j.rest</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ServletContainer</servlet-name>
<url-pattern>/rest-points/*</url-pattern>
</servlet-mapping>
</web-app>
编写代码: JerseyHelloWorldService.java
代码语言:javascript复制package org.byron4j.rest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;
@Path("/show-on-screen")
public class JerseyHelloWorldService {
@GET
@Path("/{message}")
public Response getMsg(@PathParam("message") String msg){
String str = "msg:" msg;
return Response.status(200).entity(str).build();
}
}
访问测试
访问:http://localhost:8080/rest-points/show-on-screen/hello
可以看到: msg:hello
注解回顾
- @Path("/show-on-screen"):设置路径,可以用在类、方法上
- @GET:支持http的get请求
- @Path("/{message}"):处理路径为/show-on-screen/*的请求,并且最后的参数值绑定到message参数上
- @PathParam(“message”) String msg:获得路径的参数message的值,并赋值给msg
附录-JSR
- JSR