Jersey+EclipseJavaEE+Apache-Tomcat8 开发Rest服务

本文详细介绍了使用Jersey框架搭建RESTfulWeb服务的过程,从前期准备到资源类创建、web.xml配置及运行实例,涵盖资源标识、HTTP方法、MIME类型响应等关键知识点,并解决了常见问题,提供了RESTfulWeb服务的基础实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前期准备:

1.了解Rest

2.相关工具下载

Jersey https://jersey.java.net/

由于版本问题,我使用的是1.19

二、搭建

1.创建动态Web工程jerseyTest

2.编辑编译环境,将jersey的lib文件夹下的包全部倒入,同时放到工程下WebContent/WebINF/lib文件夹下

3.编写HelloServiece类

package cn.service;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;  
import javax.ws.rs.Path;  
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;  
import javax.ws.rs.core.MediaType;

import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
@Path("/what")
public class HelloService {
	@Path("/fa/{contact}")
	@GET
	@Produces("text/plain")
	public String helloWorld(@PathParam("contact") String contact){
		return "hello " + contact;
	}
	@Path("/sys/{contact}")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public  JSONObject sysnonym(@PathParam("contact") String contact){
		JSONObject address = new JSONObject();  
        JSONArray addresses = new JSONArray();  
        try {  
            addresses.put(0, "address1");  
            addresses.put(1, "address2");  
            address.put("addresses", addresses);  
        } catch (JSONException e) {  
            e.printStackTrace();  
        }  
        return address;  
	}
}


4.在WebContent/WebINF下新建web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee                       http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
  <servlet-name>Jersey REST Service</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>cn.service</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>Jersey REST Service</servlet-name>
  <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>

5.运行,地址栏输入http://localhost:8080/jerseyTest/rest/what/fa/fssqawj,

显示:

hello fssqawj


三、常见问题

1.jersey的最新版本为2.x,由于版本不同许多包的名字也不一样,我选择的是1.19的版本

2.遇到Root resource classes not found,请clean prj之后重试一下

3.遇到包名不存在,请确保WebContent/WebINF下的lib文件夹有相应的jar


四、相关知识

REST 在 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之一。

REST 中最重要的概念是资源(resources),使用全球 ID(通常使用 URI)标识。客户端应用程序使用 HTTP 方法(GET/ POST/ PUT/ DELETE)操作资源或资源集。RESTful Web 服务是使用 HTTP 和 REST 原理实现的 Web 服务。通常,RESTful Web 服务应该定义以下方面:

  • Web 服务的基/根 URI,比如 http://host/<appcontext>/resources。
  • 支持 MIME 类型的响应数据,包括 JSON/XML/ATOM 等等。
  • 服务支持的操作集合(例如 POST、GET、PUT 或 DELETE)。

JSR 311 或 JAX-RS(用于 RESTful Web Services 的 Java API)的提议开始于 2007 年,1.0 版本到 2008 年 10 月定稿。目前,JSR 311 版本 1.1 还处于草案阶段。该 JSR 的目的是提供一组 API 以简化 REST 样式的 Web 服务的开发。

在 JAX-RS 规范之前,已经有 Restlet 和 RestEasy 之类的框架,可以帮助您实现 RESTful Web 服务,但是它们不够直观。Jersey 是 JAX-RS 的参考实现,它包含三个主要部分。

  • 核心服务器(Core Server):通过提供 JSR 311 中标准化的注释和 API 标准化,您可以用直观的方式开发 RESTful Web 服务。
  • 核心客户端(Core Client):Jersey 客户端 API 帮助您与 REST 服务轻松通信。
  • 集成(Integration):Jersey 还提供可以轻松集成 Spring、Guice、Apache Abdera 的库。


该代码中有几个地方需要强调:

  • 资源类(Resource Class):注意,资源类是一个简单的 Java 对象 (POJO),可以实现任何接口。这增加了许多好处,比如可重用性和简单。
  • 注释(Annotation):在 javax.ws.rs.* 中定义,是 JAX-RS (JSR 311) 规范的一部分。
  • @Path:定义资源基 URI。由上下文根和主机名组成,资源标识符类似于 http://localhost:8080/Jersey/rest/hello。
  • @GET:这意味着以下方法可以响应 HTTP GET 方法。
  • @Produces:以纯文本方式定义响应内容 MIME 类型。

web.xml中
<servlet-mapping>
  <servlet-name>Jersey REST Service</servlet-name>
  <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

将特定URL映射到Servlet处理

Json的格式返回如:
@Path("/sys/{contact}")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public  JSONObject sysnonym(@PathParam("contact") String contact){
		JSONObject address = new JSONObject();  
        JSONArray addresses = new JSONArray();  
        try {  
            addresses.put(0, "address1");  
            addresses.put(1, "address2");  
            address.put("addresses", addresses);  
        } catch (JSONException e) {  
            e.printStackTrace();  
        }  
        return address;  
	}

调用URL:http://localhost:8080/jerseyTest/rest/what/sys/fssqawj
调用结果如下:
{"addresses":["address1","address2"]}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值