Jersey发布REST webservice服务

一.概念
1.REST 是一种软件架构模式,只是一种风格
2.rest服务采用HTTP 做传输协议
3.REST 对于HTTP 的利用实现精确的资源定位
rest要求对资源定位更加准确,如下:

非rest方式:
http://ip:port/queryUser.action?userType=student&id=001
http://ip:port/queryUser.action?userType=teacher&id=002

Rest方式:
http://ip:port/user/student/query/001
http://ip:port/user/teacher/query/001 

4.Rest方式表示互联网上的资源更加准确,但是也有缺点,可能目录的层级较多不容易理解
5.REST 是一种软件架构理念,现在被移植到Web 服务上,那么在开发Web 服务上,偏于面向资源的服务适用于REST,REST 简单易用,效率高,SOAP 成熟度较高,安全性较好。
eg:

对于资源的具体操作类型,由HTTP动词表示。
    常用的HTTP动词有下面五个(括号里是对应的SQL命令)
 
        GET(SELECT):从服务器取出资源(一项或多项)。
        POST(CREATE):在服务器新建一个资源。
        PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
        PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
        DELETE(DELETE):从服务器删除资源。
 
      下面是一些例子
        GET /zoos:列出所有动物园
        POST /zoos:新建一个动物园
        GET /zoos/ID:获取某个指定动物园的信息
        PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
        PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
        DELETE /zoos/ID:删除某个动物园
        GET /zoos/ID/animals:列出某个指定动物园的所有动物
        DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物

二.Jersey介绍
Jersey RESTful 框架是开源的RESTful框架, 实现了JAX-RS (JSR 311 & JSR 339) 规范。它扩展了JAX-RS 参考实现, 提供了更多的特性和工具, 可以进一步地简化 RESTful service 和 client 开发。尽管相对年轻,它已经是一个产品级的 RESTful service 和 client 框架。与Struts类似,它同样可以和hibernate,spring框架整合。
Jersey 是一个非常不错的框架。对于请求式服务,对于GET,DELETE请求,你甚至只需要给出一个URI即可完成操作。
三.Jersey开发restful webService demo
1.创建web项目
2.导包
jersey包
3.编写JavaBean
Student

package com.miracle.model;

import javax.xml.bind.annotation.XmlRootElement;

// 如果要返回xml通过XmlRootElement 指定xml跟标签的名字
@XmlRootElement(name = "stu")
public class Student {

    private Long id;
    private String username;
    private String password;

    public Student() {

    }

    public Student(Long id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

4.编写controler(web层)

package com.miracle.restWebService;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.miracle.model.Student;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

//设定访问路径
@Path("/student")
public class StudentServlet {

    private ObjectMapper objectMapper = new ObjectMapper();

    /**
     * 根据id查找学生
     * @return
     */
    // @PathParam("id") 将 @Path("/query/{id}") 接收的id参数赋值给 queryById中的参数id
    @GET //设定为接收GET请求
    @Path("/queryById/{id}") //设定访问路径
    @Produces(MediaType.APPLICATION_XML) //设定返回给客户端的数据格式(xml or json)
    public Student queryById(@PathParam("id") long id) throws JsonProcessingException {
        // 模拟数据,正常调用service层,然后调用dao层查询数据
        Student student = new Student(id, "miracle", "123456");
        // 注意当需要返回xml时,这里不再需要转换json了,直接返回对象,由框架转换成xml
        return student;
    }

    /**
     * 根据名字查询所有的学生
     * @return
     */
    // @PathParam("name")作用 将 @Path("/queryByName/{name}") 接收的name参数赋值给 queryByName中的参数name
    @GET //设定为接收GET请求
    @Path("/queryByName/{name}") //设定访问路径
    @Produces(MediaType.APPLICATION_JSON) //设定返回给客户端的数据格式(xml or json)
    public String queryByName(@PathParam("name") String name) throws JsonProcessingException {
        // 模拟数据,正常调用service层,然后调用dao层查询数据
        List<Student> students = new ArrayList<Student>();
        for (long i = 0; i < 3; i++) {
            Student student = new Student(i, name, "123456");
            students.add(student);
        }
        // 由自己转json
        return objectMapper.writeValueAsString(students);
    }

    @POST //设定为接收POST请求
    @Path("/add/{json}") // 注意:客户端访问的时候要有“/json”路径 即 /add/json
    @Consumes(MediaType.APPLICATION_JSON) // 告诉方法post请求发来的数据是json
    @Produces(MediaType.APPLICATION_JSON) // 设定返回给客户端的数据格式(xml or json)
    public String add(String json) throws IOException { // 这里add 方法的参数不需要添加注解
        System.out.println(json);
        Student student = objectMapper.readValue(json, Student.class);
        // 调用Service层进行处理
        System.out.println(student);
        return "ok";
    }

    @POST //设定为接收POST请求
    @Path("/addByXML") // 客户端访问路径到 /addByXML 即可
    @Consumes(MediaType.APPLICATION_XML) // 告诉方法post请求发来的数据是xml
    @Produces(MediaType.APPLICATION_XML) // 设定返回给客户端的数据格式(xml or json)
    public String addByXML(String xml){ // 这里addByXML 方法的参数不需要添加注解
        System.out.println(xml);
        // 调用Service层进行处理
        String result = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<stu>\n" +
                "    <Courses>\n" +
                "        <Course1>math</Course1>\n" +
                "        <Course2>english</Course2>\n" +
                "        <Course3>chinese</Course3>\n" +
                "    </Courses>\n" +
                "    <Id>1</Id>\n" +
                "    <Password>123456</Password>\n" +
                "    <Username>miracle</Username>\n" +
                "</stu>";
        return result;
    }
}

5.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
         version="3.1">

        <!-- 配置jersey提供的Servlet-->
        <servlet>
            <servlet-name>jersey-servlet</servlet-name>
            <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
            <!-- 设置servelt参数,配置rest服务包名-->
            <init-param>
                <param-name>jersey.config.server.provider.packages</param-name>
                <param-value>com.miracle.restWebService</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>jersey-servlet</servlet-name>
            <!-- 设定访问路径 -->
            <url-pattern>/rest/*</url-pattern>
        </servlet-mapping>
</web-app>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值