利用Tomcat发布基于Maven所构建的Jersey RESTful Web Service

1、关于RESTful架构

REST这词是Roy Thomas Fielding在他2000年的博士论文中提出的。他利用REST定义了互联网软件的架构原则,即Representational State Transfer缩写,直译过来就是“表现层状态转化”,若是一个架构符合REST原则,就称它为RESTful架构。REST所指向的是在互联网中资源属性,其指明的是“Resources”的表现层,即归纳成就是能够利用REST原则构建API可以找到独一无二的“资源实体”,如图片、音频、特定的数据等。简单概述RESTful架构有如下几个重点:html

1.每个URI表明一种资源;
2.客户端和服务器之间,传递这种资源的某种表现层;
3.客户端经过四个HTTP动词(GET、POST、PUT、DELETE)对服务器端资源进行操做,实现“表现层状态转化”。
具体的能够看构建实现的例子。

2、关于Jersey、Maven

Jersey是JAX-RS(The Java API for RESTful Web Service)标准的参考实现,是Java领域中最纯正的REST服务开发框架。
Apache Maven是一款软件项目管理和理解工具。基于项目对象模型(POM)的概念,Maven能够从中央信息管理项目的构建,报告和文档。java

3、具体实践

1.依赖环境JDK、Maven、Tomcat

安装JDK和Maven时候须要注意的配置环境变量的问题,这其中须要注意的是下载的Maven和Tomcat都是须要时Binary 包,这样就能够直接解压后就能够直接运行无需编译:web

1.1.mac环境下:

能够利用vim ~/.bash_profile来配置JDK和Maven的环境变量PATH,配置完成后执行source ~./bash_profile来让配置文件生效apache

#JDK
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
PATH=$JAVA_HOME/bin:$PATH:.
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export JAVA_HOME
export PATH
export CLASSPATH
#Maven
export M2_HOME=/Users/bing/apache-maven-3.5.22
export PATH=$PATH:$M2_HOME/bin

验证是否配置好,能够在terminal上面输入mvn -v命令看,系统是否识别以下图:vim

clipboard.png

1.2.Windows环境下:能够经过高级系统设置来配置环境变量

2.利用mvn命令来建立webapp的例子(以mac环境下为例)

sudo mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-webapp \
                -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
                -DgroupId=com.example -DartifactId=simple-service-webapp -Dpackage=com.example \
                -DarchetypeVersion=2.26

clipboard.png

cd simple-service-webapp
sudo mvn clean package

clipboard.png
这样就已经把刚才构建基于maven所构建的Jersey RESTful Web Service的war就已经同mvn构建好了
以下图
clipboard.pngapi

3.启动Tomcat来发布此Web Service项目

在Apache Tomcat下载Binary的包后,经过Terminal终端进入Tomcat的bin目录下bash

bash startup.sh

clipboard.png
如此即是已经将web service部署到了Tomcat中了,而且已经发布了
这样就能够经过URI来访问咱们的项目资源,如在原来的项目中所须要留意的两个地方是,第一个是webapp文件夹下web.xml,以下图
clipboard.png服务器

<?xml version="1.0" encoding="UTF-8"?>
<!-- This web.xml file is not required when using Servlet 3.0 container,
     see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html -->
<web-app version="2.5" 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">
    <servlet>
        <servlet-name>Jersey Web Application</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.example</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/webapi/*</url-pattern>
    </servlet-mapping>
</web-app>

其中的<url-pattern>/webapi/*</url-pattern>中webapi就是访问路径一个名字,
第二个是项目中具体的java类所定义接口的中path路径,在此项目中就是MyResource.java架构

@Path("myresource")
public class MyResource {

    /**
     * Method handling HTTP GET requests. The returned object will be sent
     * to the client as "text/plain" media type.
     *
     * @return String that will be returned as a text/plain response.
     */
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getIt() {
        return "Got it!";
    }
}

因此上手的样例所要访问的URI是:
http://localhost:8080/simple-service-webapp/webapi/myresource/app

clipboard.png

这样就能够开始项目具体业务的开发了。


后续会继续完善Windows和Linux版本的环境的搭建,以及基于Docker容器项目部署。

相关文章
相关标签/搜索