一·Jersey 简介

引用维基百科的介绍 :"Jersey RESTful Web Services框架是一个用Java开发RESTful Web服务的开源框架。它提供对JAX-RS API的支持,并用作JAX-RS(JSR 311和JSR 339)参考实现"        维基百科网页链接

引用维基百科的介绍 :"表现层状态转换(REST,英文:Representational State Transfer)是Roy Thomas Fielding博士于2000年在他的博士论文[1] 中提出来的一种万维网软件架构风格,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息。表现层状态转换(REST,英文:Representational State Transfer)是根基于超文本传输协议(HTTP)之上而确定的一组约束和属性,是一种设计提供万维网络服务的软件构建风格。"                               维基百科网页链接

 二·IDE、编译环境、工具的配置与使用

Demo使用的IDE为STS(spring tool suit),使用maven工具管理项目,JVM环境为JDK 8.0,Tomcat版本8.0。由于使用的maven,在此附上Jersey框架的依赖(为节省篇幅,代码格式缩进及排版暂时不考虑,使用时直接复制粘贴到正确位置就行)

<dependency><groupId>org.glassfish.jersey.containers</groupId><artifactId>jersey-container-servlet-core</artifactId><version>2.0</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-core-asl</artifactId><version>1.9.12</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.12</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-jaxrs</artifactId><version>1.9.12</version></dependency>

三·创建web项目

由于maven的默认依赖版本较旧,需要配置一番才能进行接下来的配置,具体细节详见我的上一篇博文:https://blog.csdn.net/LJX_ahut/article/details/82118704,按照该帖子可解决大部分新建maven web工程的问题。

首先在pom文件中添加Jersey框架依赖,代码已在上面给出。工程目录如图所示

四·jersey的初始化

修改web.xml文件,配置jersey servlet,下面附上完整代码

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	version="3.0">
	<display-name>Archetype Created Web Application</display-name>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	
<!--注册jersey 框架 servlet-->
	<servlet>
		<servlet-name>Jersey REST Service</servlet-name>
		<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
		<!-- 配置默认的资源包路径,多个包路径用逗号或者分号隔开,使用默认的配置类去加载资源 -->
		<init-param>
		<param-name>jersey.config.server.provider.packages</param-name>
		<param-value>org.lujx.server</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>

 编写自定义servlet,需继承HttpServlet,代码和注释如下

package org.lujx.server;

import javax.inject.Inject;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;

import org.apache.log4j.Logger;
import org.lujx.utils.Result;

@Path("/jersey")
public class RestServlet extends HttpServlet {

	//配置日志对象
	private static final Logger LOGGER = Logger.getLogger("RestServlet");
	// @Fields serialVersionUID : TODO
	private static final long serialVersionUID = 4874619228969961679L;

	//注入请求对象
	//其中@Inject为JSR 注入标准,由JSR 330提供注解支持;@Context 功能基本相同,由Jersey框架提供解释支持
//	@Context 
	@Inject  
	private HttpServletRequest request;

	//注入回应对象。
	@Context
	private HttpServletResponse response;

	@Path("test")
	@POST
	@Produces(MediaType.APPLICATION_JSON)
	public String testRestFramework() {		
		String r = new String("testRestFramework");
		LOGGER.info("a request named jersey_test has been received");		
		return r;
	}
}

将项目add到tomcat环境中并启动,在浏览器中输入http://localhost:8080/master/rest/jersey/test ,即可调用testRestFramework方法。

五·知识点小结

(1).jersey的初始化配置有两种方法,前文用的是默认包资源的配置方式,在参考了其他一些前辈的博客之后,提供了一种更加优化的配置方式-->使用自定义配置类。自定义配置类继承自ResourceConfig,源码如下,可以看到,自定义servlet的资源加载方式同样有两种方式,一种是直接注册类的class对象,还有一种就是直接注册其所在的包

package org.lujx.utils;

import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
import org.glassfish.jersey.filter.LoggingFilter;
import org.glassfish.jersey.server.ResourceConfig;
import org.lujx.server.ResourceServlet;
import org.lujx.server.RestServlet;


public class APIApplication extends ResourceConfig {
    public APIApplication() {
        //加载类资源
        register(RestServlet.class);
    	register(ResourceServlet.class);
        
        //给出要扫描的包,也就是上面heloword所在的包,扫描多个包使用分号隔开
//        packages("org.lujx.server");

        //注册数据转换器
        register(JacksonJsonProvider.class);

        // Logging.
        register(LoggingFilter.class);
    }
}

(2).相关注解的解释

注解解释示例
@Path("pathName")

访问URL,带有"pathName"的根url可访问有该注解的servlet

例如:在本例中,工程的根url是 :http://localhost:8080/master/rest ,在其后添加“/jersey” + "/test" 即可访问该类中注解了@Path("test") 的方法

@Inject表示资源注入,由JSR 330支持解释与@Context功能大致相同
@POST配置访问该方法的请求方式其他类别有@GET、@DELETE、@PUT,分别对应post、get、delete、put类型的请求
@Produces配置方法返回的数据类型参数为MediaType.APPLICATION_JSON表示返回的是Json类型的数据

项目源码地址:https://download.csdn.net/download/ljx_ahut/10631245

参考资料:

https://blog.csdn.net/u012706811/article/details/52054153

https://blog.csdn.net/cc41798520101/article/details/72910327

https://www.cnblogs.com/jiang1995/p/5141908.html

也有的同学没有maven环境,重新配置又嫌麻烦,可以直接去 官方网站 下载相应的jar包,这里提供csdn的资源下载链接:https://download.csdn.net/download/ljx_ahut/10631330 本想免费,但是网站限制好像最少一分,所及还是建议您从官方网站下载吧。

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐