3

誰もが次の作業サンプルを持っていますか:

  • 組み込みの Jetty 8.x アプリ
  • Spring MVC の使用
  • ゼロ XML 構成 (つまり、サーブレット側で Spring WebApplicationInitializer を使用し、Spring 側で注釈/Java 構成を使用)

考えられるすべての組み合わせを試しましたが、これを機能させることはできません。私が見つけたほとんどの埋め込まれた桟橋の例は、7.x に基づいているか、まだ XML 構成ファイルを使用しています。私が今得た最良のセットアップは、WebAppContext を作成し、構成を AnnotationConfiguration に設定することです。これは、何かが実際に起こっていることをコンソールに示していますが、確実にクラスパス上にあるにもかかわらず、WebApplicationInitializer クラスを見つけることができません。これは、Jetty 8.1.4 および Spring 3.1.2 に基づいています。

テスト目的では、WebApplicationInitializer クラスはあまり機能しません。onStartup メソッドに何かを出力して、これがロードされているかどうかを確認するだけです。

ありがとう!

4

2 に答える 2

1

この質問を見ましたか:Spring 3.1 WebApplicationInitializer&Embedded Jetty 8 AnnotationConfiguration

私は自分のコードを共有することはできませんが、ここにあなたを助けるかもしれないいくつかのコードがあります:

Web.xml

<!-- Java-based Spring container definition -->
<context-param>
    <param-name>contextClass</param-name>
    <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>

<!-- Location of Java @Configuration classes that configure the components that makeup this application -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>com.workable.config</param-value>
</context-param>

空のapplication-config.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
</beans>

Spring WebMVCConfig:

/**
 * Spring MVC Configuration.
 *
 */
@Configuration
@EnableWebMvc
@EnableAsync
@EnableScheduling
public class WebMvcConfig extends WebMvcConfigurerAdapter {
}

/**
 * Main configuration class for the application.
 * Turns on @Component scanning, loads externalized application.properties.
 */
@Configuration
@ComponentScan(basePackages = {
    "com.workable"
}, excludeFilters = {@Filter(Configuration.class)})
public class MainConfig {
    ...
}

Libバージョン:

<spring.version>3.1.2.RELEASE</spring.version>
<jetty.version>8.1.5.v20120716</jetty.version>
于 2013-01-23T16:25:31.947 に答える
0

これは、ジェッティ9で私のために働いたものです.

    Server server = new Server(8080);

    WebAppContext webAppContext = new WebAppContext();
    webAppContext.setResourceBase("src/main/webapp");
    webAppContext.setContextPath("/");
    webAppContext.setConfigurations(new Configuration[] {
            new WebXmlConfiguration(),
            new AnnotationConfiguration() {
                @Override
                public void preConfigure(WebAppContext context) {
                    ClassInheritanceMap map = new ClassInheritanceMap();
                    map.put(WebApplicationInitializer.class.getName(), 
                            new ConcurrentHashSet<String>() {{add(WebApplication.class.getName());}});
                    context.setAttribute(CLASS_INHERITANCE_MAP, map);
                    _classInheritanceHandler = new ClassInheritanceHandler(map);
                }
            }
        });
    server.setHandler(webAppContext);
    server.start();

桟橋 8 の場合、これは機能する可能性があります。

webAppContext.setConfigurations(new Configuration[] {
    new WebXmlConfiguration(),
    new AnnotationConfiguration() {
        @Override
        public void preConfigure(WebAppContext context) throws Exception {
            MultiMap<String> map = new MultiMap<String>();
            map.add(WebApplicationInitializer.class.getName(), MyWebApplicationInitializerImpl.class.getName());
            context.setAttribute(CLASS_INHERITANCE_MAP, map);
            _classInheritanceHandler = new ClassInheritanceHandler(map);
        }
    }
});

MultiMap は org.eclipse.jetty.util パッケージの 1 つの形式です

于 2016-03-08T19:50:25.790 に答える