zoukankan      html  css  js  c++  java
  • 使用Jersey和Jetty开发RESTful Web service

    Jersey RESTful 框架是开源的RESTful框架, 实现了JAX-RS (JSR 311 & JSR 339) 规范,是JAX-RS的参考实现,并且提供了更多的特性和工具,简化了RESTful service 和 client 的开发。

    Jetty 是开源的servlet容器,它为基于Java的web组件例如JSP和servlet提供运行环境。用Java编写,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象内嵌在应用中,从而为独立运行(stand-alone)的Java应用提供网络和web连接。 

    故Servlet是两者组合使用的桥梁,下面是个简单的测试代码:

    POM:

    <jetty.version>8.1.9.v20130131</jetty.version>
            
    
            <!--jersey-->
            <dependency>
                <groupId>org.glassfish.jersey.containers</groupId>
                <artifactId>jersey-container-servlet</artifactId>
                <version>2.9</version>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.core</groupId>
                <artifactId>jersey-client</artifactId>
                <version>2.9</version>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.media</groupId>
                <artifactId>jersey-media-json-jackson</artifactId>
                <version>2.9</version>
            </dependency>    
            <!-- jetty -->
            <dependency>
                <groupId>org.eclipse.jetty.aggregate</groupId>
                <artifactId>jetty-webapp</artifactId>
                <version>${jetty.version}</version>
            </dependency>
            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-jsp</artifactId>
                <version>${jetty.version}</version>
            </dependency>            

    ---

    WS实现类Hello.java

    @Path("/hello")
    public class Hello {
    
        /**
         * 接收HTTP的GET请求
         *
         * @return 返回text/plain响应
         */
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String hello() {
            return "hello world!";
        }
    
        //访问路径 /hello/text/name123
        @GET
        @Path("/text/{name}")
        @Produces(MediaType.TEXT_PLAIN)
        public String hello(@PathParam("name") String name) throws Exception {
            return "hello, " + name;
        }
    
        //访问路径 /hello/json/name123
        @GET
        @Path("/json/{name}")
        @Produces(MediaType.APPLICATION_JSON)
        public String hello2(@PathParam("name") String name) throws Exception {
            return "hello, " + name;
        }
    
        //访问路径 /hello/xml/name123
        @GET
        @Path("/xml/{name}")
        @Produces(MediaType.APPLICATION_XML)
        public String hello3(@PathParam("name") String name) throws Exception {
            return "hello, " + name;
        }
    
    }

    ---

    Jetty启动类JerseyTest.java

    public class JerseyTest {
    
        public static void main(String[] args) throws Exception {
            Server server = new Server();
            SelectChannelConnector serverConnector = new SelectChannelConnector();
            serverConnector.setPort(8080);
    
            ResourceConfig resourceConfig = new ResourceConfig(Hello.class);
    
            //Jersey类ServletContainer从HttpServlet继承,故可传入Jetty类ServletContextHandler.addServlet方法
            ServletContainer servletContainer = new ServletContainer(resourceConfig);
            server.addConnector(serverConnector);
    
            ServletContextHandler servletContextHandler = new ServletContextHandler();
            servletContextHandler.addServlet(new ServletHolder(servletContainer), "/*");
            server.setHandler(servletContextHandler);
    
            server.start();
            server.join();
        }
    
    }

    ---

    浏览器访问路径: http://localhost:8080/hello/text/Likai

    附 

    JAX-RS常用注解:

    @GET
    @PUT
    @POST
    @DELETE
    @Path   uri路径 定义资源的访问路径,client通过这个路径访问资源。如:@Path("user")
    @Produces   指定返回MIME格式 资源按照那种数据格式返回,如:@Produces(MediaType.APPLICATION_XML)
    @Consumes   接受指定的MIME格式 只有符合这个参数设置的请求再能访问到这个资源。比如@Consumes("application/x-www-form-urlencoded")
    @PathParam   uri路径参数 写在方法的参数中,获得请求路径参数。比如:@PathParam("username") String userName
    @QueryParam   uri路径请求参数 写在方法的参数中,获得请求路径附带的参数。比如:@QueryParam("desc") String desc
    @DefaultValue   设置@QueryParam参数的默认值 如果@QueryParam没有接收到值,就使用默认值。比如:@DefaultValue("description") @QueryParam("desc") String desc
    @FormParam   form传递的参数 接受form传递过来的参数。比如:@FormParam("name") String userName
    @BeanParam   通过Bena的形式传递参数 接受client传递的bean类型的参数,同时这个bean可以在属性上配置@FormParam用以解决client的属性名称和bean的属性名称不一致的问题。比如:@BeanParam User user
    @Context   获得一些系统环境信息 通过@Context可以获得以下信息:UriInfo、ServletConfig、ServletContext、HttpServletRequest、HttpServletResponse和HttpHeaders等
    @XmlRootElement   将bean转换为xml 如果要将bean以xml或json的格式返回,必须要这个注解。比如:@XmlRootElement public class User{...}
    @XmlElements
    @XmlElement   

    参考

    http://www.eclipse.org/jetty/

    https://jersey.github.io/

    end

  • 相关阅读:
    053-113
    053-262
    053-294
    053-494
    053-60
    053-105
    053-102
    053-218
    【转】LiveWriter插入高亮代码插件介绍 基于SyntaxHighighter
    windows live Writer test
  • 原文地址:https://www.cnblogs.com/luangeng/p/6151501.html
Copyright © 2011-2022 走看看