前言
- 我真的疯狂吐血兄弟们,一个简单的404搞了我三个小时
- 此视频基于狂神的springmvc中p4的404问题
- 可能此文章也不能帮你解决问题,但是我真的找了很多文章,这里会一一致谢,可以看一下感觉都很优质的博客,或许能帮你解决问题
- 刚开始建springmvc-02-hellomvc的时候,我名字打错了,导致maven项目或文件里有些文件没有删除干净,也许对后续的bug有影响
问题描述:
- 在检查代码都没有错误的情况下,运行springmvc时,报404页面错误
- 检查文件目录,发现子模块下的web文件夹出现异常,web包上的蓝色原点不见了,这是由于系统没有识别到web文件导致
- 而检查out文件的时候,发现springmvc-01-servlet这个项目可以输出index,而springmvc-02-hellomvc不会输出index
- 还有基于我刚开始创建项目名字打错,maven不会提示也需要注意,这里把maven的项目名改回来后,父类的pom.xml里导入的子pom.xml只会报错但不会提示,需要你点到父类的pom.xml里自己去删除
解决方案:
第一种
- 在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
<?xml version="1.0" encoding="UTF-8"?>
<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"/>
<!-- 视图解析器:DispatcherServlet给他的ModelAndView -->
<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
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!--1、注册DispatcherServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--关联一个springmvc的配置文件:【servlet-name】 - servlet.xml-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--启动级别-1-->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- / 匹配所有的请求:(不包括.jsp) -->
<!-- /* 匹配所有的请求:(包括.jsp) -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
- hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
最后说几句!
-
检查好子项目的springmvc-02-hellomvc.iml文件,对应里面的内容没写错
-
maven项目手动清除clear
-
多检查out输出文件里的信息,能不能跟源文件对应
-
Run/Debug Configurations里的Deployment下的Application context留的一个/,项目运行的时候对应的应该是web目录
-
WEB-INF下的文件不能直接访问,只能通过请求或转发才能访问
-
这个bug真的头非常非常非常痛!
-
我还会一直更新这个404博客!