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 ...
随机推荐
- Python中的绝对路径和相对路径
大牛们应该对路径都很了解了,这篇文章主要给像我这样的入门小白普及常识用的,啊哈 下面的路径介绍针对windows,其他平台的暂时不是很了解. 在编写的py文件中打开文件的时候经常见到下面其中路径的表达 ...
- python基础教程总结4—基本语句
一.print 和 import 的更多信息 print 打印多个表达式也是可行的,只要将它们用逗号隔开就好: >>> print('Age:' , 42) Age: 42 可以看到 ...
- 使用EventLog组件读写事件日志
实现效果: 知识运用: Eventlog类的SourceExists方法 //确定指定的事件源是否已在本地计算机注册 public static bool SourceExists(string s ...
- JSONPath - XPath for JSON
http://goessner.net/articles/JsonPath/ [edit] [comment] [remove] |2007-02-21| e1 # JSONPath - XPath ...
- Redis的安装以及spring整合Redis时出现Could not get a resource from the pool
Redis的下载与安装 在Linux上使用wget http://download.redis.io/releases/redis-5.0.0.tar.gz下载源码到指定位置 解压:tar -xvf ...
- centos7中文显示为小方块~~啊啊啊 求大佬们解答
这个问题困扰我很久了,刚好前几天注册了博客园,就想问问大佬们是怎么解决中文显示小方块的? 我试了很多办法,包括但不限于修改i18n配置文件,locale.conf,添加中文字体库等等等... 但都没有 ...
- vue入坑教程(三)vue父子组件之间互相调用方法以及互相传递数据
1.父组件调用子组件的方法 父组件: <template> <div> <button v-on:click="clickParent">点击& ...
- JTT808、JTT809、JTT796、JTT794、JTT1077、JTT1078区别与交通部道路运输车辆卫星定位系统部标标准大全下载地址
部标JT/T808协议.JT/T809协议.JT/T796标准.JT/T794标准的区别,他们是基于不同的通信场景,不同的通信对象,不同的设计目的和目标而制定出来的.首先要知道这些标准的全称是什么意思 ...
- Spring学习笔记之Spring概述
概述 Spring是一个java应用最广的开源框架,它是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Deve ...
- mysql crash cource 书中实例
样例表 CREATE TABLE customers( cust_id int NOT NULL AUTO_INCREMENT, cust_name char(50) ...