springmvc不进入Controller导致404的问题
作者:叫我吕小布 发布时间:2023-03-18 01:29:20
一.摘要
emmmm..
对springmvc不太熟练的情况下,如果不出意外的话,项目启动后出现404页面是很烦人。
在这里,我记录一下可能会导致出现这种情况的原因<因为之前的文章结构不算是很清晰,所以这次做一些修改>
二.出现404的分类以及会导致的原因
1.启动项目后,无法访问主页出现的404
2.1.1.查看项目是否启动成功;
2.1.2.确认项目地址的正确性;
2.1.3.作为项目主页的html页面应该放到工程的WebContent的根目录下;
2.项目启动并且成功进入主页后,访问其他页面出现的404
2.2.1. 相关操作访问路径是否正确;
2.2.2. Controller层是否被注解@Controller标注为组件;
2.2.3. springmvc配置文件中,是否配置了对@Controller标签的支持:<mvc:annotation-driven />;
2.2.4. springmvc配置文件中,是否配置了对Controller层的扫描: <context:component-scan base-package="controller">;
2.2.5. sprinmvc的配置文件中,视图解析器路径是否配置异常;
2.2.6. 检查web.xml中的相关配置是否正确:
1.是否配置了spring的监听,以及正确加载spring相关配置文件
2.是否正确加载springmvc的配置文件
三.分情况详细说明
3.1.先附上并简单介绍一下我的工程结构目录图
简单介绍一下applicationContext-*为什么会有三个:
applicationContext-dao
: 里面配置了数据源,以及对mybatis的相关支持<注意我的项目是ssm>applicationContext-service
:里面配置了事务管理applicationContext-trans
: 配置了对Service层的扫描
如果没有对Service层的扫描,就无法使用到@Service标注的组件,从而导致Controller中的出现空指针情况。
emmm,,,稍微考虑了一下,我决定把applicationContext-trans的配置截图附上:
你看把,真的是只配置了对Service层注解的扫描
3.2.启动项目后,无法访问主页出现404
3.2.1. 查看项目是否启动成功;
略<sorry,没什么可说的>
3.2.2.确认项目地址的正确性;
略
3.2.3.作为项目主页的html页面应该放到工程的WebContent的根目录下;
参照上面项目结构
3.3.项目启动并且成功进入主页后,访问其他页面出现404; 3.3.1.相关操作访问路径是否正确;
检查包括:
①. 页面的请求路径
②. Controller层的路径
③. web.xml是否配置了对前端请求的拦截路径<怎么这么多情况....>
截个图,给个案例:
①. index.jsp如下
②. Controller如下
③. 前端 * :
注意拦截路径: /表示拦截一切路径,不能是/*
(如果你要问为什么,抱歉,人家这么规定我也无能为力)
3.3.2.Controller层是否被@Controller标注为组件
顾名思义,略。(如果这个都不会,你该考虑一下是不是还要把demo给进行下去了)
3.3.3.springmvc配置文件中,是否配置了对@Controller标签的支持:<mvc:annotation-driven />
①. <mvc:annotation-driven />我配置在了springmvc-config.xml文件中,在下面讲解合适的时候我会附上代码截图
<为什么老是截图?因为我愿意...>
②. 什么是<mvc:annotation-driven/>
相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter。
简单来说就是: 提供了使用并且能够识别@Controller注解的前提.
3.3.4.springmvc配置文件中,是否配置了对Controller层的扫描:<context:component-scan base-package=" ">
既然上面配置了对@Controller的支持,现在就需要配置对@Controller注解的扫描
值得注意的是(比如在我的demo里),
base-package="controller",而不是bask-package="controller.*";
3.3.5.springmvc配置文件中,是否正确配置了视图解析器的路径
<!-- 配置视图解析器 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/> //value路径配置的是jsp所在的文件夹目录
<property name="suffix" value=".jsp"/> //value配置的是页面的后缀
</bean>
现在,附上springmvc配置文件springmvc-config的代码截图(现在就是合适的时候):
在这里面包括了上述说的1.注解的支持;2.扫描@Controller注解所在包的配置;3.视图解析器的配置
3.3.6.检查web.xml中的相关配置是否正确
注意:我的配置文件在一个资源文件夹下,具体路径还请根据自己的结构目录来配置
①. 是否配置了spring的监听,以及正确加载spring相关配置文件
//配置spring相关配置文件
<context-param>
<param-name>contextConfigLocation</param-name> //不可修改
<param-value>classpath:config/spring/applicationContext-*.xml</param-value>
</context-param>
//配置spring监听
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
附上截图,方便查看:
②. 是否正确加载springmvc的配置文件
标签概念及代码如下:
//配置servlet
<servlet>
<servlet-name>springmvc</servlet-name> //可以理解为刚给当前servlet起名字,可自定义
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>//springmvc的核心处理器,不可自定义
<init-param>
<param-name>contextConfigLocation</param-name> //核心处理器的初始化,不可自定义
<param-value>classpath:springmvc/springmvc-config.xml</param-value> //springmvc配置文件的目录,根据自己结构目录自定义
</init-param>
</servlet>
//配置servletMapping
<servlet-mapping>
<servlet-name>springmvc</servlet-name> //可以理解为指定被Mapping的servlet的名称(代码第二行中的名称相同)
<url-pattern>/</url-pattern> //配置拦截路径,/表示全拦截
</servlet-mapping>
<url-pattern/> * 路径的配置方式包括: *.do 、*.action 、/
意思是分别:拦截以do、action、任意后缀或者是无后缀的前端请求
附上截图,方便大家更直观的看:
来源:https://blog.csdn.net/qq_36769100/article/details/71746449


猜你喜欢
- 1.springboot启动过程中,首先会收集需要加载的bean的定义,作为BeanDefinition对象,添加到BeanFactory中
- private string HttpPost(string Url, string postDataStr)
- 前言JVM是Java中比较难理解和掌握的一部分,也是面试中被问的比较多的,掌握好JVM底层原理有助于我们在开发中写出效率更高的代码,可以让我
- 用Stream解决两层List属性求和假设一个人有很多个银行账户,每个银行账户中存有不同金额的存款,那么我们如何用Stream求一组人的所有
- 一、将已经编译后的java中Class文件进行打包;打包命令JAR 如:将某目录下的所有class文件夹全部进行打包处理;使用的命令:jar
- Google在Android 4.4版本加入了半透明的界面样式,在Android 5.0的时候推出了Material Design的概念。这
- 本文实例讲述了Java Swing中JTable渲染器与编辑器用法。分享给大家供大家参考,具体如下:JTable的内容、外观、事件响应在很大
- 引言Netty作为高性能的网络通信框架,它是IO模型演变过程中的产物。Netty以Java NIO为基础,是一种基于异步事件驱动的网络通信应
- 在C#中常用到的运算符有条件运算符,is运算符,as运算符,typeof 运算符等等,接下来在文章中将为大家具体介绍各个运算符的使用方法条件
- 1.下载文件,将文件保存到本地。(只试用excel);2.对文件的标题进行检验;3.获取导入的批次(取一个表的一个值,加1);4.循环获取文
- 目录目标功能点准备工作引入 Maven 依赖配置 DAO 数据层创建 JWT 工具类登录LoginFilterLoginSuccessHan
- 自动登录是我们在软件开发时一个非常常见的功能,例如我们登录 QQ 邮箱:很多网站我们在登录的时候都会看到类似的选项,毕竟总让用户输入用户名密
- 在分布式系统架构中,如果一个应用不能对来自依赖的故障进行隔离,那该应用本身就处在被拖垮的风险中。 因此,为了构建稳定、可靠的分布式系统,我们
- Android当道,现在学习Android开发还晚吗?写下这个问题的时间是–2014年6月15号,我会回答:不晚,Android至少还能在活
- 前言Redis是一个开源的Key-Value数据缓存,和Memcached类似。Redis多种类型的value,包括string(字符串)、
- 一、前言一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文
- 将int数组转化为Integer数组这里使用java8的stream来进行转化,详细步骤如下所示://初始化int数组int[] nums
- 什么是Kotlin?Kotlin是一种可以在 Java 虚拟机 (JVM) 上运行的开源编程语言。该语言可以在许多平台上运行。它是一种将面向
- 本文实例为大家分享了OpenCV实现直线检测并消除的具体代码,供大家参考,具体内容如下很简单,代码如下#include<iostrea
- LocalDateTime 是 Java 8 中日期时间 API 提供的一个类,在日期和时间的表示上提供了更加丰富和灵活的支持。LocalD