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的问题吧,也很奇葩!
如果对这个问题,有熟悉的,请多多指教!
springmvc始终跳转至首页,不报404错误的更多相关文章
- springmvc始终跳转至首页,不报404错误(续)
上篇博客说到,当我执行程序时,springmvc的控制下,它始终跳转到首页,而不正常跳转.当时通过换一个服务器解决了问题,以为是缓存的事儿.但后来又发生了同样的事儿,顿时感觉出事儿了.就立马降低了日志 ...
- SpringMVC中用@ParamVariable传递的参数包含斜杠(/)时,匹配不了报404错误的解决方案
今天做网站[标签]筛选功能时,出现了这么个奇葩的问题. 我是直接通过<a>标签中href来跳转的,url中包含汉字 <a href="/tags/标签A"> ...
- springmvc项目,浏览器报404错误的问题
问题描述: 建立了web工程,配置pom.xml,web.xml,编写controller类,在spring-mvc-servlet.xml文件中指定开启注解和扫描的包位置<mvc:annota ...
- SpringMvc实现批量删除,使用post传值一直报404错误
Ajax结合SpringMVC实现批量删除信息,在前台使用post向后台传递要删除的id的集合额时候,一直报404错误, 前台post传值的源码如下: 了解一下: (1)第二行的rows为前面得到的一 ...
- springMVC配置时,静态资源和jsp文件路径没错但是访问时controller的请求报404错误。
springMVC配置时,静态资源和jsp文件路径没错但是访问时controller的请求报404错误. 1.场景 如果在web.xml中servlet-mapping的url-pattern设置的是 ...
- 对于springmvc 很奇妙的报404错误的记录
@RequestMapping("/editItems") public ModelAndView editItems(Integer id) throws Exception { ...
- <mvc:default-servlet-handler/>导致controller失效,报404错误
最近在做ssm框架整合的一个小项目时,页面跳转一直有404错误,也没有报错提示.然后一步一步去找,终于发现是<mvc:default-servlet-handler/>的原因.如下图所示, ...
- WinServer2008R2 + IIS 7.5 + .NET4.0 经典模式 运行WebAPI程序报404错误的解决方案
在Windows Server 2008 R2系统下,IIS 7.5 + .NET Framework 4.0的运行环境,以经典模式(Classic Mode)部署一个用.NET 4.0编译的 Web ...
- Eclipse配置tomcat后,启动tomcat,访问tomcat报404错误
当你在Eclipse中新建一个工程,配置好tomcat,然后测试tomcat是否配置成功的时候,报404错误异常. 解决方法: 1,把工程文件删除,重新建立一个新的工程, 2,新建一个工程. 3,Ne ...
随机推荐
- 实现memcopy函数
实现memcopy函数: void * memcpy(void *dest, const void *src, unsigned int count); { if ((src == NULL) || ...
- SQL Server AlwaysON从入门到进阶(6)——分析和部署AlwaysOn Availability Group
前言: 本节是整个系列的重点文章,到现在,读者应该已经对整个高可用架构有一定的了解,知道独立的SQL Server实例和基于群集的SQL Server FCI的区别.上一节已经介绍了如何安装SQL ...
- 给广大码农分享福利:一个业界良心的github仓库,中文计算机资料
我今天查资料时无意发现的,https://github.com/CyC2018/CS-Notes 这个仓库包含了下列几个维度的计算机学习资料: 深受国内程序员喜爱,已经有超过3万多star了. 1. ...
- Processing分形之一——Wallpaper
之前用C语言实现过一些分形,但是代码比较复杂.而对于天生对绘图友好的Processing,及其方便. 在大自然中分形普遍存在,我们用图形模拟,主要是找到一个贴近的函数. 代码 /** * Wallpa ...
- xpath定位和css定位对比
xpath定位和css定位对比 实际项目中使用较多的是xpath定位和css定位.XPath是XML文档中查找结点的语法,换句话就是通过元素的路径来查找这个元素.xpath比较强大,而css选择器 ...
- 关于lua 5.3 服务端热更新流程
脚本的热更新的流程都大同小异, 第一步先保存旧代码的块的数据, 第二部加载新的代码块,第三步将旧代码块的局部和全局数据拷贝到新代码块的对应的 变量中. 在服务器热更新中,主要考虑热更的内容是什么, 一 ...
- iOS应用架构谈part3 网络层设计方案
前言 网络层在一个App中也是一个不可缺少的部分,工程师们在网络层能够发挥的空间也比较大.另外,苹果对网络请求部分已经做了很好的封装,业界的AFNetworking也被广泛使用.其它的ASIHttpR ...
- Core BlueTooth官方文档翻译
本⽂文是苹果<Core Bluetooth Programming Guide>的翻译. 关于Core Bluetooth Core Bluetooth 框架提供了蓝⽛牙低功耗⽆无线设备与 ...
- 如何在vue项目中引用Iview
iview 安装 npm install iview --save 引入iview import Vue from 'vue' import App from './App' import route ...
- Protobuf有没有比JSON快5倍?用代码来击破pb性能神话
转 http://www.sohu.com/a/136487507_505779 2017-04-26 07:58 程序设计 /58 /技术 导读:Google 的 Protocol Buffers ...