2

私は戦争として(グラスフィッシュに)展開しようとしているEclipseで構築されたSpring MVCアプリを持っています。次のような Application クラスがあります。

package com.jp5.rest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Service;

@Service
@ComponentScan
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    public static void init() {
        SpringApplication.run(Application.class);
    }

}

編集: 私は近づいています。war ファイルがデプロイされます。しかし、どの Web サービス エンド ポイントにも到達できません (それらはすべて 404 を返します)。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/application-context.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

そして、次のような application-context.xml :

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">  

    <bean id="application" class="com.jp5.rest.Application"
        init-method="init" >
        </bean>


    <context:component-scan base-package="com.jp5.rest"/>       
</beans>

コントローラーは次のようになります。

package com.jp5.rest;
@ComponentScan
@EnableAutoConfiguration
@Controller
@RequestMapping("/jp5/rest/message")
public class MessageRestService
{
   @RequestMapping(method=RequestMethod.PUT, value="/test")
   public @ResponseBody testResult test()
   {
       return new testResult(true, "test");
   }
}

編集2 ポインタをありがとう。ここからの解決策: http://spring.io/guides/gs/convert-jar-to-war/は、このようなクラスを追加することでした。まだテストしていませんが、これは web.xml の代わりになると思います:

package com.jp5.rest;


import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.SpringBootServletInitializer;

public class Jp5RestXML extends SpringBootServletInitializer {

    @Override
    protected void configure(SpringApplicationBuilder application) {
        application.sources(Application.class);
    }

}

ありがとう

4

1 に答える 1

2

パッケージングに基づいて、これはmain(...)メソッドが意味をなさない Web アプリケーションであると思います。代わりに、ApplicationSpring 構成で初期化する必要があります。

他の場所で参照する必要がある場合は、Spring 構成で Bean として定義します。

<bean id="application" class="somepackage.Application" init-method="init"/>

それ以外の場合、起動時に 1 回限りの初期化処理を実行するだけでよい場合は、クラスに@Serviceorでアノテーションを付けて、次のように Spring 構成にディレクティブ@Componentを含めることができます。component-scan

<context:component-scan base-package="somepackage"/>

Spring は、Web アプリケーションのコンテキスト内で実行される単なる制御の反転 (IoC) コンテナーであり、特別なデプロイ方法は必要ありません。該当する Spring ライブラリが Web アプリケーションで (Tomcat 共通クラスローダーのパス上で、または Web アプリケーションにバンドルされて) 利用可能である限り、他の J2EE Web アプリケーションと同様にデプロイできます。

Spring ステレオタイプ アノテーション リファレンス

編集:これがREST API用の場合、使用しているライブラリは、に追加できるサーブレット実装を提供する必要がありますweb.xml

たとえば、Restlet フレームワークを使用している場合、サーブレットの定義は次のようになります。

<servlet>
    <servlet-name>RestletServlet</servlet-name>
    <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
    <init-param>
        <param-name>org.restlet.application</param-name>
        <param-value>somepackage.RESTApplication</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>RestletServlet</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

実装に置き換えsomepackage.RESTApplicationてください。org.restlet.Application

于 2013-11-15T02:27:17.863 に答える