You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring MVC项目部署嵌入式Tomcat访问指定路径报404错误求助

Spring MVC嵌入式Tomcat启动后访问404问题排查

线上学习Spring课程,使用Java配置的Spring MVC框架,通过Eclipse启动嵌入式Tomcat后,访问localhost:8080/myprojectname出现404错误页面,尝试多种解决方案无效。

补充说明:暂未创建.ftl文件,课程中老师执行相同操作可正常显示内容,自身经验不足,表述若有疏漏请见谅。

相关代码

AppInitializer.java

package it.myshop.web;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.FrameworkServlet;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;


public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] {MyShopConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    protected FrameworkServlet createDispatcherServlet(WebApplicationContext servletAppContext) {
        DispatcherServlet ds = new DispatcherServlet(servletAppContext);
        ds.setThrowExceptionIfNoHandlerFound(true);
        return ds;
    }
}

MyShopConfig.java

package it.myshop.web;

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.view.freemarker.FreeMarkerConfigurer;
import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;

@ComponentScan(basePackages = "it.myshop.web.controller")
@Configuration
@EnableWebMvc
public class MyShopConfig {
    
    @Bean
    public FreeMarkerViewResolver configureResolver() {
        FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
        resolver.setPrefix("");
        resolver.setSuffix(".ftl");
        
        return resolver;
    }
    
    @Bean
    public FreeMarkerConfigurer configureFreeMarker() {
        FreeMarkerConfigurer config = new FreeMarkerConfigurer();
        config.setTemplateLoaderPath("/WEB-INF/view/");
        
        return config;
    }
}

WelcomeController.java

package it.myshop.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/")
public class WelcomeController {
    
    @GetMapping("/")
    public String welcome(ModelMap model) {
        model.addAttribute("message", "Ciao, benvenuto nel mio e-commerce!");
        
        return "welcome";
    }

}

待创建的welcome.ftl内容

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Welcome page!</title>
</head>
<body>

    <h1>${message}</h1>

</body>
</html>

排查方向

  • 模板文件缺失:控制器返回"welcome",对应需要在/WEB-INF/view/目录下创建welcome.ftl文件,FreeMarker视图解析器必须匹配到对应模板才能正常渲染页面,缺失会直接导致视图解析失败引发404。
  • 上下文路径验证:检查Eclipse中嵌入式Tomcat的上下文路径设置,确认是否为myprojectname,部分默认配置下上下文路径为/,此时访问路径应为localhost:8080/。
  • 组件扫描有效性:确认WelcomeController所在包it.myshop.web.controller与MyShopConfig中@ComponentScan指定的包名完全一致,避免因包名拼写错误导致控制器未被扫描加载。
  • 目录结构检查:确保src/main/webapp/WEB-INF/view/目录存在(Maven项目结构),若不存在需手动创建,否则FreeMarker无法找到模板文件。
  • 日志异常查看:你已开启setThrowExceptionIfNoHandlerFound(true),可查看控制台日志是否有"No handler found"异常,以此判断请求是否到达DispatcherServlet、控制器是否被正确映射。

内容的提问来源于stack exchange,提问作者Golter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:07:22