SpringMVC项目Tomcat部署后访问/show报错求助
解决SpringMVC项目启动报错及请求映射找不到的问题
咱们一步步拆解并解决你遇到的两个核心问题:
一、启动阶段"未找到指定类/包[classpath:config/spring-mvc.xml]的注解类"报错
问题根源
你在web.xml中给DispatcherServlet配置了contextClass为org.springframework.web.context.support.AnnotationConfigWebApplicationContext,这个类的作用是加载基于Java注解的配置类(比如带@Configuration注解的类),但你同时又指定了contextConfigLocation指向XML配置文件spring-mvc.xml——这两种配置方式完全冲突,Spring会误以为你要从指定路径加载注解类,自然找不到,从而抛出错误。
解决方案(二选一,推荐第一种)
方案1:保留XML配置(最直接)
删除DispatcherServlet的contextClass初始化参数,因为Spring默认的XmlWebApplicationContext就是专门用来加载XML配置的。修改后的servlet配置如下:
<servlet> <servlet-name>springServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:config/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
方案2:改用注解配置(适合喜欢注解驱动的场景)
如果想切换到纯注解配置,需要:
- 删除
contextConfigLocation参数; - 创建一个Spring MVC配置类(比如
MvcConfig),用注解替代XML配置:@Configuration @EnableWebMvc @ComponentScan(basePackages = "com.yihao.controller") public class MvcConfig implements WebMvcConfigurer { // 配置视图解析器 @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setViewClass(JstlView.class); resolver.setPrefix("/WEB-INF/"); resolver.setSuffix(".jsp"); return resolver; } // 配置文件上传解析器 @Bean public CommonsMultipartResolver multipartResolver() { CommonsMultipartResolver resolver = new CommonsMultipartResolver(); resolver.setDefaultEncoding("utf-8"); resolver.setMaxUploadSize(20971520); resolver.setMaxInMemorySize(20971520); return resolver; } // 启用默认Servlet处理静态资源 @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } } - 确保
web.xml中DispatcherServlet的contextClass参数保留,这样Spring会自动扫描并加载你的注解配置类。
二、访问/show时"DispatcherServlet'springServlet'中无URI[/show]的请求映射"报错
问题根源
这个问题是第一个报错的连锁反应:因为DispatcherServlet的上下文没有正确加载,spring-mvc.xml中的<context:component-scan base-package="com.yihao.controller" />没有生效,导致你的ShowView控制器类没有被Spring容器管理,自然不会注册/show的请求映射。
额外检查细节
当解决第一个问题后,还需要确认两个小细节:
- 确保
ShowView类的@RequestMapping("/show")注解拼写正确(你的代码里是没问题的); - 控制器方法返回的
"showView",结合视图解析器的prefix="/WEB-INF/"和suffix=".jsp",需要保证项目的WEB-INF目录下存在showView.jsp文件,否则后续会出现视图找不到的错误。示例showView.jsp可以这样写:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Show Page</title> </head> <body> <h1>${msg}</h1> <p>Method: ${method}</p> </body> </html>
验证步骤
- 重新打包WAR包,部署到Tomcat;
- 启动Tomcat,查看启动日志,确认"未找到指定类/包"的错误已经消失;
- 访问
http://localhost:9035/show,应该能正常跳转到showView.jsp页面,显示对应的内容。
内容的提问来源于stack exchange,提问作者林万程
相关产品推荐
相关产品推荐

