tomcat7上部署RESTeasy[helloworld]

之前在项目上使用过Jersey实现的JAXRS RESTful Webservice部分交互功能,容器是tomcat;看到RESTful还有另一种实现resteasy,不过resteasy和jboss容器紧密结合,但它同时也支持jdk5以上的tomcat环境。

一,工具

tomcat7.0.68,

resteasy-jaxrs-3.0.17.Final,

EclipseJEE(Mars2)

二,RESTeasy服务端配置

参考官方的userguide文档,配置web.xml配置、实现javax.ws.rs.core.Application、实现资源类(merrick.resteasy.):

1,配置web.xml

<?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" id="WebApp_ID" version="3.0">
  <display-name>rest1</display-name>

	
   	<context-param>
		<param-name>resteasy.logger.type</param-name>
		<param-value>LOG4J</param-value>
	</context-param>
	
	<context-param>
           <param-name>resteasy.resources</param-name>
           <param-value>merrick.resteasy.ServeResource</param-value>
    </context-param>
	
	<context-param>
        <param-name>resteasy.servlet.mapping.prefix</param-name>
        <param-value>/resteasy</param-value>
    </context-param> 
   
   	<listener>
      <listener-class>
         org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
      </listener-class>
    </listener> 
  
  	<servlet>
        <servlet-name>Resteasy</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>merrick.resteasy.TestAPPApplication</param-value>
        </init-param>
    </servlet>
    	
	<servlet-mapping>
		<servlet-name>Resteasy</servlet-name>
		<url-pattern>/resteasy/*</url-pattern>
	</servlet-mapping>

</web-app>


2,实现简单的资源服务类:

package merrick.resteasy;

import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import org.apache.log4j.Logger;

@Path("/rootclasspath")
public class ServeResource {
	@Context HttpServletRequest rq ;
	
	public static Logger log = Logger.getLogger(ServeResource.class);
	
	@GET
	@Path("/m1")
	@Produces(MediaType.TEXT_HTML)
	public String getstring1(){
		
		log.info("Get Request, " + new Date().toString());
		return "hello1";
	}
	
	@GET
	@Path("/m2/{param1}")
	@Produces(MediaType.TEXT_HTML)
	public String getstring2(@PathParam("param1") String p1 ){
		log.info("REQ URL: "+ rq.getRequestURL());
		log.info("Get Request: " + new Date().toString());
		log.info( p1);
		return "hello2";
	}

}


3,按照文档继承了Application

package merrick.resteasy;

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.core.Application;

public class TestAPPApplication extends Application {
	
    Set<Object> objectSet = new HashSet<Object>();  
    Set<Class<?>> classSet = new HashSet<Class<?>>(); 
    
    public TestAPPApplication() {
	
    	objectSet.add(new ServeResource());
	}
    
    @Override
    public Set<Class<?>> getClasses() {
    	
    	return classSet;
    }
    
    @Override
    public Set<Object> getSingletons() {
    	
    	return objectSet;
    }
   
   

}


三,tomcat7上调试运行

因为环境限制没有使用Maven,web项目中把resteasy-jaxrs-3.0.17.Final/lib里的所有jar包都引进了,于是带来了一堆问题,有两个问题网上搜了半天没答案,大约所有包都加载进来了一定有不需要的而导致问题的,尝试了几次,解决如下:

问题日志:
找不到类org/hibernate/validator/method/MethodValidator
解决方法:
删除所有有关hibernate或validator的jar引用
另一个问题:
404问题,没有其他错误日志
解决方法:
继承Application类


四,使用http客户端程序测试:

主要代码:

		CloseableHttpClient c = HttpClients.createDefault();
		
		String url1 = "http://localhost:8080/resteasyservertest1/resteasy/rootclasspath/m1";

		HttpGet g = new HttpGet(url1);
		RequestConfig defaultRequestConfig = RequestConfig.custom()
			    .setSocketTimeout(5000)
			    .setConnectTimeout(5000)
			    .setConnectionRequestTimeout(5000)			//超时时间必须要设,不然客户端会无限等待
			    .setStaleConnectionCheckEnabled(true)
			    .build();
		
		g.setConfig(defaultRequestConfig);
		CloseableHttpResponse  r = c.execute(g);
		System.out.println("Response: "+EntityUtils.toString(r.getEntity()));
		System.out.println("Code: " + r.getStatusLine().getStatusCode());
		
		r.close();
		c.close();	


运行结果:

服务端

[RestServ] INFO [http-bio-8080-exec-13] merrick.resteasy.ServeResource.getstring2(32) | REQ URL: http://localhost:8080/resteasyservertest1/resteasy/rootclasspath/m2/x1
[RestServ] INFO [http-bio-8080-exec-13] merrick.resteasy.ServeResource.getstring2(33) | Get Request: Sun Oct 09 15:59:48 CST 2016
[RestServ] INFO [http-bio-8080-exec-13] merrick.resteasy.ServeResource.getstring2(34) | x1



客户端

Response: hello2
Code: 200



猜你喜欢

转载自fall10.iteye.com/blog/2332068
今日推荐