zoukankan      html  css  js  c++  java
  • springmvc始终跳转至首页,不报404错误

    本篇博客特别补充:2017-3-4 9:42,经过分析和测试,本篇博客的解决方案只是碰巧,暂时的解决了问题。在后续的运行中,又出现了同样的毛病。经过日志跟踪,发现了端倪,下篇博客深入的剖析!本篇博客,就当看着玩儿吧。。。。。让大家见笑了


    一、项目背景

    近期在做项目的时候,发现了一个怪事。真真的是怪事,就是突然之间,我的项目就出毛病了:每次打开首页之后,所有的链接都跳转到首页,但URL地址又是正确的。然而,当设置断点调试的时候,它是进入了后台系统,也就是说springmvc是有作用的,但始终不进入到目标地址所对应的controller方法。愁死了。。。。

    二、解决过程 

    2.1,检查相应的controller方法

    为什么会检查这个,因为在这个方法里面,有两种情况会重定向或者转发至首页,所以当程序运行的时候,总是跳转到首页,我猜想是不是这两种情况的条件符合了,是走向的正常逻辑处理。所以,加了断点调试,也看了浏览器的网络请求,发现这个方法根本没有进入到controller的对应方法,也就不存在是符合了正常逻辑的正确跳转。但是,它很奇怪的每次都执行controller的首页方法,特别特别的奇怪。

    思考:因为对应请求的代码里,有两种逻辑处理确实是令其重定向或者转发至首页,所以当发生请求始终跳转至首页的时候,检查是否满足了其条件才产生的逻辑处理,这是首先要做的事儿

    2.2,检查<a href=""></a>

    以前做项目,包括给别人调试bug的时候,遇到过页面跳转不成功的问题,就是因为这个a 标签没有用对,所以,我就检查了一下这个标签。但不管我换成什么地址,它还是每次都跳转到系统首页,用浏览器的F12进入调试页面的时候,发现不报错,然后eclipse的控制台,也不报任何错,相反还打出了进入主方法的日志信息。这下子就懵了!

    思考:如果是a 标签的链接出了问题,那么至少应该报404或者500之类的问题,但是页面可以成功跳转,说明这个标签是没错的。而且每次URL地址都符合自己预期的效果,所以检查这一步,算是走投无路的选择,而不是理论上的最优选。在这一步上测试,浪费了时间!  所幸,我也不是第一步就测试的这个标签,

    2.3,思考整个框架配置

    因为之前一直做项目都好好的,但是下午重新工作后,就变成这个样子了。而且检查代码也没有问题,我就在想:会不会是过程中改变了什么配置,或者是程序在运行过程中出现了什么问题?

    基于这个思路,我就一直想这个系统运行,会经历哪些步骤,我改了什么内容:

    首先检查了web.xml应用程序描述文件,没什么问题,那也就是说tomcat容器根据web.xml文件的描述初始化容器配置没有什么问题

    然后检查了server.xml文件,这个文件是tomcat如何启动和工作的描述性文件,很重要,然后依次检查了各个节点的配置,最后是发现在上下文配置<Context>这一步,我更改了docBase的设置,出问题了。(当时是为了测试发布系统,不用输入项目名和端口号给改的配置文件)

    然后更改了这一个文件之后,又想到当时也更改了项目路径下.setting.xml里面的相关内容,为了不更改其他系统的使用。我重新换了个tomcat服务器,重启,一切正常。

    三、思考

    为什么改了默认配置,不用输入项目名的时候,就反复跳转到首页呢?

    因为我在web.xml里面配置了默认进入页,就是首页。也就是说,当输入地址,别的什么都不输入的时候,它其实会执行跳转到首页的controller方法。而当我把<a>标签的链接地址改为www.baidu.com,它仍然跳转到首页的时候,会发现地址栏的地址,变成了:http://localhost/项目名/www.baidu.com。而当其URL地址已经变成了:http://localhost/项目名/{参数}/controller方法时,依然会发生无法跳转对应方法,仍然是执行首页方法的时候,我就还是一脸懵逼!

    猜想:

    3.1,疑惑一:失踪的404页面

    出现http://localhost/项目名/www.baidu.com的时候,应该报错的。因为在web.xml里面使用了以下代码去替换掉tomcat的默认Servlet:

    <servlet-mapping>
    <servlet-name>项目名</servlet-name>
    <!--默认匹配所有的请求 -->
    <url-pattern>/</url-pattern>
    </servlet-mapping>

    当地址为http://localhost/项目名/www.baidu.com时,Servlet匹配不到对应的对应的www.baidu.com请求,应该出现的404错误提示,为什么没有?

    3.2,疑惑二:阴魂不散的首页

    当其URL地址已经变成了:http://localhost/项目名/{参数}/controller方法时,应该出现其对应的页面。(不存在这springmvc的环境没有配好,因为它可以正常访问首页,正常访问首页的controller方法。而且,这个项目之前能够正常运行。)

    那我正确的跳转页面,到底去哪儿了?为什么每次都是首页呢?为什么一换了个tomcat服务器,一切就正常了呢?

    四、总结

    经过上面一系列的思考(调bug整了一下午,然后安静的想了2个小时左右)突然想到了一个词:缓存!如果有了页面缓存这个概念,那么解释问题就变得很容易了。PS:真的有缓存的!

    其实,我还有一个想法,既然每次都跳转首页,那肯定是和我配置的首页、和springmvc的Servlet处理有关,额,饿了。我还是先去吃饭,然后回来接着干活,接着思考吧。大概又得去啃springmvc的文档和资料了!

    其实,还有一个地方要考虑,那就是我换掉的那个tomcat和不换之前有什么区别,因为我把我之前改了的server.xml内容改回去的还是不行。麻烦死了,具体的原因再说吧,先将这个记录下来。下篇博客再写写遇到的关于引入JS的问题吧,也很奇葩!


    如果对这个问题,有熟悉的,请多多指教!

  • 相关阅读:
    【华为云技术分享】ArcFace简介
    [学]PHP爬虫框架phpspider
    zend studio 自动注释、备注和常用有用快捷键
    mysql 为什么加了排序字段后不会自动按ID升序排序?
    【PHP转义字符】单引号双引号以及转义字符【原创】
    Javascript小结(四)----包装对象
    JavaScript小结(三)----字符串操作
    JavaScript小结(二)-----Date()函数
    Javascript小结(一)----prototype对象
    PHP底层原理分析和底层扩展编写
  • 原文地址:https://www.cnblogs.com/hhx626/p/7534604.html
Copyright © 2011-2022 走看看