本篇博客特别补充: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的问题吧,也很奇葩!

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

05-11 21:59