2

サーブレットコンテナなしでSpring 3.0でRESTサービスを作成する可能性はありますか? アプリケーションサーバーを使いたくないからです。SimpleHttpInvokerServiceExporter と Spring MVC を使用して REST サービスを作成しようとしましたがjava.lang.NoClassDefFoundError: javax/servlet/ServletException、サーブレット コンテナーを使用していないため、取得できませんでした。私のコードは次のようになります。

<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 にはサーブレット API が必要です

次の方法で、JSE 6 HTTP サーバーを使用して Simple Rest Service を作成できます。

Resource クラスを作成します

@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 を構築する方法の詳細な説明については、RESFul Webservice mit JAX-RS (ドイツ語)を参照してください。

于 2012-04-06T15:43:07.987 に答える