问题:
运行SSM项目,访问URL时显示:
类型 状态报告 消息 请求的资源[/employee/list]不可用 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。
1:前提:
确认Root + Web容器配置没有问题
确定 添加了ComponentScan,能扫描到所有的Controller + Service + mapper
确定浏览器访问路径无误
(如果只是返回json,不需返回试图的话)确认 Controller添加了@ResponseBody注解。否则会自动去找对应的静态视图,就会报错资源不存在。
2:排查:
(1)在Controller中第一句添加输出语句,发现在访问响应URL的时候,并没有输出。
——> 得出:DispatcherServlet没有按照这个url找到对应的handler(即Controller方法)
因此考虑是配置问题,即handlermapping不正确,因此无法匹配url和handler的对应关系
而handlermaping是自动配置的,不需手动实现。因此考虑是SSM项目没有正确加载Web容器的配置类。
(2)为了验证想法,在Web配置类第一句加入启动时的log日志输出:
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
System.out.println("MyWebAppInitializer is initialized");
}
但是在重新运行项目的时候,控制台并没有输出。
——> 因此确认是没有加载配置类
(3)关键
在确保MyWebAppInitializer 和 配置类没有问题;且没有额外配置web.xml,导致和配置类的内容冲突等错误后,考虑时Tomcat的问题。
先去项目的 pom.xml下查看依赖:
如果存在依赖: jakarta.jakartaee-web-api,则表示本项目用的Servlet是属于jakarta下的。
而Tomcat 10 开始支持 Jakarta EE。如果你使用的是 Tomcat 9 或更早版本,它们使用的是 javax 命名空间,不兼容 jakarta 命名空间的 Servlet 配置。
——> 因此终极解决方法:将Tomcat升级到 10.
升级后重新运行,问题即可解决。
1万+

被折叠的 条评论
为什么被折叠?



