SpringMVC运行项目时出现404错误(狂神)

前言

  • 我真的疯狂吐血兄弟们,一个简单的404搞了我三个小时
  • 此视频基于狂神的springmvc中p4的404问题
  • 可能此文章也不能帮你解决问题,但是我真的找了很多文章,这里会一一致谢,可以看一下感觉都很优质的博客,或许能帮你解决问题
  • 刚开始建springmvc-02-hellomvc的时候,我名字打错了,导致maven项目或文件里有些文件没有删除干净,也许对后续的bug有影响

问题描述:

  1. 在检查代码都没有错误的情况下,运行springmvc时,报404页面错误
    SpringMVC运行项目时出现404错误(狂神)_第1张图片
  2. 检查文件目录,发现子模块下的web文件夹出现异常,web包上的蓝色原点不见了,这是由于系统没有识别到web文件导致
    SpringMVC运行项目时出现404错误(狂神)_第2张图片
  3. 而检查out文件的时候,发现springmvc-01-servlet这个项目可以输出index,而springmvc-02-hellomvc不会输出index
    SpringMVC运行项目时出现404错误(狂神)_第3张图片
  4. 还有基于我刚开始创建项目名字打错,maven不会提示也需要注意,这里把maven的项目名改回来后,父类的pom.xml里导入的子pom.xml只会报错但不会提示,需要你点到父类的pom.xml里自己去删除
    SpringMVC运行项目时出现404错误(狂神)_第4张图片

解决方案:

第一种

  • 在Settings里打开Project Structure,然后找到Artifacts,右侧有红色提醒,这是系统没有识别到web文件,将其视为普通包文件
  • 找到Project Structure下的Moudles,并找到文件夹所在模块springmvc-02-hellomvc,打开会发现少了web文件,这时候就要手动导入web文件
  • 点击加号,会出现一个列表,先找到web文件包,点击"apply",最后点击"ok"即可

第二种

  • 在Settings里找到Project Structure,然后找到Artifacts,点击Create Directory,在WEB-INF文件夹下创建lib包

  • 点击“+”,将所有的依赖添加进lib文件夹里,点击“apply”,再点击“ok”即可

第三种

  • 发现检查out文件的时候,发现springmvc-01-servlet这个项目可以输出index,而springmvc-02-hellomvc不会输出index
  • 也是此问题让我发现springmvc-02-hellomvc这个项目运行out不会输出index.jsp,那就是说就是这个问题导致我们无法访问初始界面
  • 在我百度过删除out文件夹,重新部署过后也是没办法
  • 最终springmvc-02-hellomvc这个项目删掉,重新创建,复制一遍即可

第四种(一些idea的乱七八糟问题)

  • 在xml文件中最好不要用注释(可能会导致报错)
  • 解决不了重启idea试试
  • 解决不了将项目删除重新写一遍
  • Tomcat最好使用9及以下,有些不兼容

最后附上代码图

  • springmvc-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">


<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>




<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">

    
    <property name="prefix" value="/WEB-INF/jsp/"/>
    
    <property name="suffix" value=".jsp"/>

bean>



<bean id="/hello" class="com.luffy.controller.HelloController"/>



beans>
  • HelloController.java
package com.luffy.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//注意:这里我们先导入Controller接口
public class HelloController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        // ModelAndView 模型和视图
        ModelAndView mv = new ModelAndView();
        //封装对象,放在ModelAndView中
        mv.addObject("msg","HelloSpringMVC");
        mv.setViewName("hello");
        return mv;

    }
}
  • web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">




<servlet>

    <servlet-name>springmvcservlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>

    
    <init-param>
        <param-name>contextConfigLocationparam-name>
        <param-value>classpath:springmvc-servlet.xmlparam-value>
    init-param>

      
        <load-on-startup>1load-on-startup>

servlet>




<servlet-mapping>
    <servlet-name>springmvcservlet-name>
    <url-pattern>/url-pattern>
servlet-mapping>



web-app>
  • hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



${msg}



最后说几句!

  • 检查好子项目的springmvc-02-hellomvc.iml文件,对应里面的内容没写错

  • maven项目手动清除clear

  • 多检查out输出文件里的信息,能不能跟源文件对应

  • Run/Debug Configurations里的Deployment下的Application context留的一个/,项目运行的时候对应的应该是web目录

  • WEB-INF下的文件不能直接访问,只能通过请求或转发才能访问

  • 这个bug真的头非常非常非常痛!

  • 我还会一直更新这个404博客!

你可能感兴趣的:(spring,学习)