resteasy学习

    概述  

           最近项目想要重构api调用,由原来传统soap rpc web service 重构为restful web service.

        在众多的rest架构中,Jersey,Resteasy,Restlet,Apache CXF, 考虑到集成能力,稳定性,安全性,易用性,维护以及配置,选择Resteasy.Resteasy是JBoss的一个开源项目,是ax-rs规范的一个完整实现,其开发易上手.

      demo

       开始搭建一个helloworld.

       准备:jdk8

      pom.xml

	<!--resteasy -->
	<dependency>
		<groupId>org.jboss.resteasy</groupId>
		<artifactId>resteasy-jaxrs</artifactId>
		<version>3.1.3.Final</version>
	</dependency>

不使用application       

    web.xml

	    <!-- Auto scan REST service 扫描注册rest服务--> 
    <context-param> 
        <param-name>resteasy.scan</param-name> 
        <param-value>true</param-value> 
    </context-param> 
    <context-param> 
           <param-name>resteasy.resources</param-name> 
           <param-value>stu.resteasy.TestResource</param-value> 
    </context-param> 
   
    <!-- this need same with resteasy ser
vlet url-pattern 访问目录,要与servle-mapping对应,可不设--> 
    <context-param> 
        <param-name>resteasy.servlet.mapping.prefix</param-name> 
        <param-value>/rest</param-value> 
    </context-param> 
   
   <!--listener 监听器-->
    <listener> 
        <listener-class> 
            org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap  
        </listener-class> 
    </listener> 
   
   <!--servlet-->
    <servlet> 
        <servlet-name>resteasy-servlet</servlet-name> 
        <servlet-class> 
            org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher  
        </servlet-class> 
    </servlet> 
   
    <servlet-mapping> 
        <servlet-name>resteasy-servlet</servlet-name> 
        <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 

           此段注释掉也能成功

    <context-param> 
        <param-name>resteasy.scan</param-name> 
        <param-value>true</param-value> 
    </context-param> 

           官方注释:Automatically scan WEB-INF/lib jars and WEB-INF/classes directory for both @Provider and JAX-RS resource classes (@Path, @GET, @POST etc..) and register them 

         注释掉或者设置为false,还是会成功,后来才知道这个resteasy.scan在3.0版本后已经过时了,现在resource可以自扫描.推荐Use a servlet 3.0 container and the ResteasyServletInitializer.        

           配置资源

package stu.resteasy;
import javax.ws.rs.GET;  
import javax.ws.rs.Path;  
import javax.ws.rs.PathParam;  
import javax.ws.rs.core.Response;  
   
@Path("/testResource")  
public class TestResource {  
    @GET 
    @Path("/{param}")  
    public Response printMessage(@PathParam("param") String msg) {  
   
        String result = "Restful example : " + msg;  
   
        return Response.status(200).entity(result).build();  
   
    }  
   
} 


       访问:localhost:8080/ rest/helloworld

         打印:helloworld

基于application控制

web.xml

    <!-- this need same with resteasy servlet url-pattern 访问目录,要与servle-mapping对应,可不设--> 
    <context-param> 
        <param-name>resteasy.servlet.mapping.prefix</param-name> 
        <param-value>/rest</param-value> 
    </context-param> 
   
   
   <!--servlet-->
    <servlet> 
        <servlet-name>resteasy-servlet</servlet-name> 
        <servlet-class> 
            org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher  
        </servlet-class> 
       <init-param>     
            <param-name>javax.ws.rs.Application</param-name> 
            <param-value>stu.resteasy.TestApplication</param-value> 
         </init-param>      
    </servlet> 
   
    <servlet-mapping> 
        <servlet-name>resteasy-servlet</servlet-name> 
        <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 

           以上可配置多个

           application

package stu.resteasy;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/rest")
public class TestApplication extends Application {  
	private static Set<Class<?>> classes = new HashSet<Class<?>>();
    @Override
    public Set<Class<?>> getClasses() {
    	//注册服务,可注册多个
        classes.add(TestResource.class);
        classes.add(TestResourceA.class);
        return classes;
    }
} 

      此处的@ApplicationPath主要设置resource的资源跟路径

      http://localhost:8080/rest/testResource/helloworld
      打印:helloworld

      注意:

           假如使用ResteasyServletInitializer(容器启动)容器启动空的web.xml,不需要配置任何配置,依赖注解@ApplicationPath

           (ResteasyServletInitializer初始化将每个application生成servlet交于org.jboss.resteasy.plugins.server.servlet.HttpServlet30Dispatcher)

           ResteasyServletInitializer只支持servlet3.0以上,所以使用的servlet容器必须是3.0以上,比如jetty8.0,tomcat7.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值