您的位置:首页 > 运维架构 > Tomcat

使用Embedded Tomcat 和 Resteasy 来发布一个 Restful Service

2015-11-09 16:11 295 查看
需求是比较简便的发布,不需要配置文件。于是就像到了Embedded Tomcat。代码如下:

public class TomcatLauncher {
public static void main(String[] args) throws Exception {

Path path = Files.createTempDirectory("webapps");

Tomcat tomcat = new Tomcat();

// 添加一个webapp,路径是/t
Context ctx = tomcat.addWebapp("/t", new File(".").getAbsolutePath());
//Resteasy的Listener
ctx.addApplicationListener("org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap");
//各个Resource的配置类
ctx.addParameter("javax.ws.rs.core.Application", "com.rum.restful.Config");
//路径配置,一般和下面的Servlet Mapping那里的一致
ctx.addParameter("resteasy.servlet.mapping.prefix", "/services");

//在webapp /t下面添加名字为Resteasy的Servlet
tomcat.addServlet("/t", "Resteasy", new HttpServletDispatcher());
//将所有/services下面的请求交给ResteasyServlet处理
ctx.addServletMapping("/services/*", "Resteasy");

// Tomcat Native / APR . 需要tc-native1.dll
// 不是必须
StandardServer server = (StandardServer)tomcat.getServer();
AprLifecycleListener listener = new AprLifecycleListener();
server.addLifecycleListener(listener);

tomcat.setPort(8080);    // 端口
tomcat.start();
tomcat.getServer().await();
}
}


其中com.rum.restful.Config是Resteasy的Application配置类:

public class Config extends Application {
HashSet<Object> singletons = new HashSet<Object>();

public Config() {
singletons.add(new HelloResource());
}

@Override
public Set<Class<?>> getClasses()
{
HashSet<Class<?>> set = new HashSet<Class<?>>();
return set;
}

@Override
public Set<Object> getSingletons()
{
return singletons;
}
}


HelloResource是一个Restful Resource:

@Path("trace")
public class HelloResource {

@GET
@Produces("text/plain")
public String toString(@QueryParam("id") String id) {
return Thread.currentThread().getName() + "hello, world " + id;
}

}


然后就可以通过http://SERVER:8080/t/services/trace来访问这个Resource了。

什么web.xml 都不需要了,呵呵
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: