2016-04-29 20 views
1

私は非常に単純なweb.xmlを持つwebappを持っています。春のwebappで静的ファイルを提供できません

<?xml version="1.0"?> 

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

私は手動でこれを行うことを望むように、クラスorg.glassfish.jersey.server.spring.SpringWebApplicationInitializerが自動的にContextLoadListenerとRequestContextListenerを追加しないように、私はこのcontextConfigLocationプロパティを設定します。

次に、私自身のWebApplicationInitializerクラスを使用して、サーブレットをweb.xmlでなくプログラムで追加します。

public class MyWebAppInitializer implements WebApplicationInitializer { 

    private static final Logger LOGGER = Logger.getLogger(SpringWebApplicationInitializer.class.getName()); 

    @Override 
    public void onStartup(ServletContext sc) throws ServletException { 
     //Setup spring listeners 
     { 
      LOGGER.config(LocalizationMessages.REGISTERING_CTX_LOADER_LISTENER()); 
      sc.addListener(ContextLoaderListener.class); 
      sc.addListener(RequestContextListener.class); 
     } 
     //Jersey Rest Servlet 
     { 
      final ServletRegistration.Dynamic registration = sc.addServlet(ServletContainer.class.getName(), ServletContainer.class); 
      registration.setInitParameter("javax.ws.rs.Application", com.tervita.portal.RestApplication.class.getName()); 
      registration.addMapping("/rest/*"); 
     } 
     //Normal Servlets 
     { 
      final ServletRegistration.Dynamic registration = sc.addServlet(LoginAction.class.getName(), LoginAction.class); 
      registration.addMapping("/LoginAction"); 
     } 
     //Apache Default Servlet 
     { 
      ServletRegistration.Dynamic dispatcher = sc.addServlet("dispatcher", DispatcherServlet.class); 
      dispatcher.setLoadOnStartup(1); 
      dispatcher.addMapping("/test"); 
     } 

    } 
} 

私は自分のWebアプリケーションを実行すると私は、このような/css/app/ui-grid.cssとして追加した静的ファイルにアクセスすることができません。私はTomcatを実行すると

war file structure

私はこのかかわらを取得...

enter image description here

だから、私はここで、デフォルトのサーブレットを無効に私のサーブレットの設定で任意のエントリを持っていない混乱していますTomcatは/ *でなければなりません。デフォルトのサーブレットがヒットせず、コンテンツを配信しないのはなぜですか?

+0

のTomcat管理コンソールで、あなたのウェブアプリケーションがデプロイされたコンテキスト(パス)を確認できますか?おそらくそれは '/ tervita360'の代わりにルートコンテキスト('/')に展開されていますか? – ochi

+0

はい、間違いなく/ tervita360にあります。また、私のテストサーブレットに到達することができます。 – benstpierre

+0

WARファイルの内容はどうですか?彼らは正しいのですか?必要なファイルがすべてそこにあることを確認するためにWARファイルを調べましたか? - 今のところ基本をカバーします – ochi

答えて

0

Jerseyには、/ *などのデフォルトマッピングを変更していたJerseyServletContainerInitializerというServletContainerInitializerを実装するクラスがあります。私はHow to disable Servlet 3.0 scanning and auto loading of componentsとしてweb.xml経由でコンテナ内のServletContainerInitializerクラスのスキャンを無効にしなければならず、静的リソースが再び機能します。

関連する問題