基于Maven的SpringMVC项目Servlet无法找到第二张JSP页面问题求助
问题核心原因与解决方案
1. 缺失Spring MVC核心配置项
你当前的telusko-servlet.xml缺少两个必要配置,导致DispatcherServlet无法正常处理视图跳转和静态资源请求:
- 没有配置内部资源视图解析器,Spring无法定位到JSP文件的路径
- 没有开启默认Servlet处理器,所有请求都被DispatcherServlet拦截,包括JSP资源的访问请求
修正后的telusko-servlet.xml配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:ctx="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <ctx:annotation-config></ctx:annotation-config> <ctx:component-scan base-package="com.telusko"></ctx:component-scan> <!-- 开启默认Servlet处理器,处理静态资源、JSP等非Controller请求 --> <mvc:default-servlet-handler/> <mvc:annotation-driven/> <!-- 配置视图解析器,自动拼接前缀后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 如果你的JSP放在webapp根目录,前缀就写/,如果放在WEB-INF/jsp下就写/WEB-INF/jsp/ --> <property name="prefix" value="/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
同步修改AddController代码
配置视图解析器后,无需再写.jsp后缀,直接返回视图名即可:
@RequestMapping("/add") public String add() { return "display"; }
临时替代方案
如果不想配置视图解析器,也可以直接在Controller返回值前加forward前缀:
@RequestMapping("/add") public String add() { return "forward:/display.jsp"; }
2. Tomcat 10兼容性问题
Tomcat 10及以上版本采用Jakarta EE规范,所有javax.servlet相关包全部重命名为jakarta.servlet,如果你的Spring版本低于5.3,默认使用的是javax.servlet包,会出现类找不到的异常,解决方案二选一:
- 降级使用Tomcat 9.x版本,兼容旧的javax.servlet规范
- 升级Spring版本到5.3+,并将所有Servlet相关依赖替换为Jakarta EE版本的依赖
3. 额外检查项
- 确认
display.jsp放在src/main/webapp根目录下,和index.jsp同级 - 清理Tomcat工作目录,重新发布项目后再测试
内容的提问来源于stack exchange,提问作者epicUsername
相关产品推荐
相关产品推荐

