Spring MVC 4配置找不到我的控制器

时间:2015-11-01 23:56:34

标签: java spring spring-mvc

您好我是Spring MVC 4的新手我正在尝试进行java配置设置但是看起来Spring没有找到我的控制器运行良好没有启动时出现错误我甚至可以显式调用jsp但是如果我尝试调用我的控制器什么都不做

e.g。 localhost:8080/apollo/hello.jsp< - 如果我将JSP放在webapp目录中,这会很好。

我想要的是使用我的控制器调用我的login.jsp

我的项目结构是

com
  +apollo
  -WebAppInitializer.java
  -WebConfig.java
src
 +main
   +webapp
   -**hello.jsp**
     +WEB-INF
       +view
       -**login.jsp**

这是我的配置

package com.apollo;    
import java.util.Locale;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.apollo")
public class WebConfig extends WebMvcConfigurerAdapter {

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

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

        return resolver;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        /*registry.addResourceHandler("/pdfs/**").addResourceLocations("/WEB-INF/pdf/");
          registry.addResourceHandler("/css/**").addResourceLocations("/WEB-INF/css/");*/
        registry.addResourceHandler("/static/**").addResourceLocations("/static/");
    }

}

这是我的初始化程序类

package com.apollo;

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.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

public class WebAppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        WebApplicationContext context = getContext();
        servletContext.addListener(new ContextLoaderListener(context));
        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet", new DispatcherServlet(context));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("*.html");
    }

    private AnnotationConfigWebApplicationContext getContext() {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();            
        context.register(WebConfig.class);
        return context;
    }

}

这是我的控制器

package com.apollo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;


@Controller
public class LoginController {

    @RequestMapping(value="/login")
    public String greeting  (Model model){
        System.out.println("controller???");
        model.addAttribute("greeting" , "Hello World");
        return "login";
    }
}

1 个答案:

答案 0 :(得分:0)

basePackages 表示包含控制器

问题在于:

@ComponentScan(basePackages = "com.apollo")

你应该改为

@ComponentScan(basePackages = "com.apollo.controller")

如果你把控制器放到模块上,你应该像这样扫描

@ComponentScan(basePackages = "com.apollo.**.controller")