zoukankan      html  css  js  c++  java
  • springmvc不进入Controller导致404

    一.摘要

    emmmm..
    对springmvc不太熟练的情况下,如果不出意外的话,项目启动后出现404页面是很烦人。
    在这里,我记录一下可能会导致出现这种情况的原因<因为之前的文章结构不算是很清晰,所以这次做一些修改>

    二.出现404的分类以及会导致的原因

    1.启动项目后,访问项目无法进入主页,从而出现404;

    2.1.1.查看项目是否启动成功;

    2.1.2.确认项目地址的正确性;

    2.1.3.作为项目主页的html页面应该放到工程的WebContent的根目录下;

    2.项目启动并且成功进入主页后,主页上一些通过controller层跳转的操作无法找到网页,导致404;

    2.2.1. 相关操作访问路径是否正确;

    2.2.2. Controller层是否被标注为@Controller组件

    2.2.3. 是否配置了对@Controller标签的支持:<mvc:annotation-driven />

    2.2.4. 是否正确配置了对Controller层的扫描:<context:component-scan base-package="controller">

    2.2.5. 检查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如下

    多说一句:

    如果你喜欢在类名上(也就是@Controller下)也添加一个@RequestMapping(),

    那么在类里面的子@RequetMapping注解中的路径是不能再有/的。

    <我记得我之前试过,如果说的不对,或者是有人没看懂,就当我没说>

    ③. 前端拦截器:

    注意拦截路径: 

    /表示拦截一切路径,不能是/* 

    (如果你要问为什么,抱歉,人家这么规定我也无能为力)


    3.3.2.Controller层是否被标注为@Controller组件

    顾名思义,略

    3.3.3.是否配置了对@Controller标签的支持:<mvc:annotation-driven />

    ①. 该配置我配置在了springmvc-config.xml文件中,在下面讲解合适的时候我会附上代码截图

    <为什么老是截图?因为我愿意...>

    ②. 什么是<mvc:annotation-driven/>

    相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter。

    简单来说就是: 提供了使用并且能够识别@Controller注解的前提.

    3.3.4.是否正确配置了对Controller层的扫描:<context:component-scan base-package=" ">

    ①. 既然上面配置了对@Controller的支持,现在就需要配置对@Controller的扫描

    值得注意的是(比如在我的demo里),

    base-package="controller",而不是bask-package="controller.*";

    ②. 现在,附上springmvc-config的代码截图:

    3.3.5.检查web.xml中的相关配置是否正确

    注意:我的配置文件在一个资源文件夹下,具体路径还请根据自己的结构目录来配置

    ①. 是否配置了spring的监听,以及正确加载spring相关配置文件

    <param-name />标签:contextConfigLocation是固定的;

    <param-value />标签:加载spring配置文件(注意路径问题)


    ②. 是否正确加载springmvc的配置文件

    先解释<servlet />标签中的内容

    <servlet>

    <servlet-name />:先不说,会在下面(紧挨<init-param />)解释

    <servlet-class />:springmvc的核心,可以理解为对spirngmvc的支持,固定非修改

    <init-param>:可以理解为对springmvc的初始化,即为springmvc指定需要加载的xml配置

    <param-name />:固定非修改

    <param-value />:加载springmvc配置文件(具体根据自己的结构目录配置)

    <init-param/>

    <servlet/>

    <servlet-name />:将加载到的springmvc.xml文件起一个别名

    <servlet-mapping>

    <servlet-name />:

    与上面的servlet-name标签保持一致,表示对上面的springmvc.xml做mapping配置

    <url-patter />: 配置前端拦截器路径。

    拦截器路径的配置方式包括: *.do 、*.action 、/ 

    意思是分别:拦截以do、action、任意后缀或者是无后缀的前端请求

    <servlet-mapping/>


    如果有书写错误的地方,或者是有问题的地方请及时评论或者是私信,只要我看到就一定会回复,

    以免误导个别萌新。

    虽然,我也是个萌新。


    你好,我叫吕小布。









  • 相关阅读:
    SpringBoot-配置Druid-yml方式
    CentOS7下配置Nginx并实现简单的负载均衡
    用私有构造器或者枚举类型强化Singleton
    virtualenv虚拟环境的使用
    Windows平台安装Python
    window平台基于influxdb + grafana + jmeter 搭建性能测试实时监控平台
    easy-mock本地部署成功,访问报错:EADDRNOTAVAIL 0.0.0.0:7300 解决方案
    npm install 报错: WARN checkPermissions Missing write access to 解决方案
    npm install 报错:ERR! code EINTEGRITY 解决方案
    最新版chrome浏览器如何离线安装crx插件?(转载)
  • 原文地址:https://www.cnblogs.com/jpfss/p/9584088.html
Copyright © 2011-2022 走看看