Spring注释配置无法启动

时间:2014-10-09 13:47:55

标签: spring tomcat

我有一个Spring MVC应用程序,我将其部署在tomcat服务器上。它工作正常,直到我被告知使用注释配置,而不是web.xml文件。

我已经为我的intialiser添加了一个记录器,它似乎甚至没有启动,而且这些页面现在只给我404错误。

这是我的初始化类

package com.demo.web.config;

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

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;


public class ImpInitialiser implements WebApplicationInitializer {

@Override
public void onStartup(final ServletContext servletContext) throws ServletException {
    AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
    ctx.register(AppConfig.class);
    ctx.setServletContext(servletContext);
    Dynamic dynamic = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
    dynamic.addMapping("/");
    dynamic.setLoadOnStartup(1);
}

}

这是我的Config课程。

package com.demo.web.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@ComponentScan(basePackages = "com.demo.web")
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter {

@Bean
public InternalResourceViewResolver getInternalResourceViewResolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/pages/");
    resolver.setSuffix(".jsp");
    return resolver;
}

}

[编辑] 我已经简化了原始帖子中的代码,只是为了尝试使用任何示例。

我有什么明显的遗失吗?

1 个答案:

答案 0 :(得分:1)

<强>一

// Create the 'root' Spring application context
    AnnotationConfigWebApplicationContext rootContext =
        new AnnotationConfigWebApplicationContext();
    rootContext.register(DispatcherConfig.class);

我认为错了,你必须注册服务器 bean,而不是web bean

以下是正确的

// Create the dispatcher servlet's Spring application context
    AnnotationConfigWebApplicationContext dispatcherContext =
        new AnnotationConfigWebApplicationContext();
    dispatcherContext.register(DispatcherConfig.class);

由于DispatcherConfig代表 Web 基础架构配置。

您正在注册DispatcherConfig.class两次,我认为正确。 没有意义,我第一次看到这种方法。

<强>两个

@Bean
@Resource(name = "jdbc/testDB")
public DataSource dataSourceLookup() {
    final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
    dsLookup.setResourceRef(true);
    DataSource dataSource = dsLookup.getDataSource("java:comp/env/jdbc/testDB");
    return dataSource;
}

web 方面声明DataSource是不好的做法。

<强>三

发布您的@Controller课程。

<强>四

我认为不是必要的

registry.addViewController("/grouporroles").setViewName("grouporroles");

因为您正在通过@Controller

扫描@ComponentScan("com.demo.web.controller")

<强>五

变化:

@Bean
@Resource(name = "jdbc/testDB")
public DataSource dataSourceLookup() {

@Bean(name = "jdbc/testDB")
public DataSource dataSourceLookup() {