创建名为“defaultServletHandlerMapping”的 bean 时出错
Posted
技术标签:
【中文标题】创建名为“defaultServletHandlerMapping”的 bean 时出错【英文标题】:Error creating bean with name 'defaultServletHandlerMapping 【发布时间】:2016-04-04 00:29:40 【问题描述】:这是一个spring(带有spring security)+java+maven在eclipse上的应用。提交注册表单时遇到以下错误。随后查看我的其余文件:
HTTP Status 500 - Request processing failed; nested exception is
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'defaultServletHandlerMapping' defined in class
org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration:
Bean instantiation via factory method failed; nested exception is
org.springframework.beans.BeanInstantiationException: Failed to instantiate
[org.springframework.web.servlet.HandlerMapping]:
Factory method 'defaultServletHandlerMapping'
threw exception; nested exception is java.lang.IllegalArgumentException:
A ServletContext is required to configure default servlet handling
我的文件:
AppInit
package com.myapp.config;
import org.springframework.security.web.context.*;
public class AppInit extends AbstractSecurityWebApplicationInitializer
MyApp 配置文件:
package com.myapp.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
import com.myapp.JDBC.EmailJDBC;
import com.myapp.JDBC.LastIdJDBC;
import com.myapp.JDBC.LoginJDBC;
import com.myapp.JDBC.PersonJDBC;
@EnableWebMvc //mvc:annotation-driven
@Configuration
@ComponentScan(basePackages = "com.myapp" )//, excludeFilters =
//@Filter(type = FilterType.ANNOTATION, value = Configuration.class) )
public class myappConfig extends WebMvcConfigurerAdapter
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry)
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
@Bean
public InternalResourceViewResolver viewResolver()
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views/jsp/");
viewResolver.setSuffix(".jsp");
return viewResolver;
@Bean
public DriverManagerDataSource getDatasource()
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setPassword("1234567");
dataSource.setUrl("jdbc:mysql://localhost:3306/myapp");
dataSource.setUsername("root");
return dataSource;
@Bean
public LoginJDBC getLoginBean()
LoginJDBC bean = new LoginJDBC();
bean.setDataSource(new myappConfig().getDatasource());
return bean;
@Bean
public PersonJDBC getPersonBean()
PersonJDBC bean = new PersonJDBC();
bean.setDataSource(new myappConfig().getDatasource());
return bean;
@Bean
public EmailJDBC getEmailBean()
EmailJDBC bean = new EmailJDBC();
bean.setDataSource(new myappConfig().getDatasource());
return bean;
@Bean
public LastIdJDBC getLastIdBean()
LastIdJDBC bean = new LastIdJDBC();
bean.setDataSource(new myappConfig().getDatasource());
return bean;
WebInit 文件:
package com.myapp.config;
import javax.servlet.Filter;
import org.springframework.core.annotation.Order;
import org.springframework.web.filter.HiddenHttpMethodFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class myappWebInit extends
AbstractAnnotationConfigDispatcherServletInitializer
@Override
protected Class<?>[] getServletConfigClasses()
return new Class[] myappConfig.class ;
@Override
protected String[] getServletMappings()
return new String[] "/","/login", "/signuPerson","/regPerson","/regPersonSuccess" ;
@Override
protected Class<?>[] getRootConfigClasses()
return new Class[] RootConfiguration.class ;
@Override
protected Filter[] getServletFilters()
return new Filter[] new HiddenHttpMethodFilter() ;
安全配置文件:
package com.myapp.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.*;
import org.springframework.security.web.csrf.CsrfTokenRepository;
import org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository;
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled=true)
public class SecurityConfig extends WebSecurityConfigurerAdapter
@Autowired
private CsrfTokenRepository csrfTokenRepository()
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setSessionAttributeName("_csrf");
return repository;
@Override
protected void configure(HttpSecurity http) throws Exception
http
.csrf()
.csrfTokenRepository(csrfTokenRepository())
.and()
.authorizeRequests()
.antMatchers("/resources/**", "/signuPerson").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
//.failureUrl(authenticationFailureUrl)
.permitAll()
.and()
.logout()
.permitAll();
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
我很抱歉放了很多东西。我已经尝试过解决与此类似的问题,但它没有锻炼。任何提示将不胜感激。提前致谢!
【问题讨论】:
尝试删除文件 AppInit 并重建您的应用程序!告诉我它是否有帮助! @Mr.Arjun 我试过了,但问题没有解决。我想问题出在注册控制器的级别。不知何故,请求处理程序没有很好地定义。但我不知道该怎么做。此外,我找不到程序试图创建和实例化的“defaultHandlerBean”。谢谢! 【参考方案1】:我在此平台上类似问题的解决方案的帮助下解决了这个问题。
我通过在 myappconfig 文件中添加以下注释来排除配置过滤器的扫描:
@EnableWebMvc
@Configuration
@ComponentScan(
basePackages = "com.myapp" ,
excludeFilters =
@Filter(type = FilterType.ANNOTATION, value = Configuration.class)
)
这样做之后,问题并没有解决。
然后我删除了@EnableWebMvc
并放入 myappinit 文件,问题就解决了。
我的猜测是 @EnableWebMvc
和 @ComponentScan(basePackages = "com.myapp" , excludeFilters =
@Filter(type = FilterType.ANNOTATION, value = Configuration.class) )
不应该在同一个配置文件中。
【讨论】:
以上是关于创建名为“defaultServletHandlerMapping”的 bean 时出错的主要内容,如果未能解决你的问题,请参考以下文章
JPA/Hibernate 无法创建名为 Order 的实体
创建名为“springSecurityFilterChain”的 bean 时出错
Spring Boot - “创建名为 'entityManagerFactory' 的 bean 时出错” - 开始
创建名为“requestMappingHandlerAdapter”的 bean 时出错