gpt4 book ai didi

Spring 注释配置未启动

转载 作者:行者123 更新时间:2023-11-28 22:19:45 24 4
gpt4 key购买 nike

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

我已经在我的初始化器中添加了一个记录器,它甚至似乎没有启动,而且页面现在只给我 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);
}

这是我的配置类。

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;
}

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

这里有什么明显的遗漏吗?

最佳答案

一个:

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

我认为是错误的,你必须注册server 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");

因为您正在通过 @ComponentScan("com.demo.web.controller")扫描 @Controller

五个

改变:

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

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

关于Spring 注释配置未启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26280145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com