2015-07-14 2 views
1

Я не могу запустить приложение на tomcat 7. Я развернул его на tomcat, и он не работает (на сервере Linux), но я могу запустить его из eclipse в Windows. Здесь ошибка:Не удается запустить военное приложение на tomcat, запущенном на сервере Linux

Jul 12, 2015 2:48:16 PM org.apache.catalina.core.ContainerBase addChildInternal 
SEVERE: ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649) 
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:672) 
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1862) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NullPointerException 
    at cz.prosvaly.configuration.AppInitializer.onStartup(AppInitializer.java:39) 
    at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:175) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5479) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    ... 10 more 

Jul 12, 2015 2:48:16 PM org.apache.catalina.startup.HostConfig deployDescriptor 
SEVERE: Error deploying configuration descriptor /etc/tomcat7/Catalina/localhost/ROOT.xml 
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]] 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:904) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649) 
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:672) 
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1862) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 

Вот это AppInitializer

package cz.prosvaly.configuration; 

import javax.servlet.FilterRegistration; 
import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRegistration; 

import org.springframework.web.WebApplicationInitializer; 
import org.springframework.web.context.ContextLoaderListener; 
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; 
import org.springframework.web.filter.CharacterEncodingFilter; 
import org.springframework.web.filter.DelegatingFilterProxy; 
import org.springframework.web.servlet.DispatcherServlet; 

public class AppInitializer implements WebApplicationInitializer { 

    public void onStartup(ServletContext container) throws ServletException { 

     AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); 
     ctx.register(AppConfig.class); 
     ctx.setServletContext(container); 

     container.addListener(new ContextLoaderListener(ctx)); 

     ServletRegistration.Dynamic servlet = container.addServlet(
       "dispatcher", new DispatcherServlet(ctx)); 

     servlet.setLoadOnStartup(1); 
     servlet.addMapping("/"); 

     FilterRegistration.Dynamic fr = container.addFilter("encodingFilter", 
       new CharacterEncodingFilter()); 
     fr.setInitParameter("encoding", "UTF-8"); 
     fr.setInitParameter("forceEncoding", "true"); 
     fr.addMappingForUrlPatterns(null, true, "/*"); 

     FilterRegistration.Dynamic filter = container.addFilter("springSecurityFilterChain", 
       new DelegatingFilterProxy()); 
     filter.addMappingForUrlPatterns(null, true, "/*"); 


    } 

} 

Ошибка в этой строке:

filter.addMappingForUrlPatterns(null, true, "/*"); 

Мой ПОМ

<?xml version="1.0"?> 
<project 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

    <modelVersion>4.0.0</modelVersion> 
    <groupId>cz.prosvaly</groupId> 
    <artifactId>prosvaly</artifactId> 
    <packaging>war</packaging> 
    <version>1.0.0</version> 
    <name>Prosvaly.cz</name> 

    <properties> 
     <springframework.version>4.1.6.RELEASE</springframework.version> 
     <org.springframework.security.version>4.0.1.RELEASE</org.springframework.security.version> 
     <hibernate.version>4.3.6.Final</hibernate.version> 
     <mysql.version>5.1.31</mysql.version> 
     <joda-time.version>2.3</joda-time.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.7</version> 
     </dependency> 

     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jul-to-slf4j</artifactId> 
      <version>1.7.7</version> 
     </dependency> 

     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jcl-over-slf4j</artifactId> 
      <version>1.7.7</version> 
     </dependency> 

     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>log4j-over-slf4j</artifactId> 
      <version>1.7.7</version> 
     </dependency> 

     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-jdk14</artifactId> 
      <version>1.7.7</version> 
     </dependency> 

     <!-- Spring Security --> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-web</artifactId> 
      <version>${org.springframework.security.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-config</artifactId> 
      <version>${org.springframework.security.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.pdfbox</groupId> 
      <artifactId>pdfbox</artifactId> 
      <version>1.8.6</version> 
     </dependency> 
     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-classic</artifactId> 
      <version>1.0.13</version> 
     </dependency> 
     <dependency> 
      <groupId>net.coobird</groupId> 
      <artifactId>thumbnailator</artifactId> 
      <version>0.4.7</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.mail</groupId> 
      <artifactId>mail</artifactId> 
      <version>1.5.0-b01</version> 
     </dependency> 

     <!-- Spring --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${springframework.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>${springframework.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${springframework.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-tx</artifactId> 
      <version>${springframework.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>${springframework.version}</version> 
     </dependency> 

     <!-- Hibernate --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 

     <!-- jsr303 validation --> 
     <dependency> 
      <groupId>javax.validation</groupId> 
      <artifactId>validation-api</artifactId> 
      <version>1.1.0.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>5.1.2.Final</version> 
     </dependency> 

     <!-- MySQL --> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>${mysql.version}</version> 
     </dependency> 

     <!-- Joda-Time --> 
     <dependency> 
      <groupId>joda-time</groupId> 
      <artifactId>joda-time</artifactId> 
      <version>${joda-time.version}</version> 
     </dependency> 

     <!-- To map JodaTime with database type --> 
     <dependency> 
      <groupId>org.jadira.usertype</groupId> 
      <artifactId>usertype.core</artifactId> 
      <version>3.0.0.CR1</version> 
     </dependency> 

     <!-- Servlet+JSP+JSTL --> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>javax.servlet.jsp-api</artifactId> 
      <version>2.3.1</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 
     <!-- Apache Commons Upload --> 
     <dependency> 
      <groupId>commons-fileupload</groupId> 
      <artifactId>commons-fileupload</artifactId> 
      <version>1.3.1</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-war-plugin</artifactId> 
        <version>2.4</version> 
        <configuration> 
         <warSourceDirectory>src/main/webapp</warSourceDirectory> 
         <warName>prosvaly</warName> 
         <failOnMissingWebXml>false</failOnMissingWebXml> 
        </configuration> 
       </plugin> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>3.1</version> 
        <configuration> 
         <source>1.7</source> 
         <target>1.7</target> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
     <finalName>prosvaly</finalName> 
    </build> 
</project> 

@Configuration 
    @EnableWebMvc 
    @Import({ SecurityConfig.class }) 
    @ComponentScan(basePackages = "cz.prosvaly") 
    public class AppConfig { 

     @Bean 
     public ViewResolver viewResolver() { 
      InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
      viewResolver.setViewClass(JstlView.class); 
      viewResolver.setPrefix("/WEB-INF/views/"); 
      viewResolver.setSuffix(".jsp"); 

      return viewResolver; 
     } 

     @Bean 
     public MessageSource messageSource() { 
      ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); 
      messageSource.setBasename("messages"); 
      return messageSource; 
     } 

     @Bean(name="multipartResolver") 
     public CommonsMultipartResolver multipartResolver(){ 
      CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(); 
      multipartResolver.setMaxUploadSize(10000000); 
      return multipartResolver; 
     } 



    } 

Диспетчер конфигурации:

@Configuration 
public class DispatcherConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
//  registry.addResourceHandler("/css/**").addResourceLocations("/resources/css/"); 
//  registry.addResourceHandler("/html/**").addResourceLocations("/html/"); 
//  registry.addResourceHandler("/images/**").addResourceLocations("/images/"); 
     } 
} 

Весна безопасности

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    DataSource dataSource; 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth.jdbcAuthentication().dataSource(dataSource). 
     usersByUsernameQuery("select username,password, enabled from admin where username=?"). 
     authoritiesByUsernameQuery("select username, role from user_roles where username =? ") 
     .passwordEncoder(new Md5PasswordEncoder()); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 

     http.authorizeRequests() 
     .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')") 
     .and().formLogin() 
     .loginPage("/login").defaultSuccessUrl("/admin/goods").failureUrl("/login?error") 
      .usernameParameter("username").passwordParameter("password")   
     .and().logout().logoutUrl("/logout").logoutSuccessUrl("/login?logout") 
     .and().csrf(); 
    } 

} 

Может кто-нибудь мне помочь, пожалуйста?

+0

Вы уверены, что это java-файл? ваша ошибка находится в строке 39, а код имеет только 30 строк. – AntuanSoft

+0

Да, потому что у класса есть импорт в начале - вот почему я добавил строку с ошибкой - теперь я обновляю свой вопрос и добавляю весь класс с помощью импорта – user1604064

ответ

3

Можете ли вы разместить содержимое инициализатора безопасности Spring (вместе с аннотациями на классе)? Я не смог воспроизвести ошибку с заданной конфигурацией.

Кроме того, глядя на вашей конфигурации, несколько предложений:

  1. Tomcat 7 не поддерживает сервлет-API 3.1 и сервлет-Jsp 2,3. Попытка с помощью tomcat 8 может показаться вам удачной.
  2. Если вы решили остаться с tomcat 7, убедитесь, что вы используете соответствующие версии API вышеуказанных банок в своем помпе и отметьте сервлет-api-банку, как это предусмотрено в вашем контейнере сервлетов (Specs for Tomcat versions).
  3. Убедитесь, что вы не использовали changeSessionId в конфигурации фиксации сеанса (если есть); он был введен в сервлета-ап 3.1.

Вы также хотели бы взглянуть на /etc/tomcat7/Catalina/localhost/ROOT.xml, если с ним что-то не так (в случае). Eclipse использует свои собственные метаданные конфигурации для времени выполнения сервера и копирует конфигурацию вашего сервера только при определении нового сервера.

UPDATE:

Кроме того, пожалуйста, аннотировать инициализатору безопасности с @Order(1), удалите @Configuration оттуда, как это предусмотрено @EnableWebSecurity, а затем попробовать. И еще одно, замените строку регистрации фильтра и добавьте фильтр непосредственно как container.addFilter("springSecurityFilterChain", new DelegatingFilterProxy()).addMappingForUrlPatterns(null, true, "/*"); Также удалите @Import строку из ur AppConfig.

+0

Привет, я добавил классы конфигурации – user1604064

+0

Привет, не смог проверить вашу конфигурацию на том, как он работает в eclipse, но вы пытаетесь дважды зарегистрировать SpringSecurityFilterChain (в AppInitializer, зарегистрировав фильтр и в SecurityInitializer). Пожалуйста, удалите класс SpringSecurityInitializer, и все должно хорошо работать для вас.Пожалуйста, напишите комментарий, если это не так, и проверит ваш конфиг :) –

+0

Привет, извините, этот класс удален. Я отправляю все коды, потому что я пытаюсь объединить почти все, чтобы решить эту проблему :(Теперь springSecurityFilterChain должен быть инициализирован только в AppInitializer но, я получаю ту же ошибку на tomcat, которая работает на сервере Linux:/ – user1604064

Смежные вопросы