我正在开始一个新的spring mvc项目,我想用注释做所有的配置。我认为我遇到的问题是将web.xml迁移到AppInitializer,因为当我进行更改并使用新配置部署应用程序时,我得到404一个工作正常的URL直到更改
我当前的web.xml是:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>sample</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>ar.com.orangebit.springMvcQuickstart.config</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>sample</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
我认为有问题的AppInitializer是:
public class AppInitializer 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("/*");
}
private AnnotationConfigWebApplicationContext getContext() {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setConfigLocation("ar.com.orangebit.springMvcQuickstart.config");
return context;
}
}
使用上面的类,当我创建gradle jettyRunWar
并输入localhost:8080
时,我看到了META-INF和WEB-INF目录,而不是webapp的主页。
如果您想查看项目的其余部分,则github上的当前代码
答案 0 :(得分:0)
只有在使用jetty插件时才会出现此问题。如果您在带有Tomcat的IDE中运行该应用程序或将其打包并将其打包并将其部署到Tomcat,它就可以正常工作。
我猜测jetty插件与Servlet 3初始化器不能很好地配合。
看看你的代码,我看到你使用的是Spring 4,因此我建议你看一下Spring Boot。
如果您使用它,您将能够删除大部分Spring配置文件,并且它内置了对嵌入式Tomcat和Jetty(我实际上没有使用过这个选项)的支持,它可以在IDE和构建工具中完美运行像Maven和Gradle。