我正在尝试使用java / tomcat设置RESTful api。
我使用start类来启动tomcat,并希望使用ResourceConfig类来注册资源。
我的入门班:
public class Start
{
private static final String CONTEXT_PATH = "/backend";
private static final String WEB_APP_LOCATION = "backend/src/main/webapp/";
private static final String WEB_APP_MOUNT = "/WEB-INF/classes";
private static final String WEB_APP_CLASSES = "backend/build/classes";
public static void main( String[] args ) throws Exception
{
Tomcat tomcat = new Tomcat();
tomcat.setPort( 8080 );
String filepath = new File( WEB_APP_LOCATION ).getAbsolutePath();
Context context = tomcat.addWebapp( CONTEXT_PATH, filepath);
String pathToClasses = new File(WEB_APP_CLASSES).getAbsolutePath();
WebResourceRoot resources = new StandardRoot(context);
DirResourceSet dirResourceSet = new DirResourceSet(resources, WEB_APP_MOUNT, pathToClasses, "/");
resources.addPreResources( dirResourceSet );
context.setResources(resources);
String ip;
try(final DatagramSocket socket = new DatagramSocket()){
socket.connect(InetAddress.getByName("8.8.8.8"), 10002);
ip = socket.getLocalAddress().getHostAddress();
}
System.out.println("starting server at " + ip);
tomcat.start();
System.out.println("server started");
tomcat.getServer().await();
}
}
我的Application.java:
@ApplicationPath("services")
public class Application extends ResourceConfig {
public Application(){
super();
System.out.println("registering classes...");
registerClasses(TestResource.class);
}
}
我的测试资源:
@Path("/test")
public class TestResource
{
@GET
@Produces("text/plain")
public String getMessage(){
return "Hello World";
}
}
使用main方法启动程序时,服务器将启动并正确绑定到端口,因此转到localhost:8080会出现预期的404错误。
但是,没有输出表明应用程序已初始化,并且当尝试转到localhost:8080 / backend / services / test时,我不应该获取404错误。
WEB_APP_LOCATION和WEB_APP_CLASSES指向相对于工作目录的正确位置。
如有需要,我可以提供其他信息。