2012-04-05 3 views
2

서블릿 컨테이너없이 Spring 3.0으로 REST 서비스를 만들 수 있습니까? 왜냐하면 나는 응용 프로그램 서버를 사용하고 싶지 않기 때문입니다. SimpleHttpInvokerServiceExporter 및 Spring MVC를 사용하여 REST 서비스를 만들려고했지만 서블릿 컨테이너를 사용하지 않았기 때문에 java.lang.NoClassDefFoundError: javax/servlet/ServletException이 발생했습니다.JDK6 HTTP 서버에서 Spring 3과 REST 서비스

<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; 
    } 
} 
+0

먼저 REST는 HTTP.So 당신이 당신의 REST 요청을 제공하기 위해 서블릿 컨테이너가 필요 의미 찾을 수 있습니다. – sathis

+0

Jdk6 Http 서버를 사용하고 싶습니다. 따라서 서블릿 컨테이너가없는 http가 있습니다. –

+0

서블릿 컨테이너에서 실행하고 싶지 않은 이유는 무엇입니까? –

답변

2

스프링 MVC는 다음을 JSE 6 HTTP Server를 사용하여

만들 수있는 간단한 휴식 서비스를 서블릿 API를 필요로 같은 서비스를 찾습니다 : 내 코드는 다음과 같습니다 방법

리소스 클래스를 만들려면

@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"; 
    } 
} 
,

당신은 나머지 응용 프로그램

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(); 

을 시작하는 방법입니다. 스프링 MVC가 필요하지 않습니다.

테스트 목적으로 이것은 매우 잘 작동합니다. 많은 요청이있는 생산적인 사용을 위해 Jetty 또는 Tomcat과 같은 WebContainer를 사용합니다.

표준 JSE 6 HttpServer에를 사용하여 편안한를 구축하는 방법에 대한 자세한 설명은 이 (독일어) RESTFul Webservice mit JAX-RS

+0

많은 도움을 주신 고마워요.하지만 스프링 리모팅으로이 문제를 해결할 수있는 방법이 있는지 알고 있으면 흥미로울 것입니다. –

+0

그래 ... 내가 좋아할만한 두 번째는 봄과 봄 MVC로 해결되는 것을 보아라. –