Spring结合tomcat 404的三种原因

12 篇文章 0 订阅
4 篇文章 0 订阅

前不久看SpringWeb源码的时候,做了一个简单的零xml的web项目,但是启动后就是提示404,网上找了很久还是没有找到原因,最后终于发现了与网上大多数说法不太一样的两个原因

下边看看一段代码, 看这段代码我们知道,如果不用springboot,那么这段代码是springweb项目的关键,当然前提是我们实现的零xml,如果你要提供web.xml配置文件,那就另说了

第一种

注意到addMapping()方法了么,这个地方很可能是我们出现404的一个原因

因为Dispartcher在进行路径匹配的时候,会将我们请求路径中的这段去掉,如你的请求是

http://localhost:8080/app/home 那么最后用来进行匹配的只用/home,如果你的Controller中提供的路径是/app/home, 那么你的正确请求路径应该是http://localhost:8080/app/app/home

public class MyWebApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletCxt) {

        // Load Spring web application configuration
		System.out.println("xxx");
		//这里提供的application只是一个对象实例, 但是整个spring的环境还没有准备好
        AnnotationConfigWebApplicationContext ac = new AnnotationConfigWebApplicationContext();
        ac.register(AppConfig.class);
//        ac.refresh();

		// Create and register the DispatcherServlet
        DispatcherServlet servlet = new DispatcherServlet(ac);
        servlet.setContextInitializers(new MyApplicationContextInitializer());
        ServletRegistration.Dynamic registration = servletCxt.addServlet("app", servlet);
        registration.setLoadOnStartup(1);
        //需要注意的是, 这个地方的app在进行mapping 匹配的时候会被拿掉
		//也就是url:/app/index/index实际在匹配地址为/index/index
        registration.addMapping("/app/*");

		FilterRegistration.Dynamic filter = servletCxt.addFilter("filter", StaticFilter.class);
		filter.addMappingForUrlPatterns(null, false, "/views/*");
    }
}

第二种

大家都是怎么打包的呢,下边先看两个图, 在这两个图中,我们的打包的名字要与我们的请求的路径一致,如我们打包项目为web, 但是在部署的时候通过http://localhost:8080/webTest访问,那么404就出现了

在这里插入图片描述

在这里插入图片描述

第三种

其中前两种是打包部署都没有问题,只是访问出现了问题,第三种是可能是你的代码没有什么问题,但是打包的方式出现了问题,这个时候你启动tomcat一般回提示你你对项目不是一个合法的web模块,那就重新打包吧,或者是调整打配置参数再试试

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值