2

是否有可能在没有 servlet 容器的情况下使用 spring 3.0 创建 REST 服务?因为我不想使用应用服务器。我尝试使用 SimpleHttpInvokerServiceExporter 和 Spring MVC 创建 REST 服务,但我得到了一个java.lang.NoClassDefFoundError: javax/servlet/ServletException,因为我不使用 servlet 容器。我的代码如下所示:

<beans>
  ...
    <bean name="serviceFacadeExporter" 
       class="org.springframework.remoting.httpinvoker.SimpleHttpInvokerServiceExporter">
        <property name="service" ref="serviceFacade" />
        <property name="serviceInterface" value="facade.ServiceFacade" />
    </bean>
    <bean id="httpServer"
        class="org.springframework.remoting.support.SimpleHttpServerFactoryBean">
            <property name="contexts">
                <map>
                    <entry key="/api/" value-ref="serviceFacadeExporter" />
                </map>
            </property>
             <property name="port" value="8082" />
    </bean>
   ...
</beans>

服务看起来像这样

@Controller
public class ServiceFacadeImpl implements ServiceFacade {

  @Override
  @RequestMapping(value = "/protein/search/{searchString}")
  public long searchProtein(@PathVariable String searchString) {
    return 0;
  }
}
4

1 回答 1

2

Spring MVC 需要 Servlet API

您可以通过以下方式使用 JSE 6 HTTP Server 创建一个简单的 Rest 服务

您创建一个资源类

@Path("/helloworld")
public class MyResource {

    // The Java method will process HTTP GET requests
    @GET
    // The Java method will produce content identified by the MIME Media
    // type "text/plain"
    @Produces("text/plain")
    public String getClichedMessage() {
        // Return some cliched textual content
        return "Hello World";
    }
}

您创建一个 Rest 应用程序

public class MyApplication extends javax.ws.rs.core.Application{
    public Set<Class<?>> getClasses() {
        Set<Class<?>> s = new HashSet<Class<?>>();
        s.add(MyResource.class);
        return s;
    }
}

这就是您启动服务器的方式

HttpServer server = HttpServer.create(new InetSocketAddress(8080), 25);
HttpContext context = server.createContext("/resources");
HttpHandler handler = RuntimeDelegate.getInstance().createEndpoint
(new MyApplication(), HttpHandler.class);
context.setHandler(handler);
server.start(); 

就这样。不需要 Spring MVC。

出于测试目的,这非常有效,对于许多请求的生产性使用,我将使用像 Jetty 或 Tomcat 这样的 WebContainer。

有关如何使用标准 JSE 6 HttpServer 构建 RESTFul 的更详细说明,请参阅 RESTFul Webservice mit JAX-RS(德语)

于 2012-04-06T15:43:07.987 回答