我有一个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;
}
}
[编辑] 我已经简化了原始帖子中的代码,只是为了尝试使用任何示例。
我有什么明显的遗失吗?
答案 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() {