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 ...
随机推荐
- 2017.10.3 QBXT 模拟赛
题目链接 T1 模拟 #include <cstring> #include <cstdio> #define N 105000 int L,R; char s[N]; int ...
- 如何选择Web开发框架
下面先来看看为什么要使用Web开发框架一 使用框架的必然性框架,即framework.其实就是某种应用的半成品,把不同应用程序中有共性的一些东西抽取出来,做成一个半成品程序,这样的半成品就是所谓的程序 ...
- 使用代码获得Netweaver里某个software component和C4C的版本
有同事问如何通过代码的方式获得Netweaver里某个Software component的版本信息,以及Cloud for Customer(C4C)的版本信息. Netweaver 点了Detai ...
- UVALive 3523 Knights of the Round Table 圆桌骑士 (无向图点双连通分量)
由于互相憎恨的骑士不能相邻,把可以相邻的骑士连上无向边,会议要求是奇数,问题就是求不在任意一个简单奇圈上的结点个数. 如果不是二分图,一定存在一个奇圈,同一个双连通分量中其它点一定可以加入奇圈.很明显 ...
- 【PowerShell语音计算器】
[PowerShell语音计算器]带中文发音功能的计算器程序,支持鼠标和小键盘输入,支持多种数值转人民币大写,如:123.4--->壹佰贰拾叁点肆圆. 版本号 1.51 下载:http://fi ...
- Bootstrap历练实例:动画的进度条
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- tcp 高性能服务, netty,mqtt
1. io 线程不要有比较长的服务. 全部异步化. [1] netty 权威指南上只是说业务复杂时派发到业务线程池种. 共用的线程池最好都轻量. 多层线程池后, 下层的可以进行隔离. 这个是 mqtt ...
- 01_11_Strtus2简单数据验证
01_11_Strtus2简单数据验证 1. 引入struts标签 <%@taglib uri="/struts-tags" prefix="s" %&g ...
- dSYM文件
来到新公司后,前段时间就一直在忙,前不久 项目 终于成功发布上线了,最近就在给项目做优化,并排除一些线上软件的 bug,因为项目中使用了友盟统计,所以在友盟给出的错误信息统计中能比较方便的找出客户端异 ...
- python @staticmethod和@classmethod
Python其实有3个方法,即 静态方法 (staticmethod), 类方法 (classmethod)和 实例方法. 如下: def foo(x): print "executing ...