Spring MVC + Webapp 项目显示 404 错误

问题原因

可能是 Tomcat 版本太高导致的,把 Tomcat 10 换成 Tomcat 9 就可以解决这个问题。

下面是我正在做的一个 Spring MVC 入门案例,因为 Tomcat 10,DispatcherServlet 不能拦截请求,访问一个路径时页面直接显示 404。

关键代码

file:[web.xml]
<web-app>
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>
file:[springmvc-config.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 name="/fc" class="controller.FirstController"/>

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

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

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

</beans>
file:[FirstController.java]
public class FirstController implements Controller {

  @Override
  public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
    ModelAndView mav = new ModelAndView();
    mav.addObject("msg", "这是我的第一个 MVC 程序");
    mav.setViewName("/WEB-INF/jsp/first.jsp");
    return mav;
  }

}

问题解决

更换 Tomcat 10 为 Tomcat 9。记得也把 Classes 修改了,用 Tomcat 9 的 lib:

更换 Libraries

因 Tomca 9 的 servlet 依赖是 javax 开头的,所以我们还需要更换包路径:

更换 Tomcat 9 的 servlet 包路径

更换依赖包的包路径,以下适用于 Tomcat 9:

file:[pom.xml]
<!-- servlet -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>javax.servlet.jsp-api</artifactId>
  <version>2.3.3</version>
  <scope>provided</scope>
</dependency>

问题总结

这类开发软件最好不要要用最新的,但也不需要用最老的,可以低于最一个版本,新版本改了很多东西,就容易发生各种问题。

posted @   Himmelbleu  阅读(63)  评论(0编辑  收藏  举报
首页
随笔
博客园
我的
标签
管理
Spring MVC + Webapp 项目显示 404 错误
发表于 2022-11-15 16:19
|
已有 63 人阅读
|
留下 0 条评论
|
全文字数 ≈ 154字

问题原因

可能是 Tomcat 版本太高导致的,把 Tomcat 10 换成 Tomcat 9 就可以解决这个问题。

下面是我正在做的一个 Spring MVC 入门案例,因为 Tomcat 10,DispatcherServlet 不能拦截请求,访问一个路径时页面直接显示 404。

关键代码

web.xml
XML

<web-app>
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>
springmvc-config.xml
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 name="/fc" class="controller.FirstController"/>

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

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

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

</beans>
FirstController.java
JAVA

public class FirstController implements Controller {

  @Override
  public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
    ModelAndView mav = new ModelAndView();
    mav.addObject("msg", "这是我的第一个 MVC 程序");
    mav.setViewName("/WEB-INF/jsp/first.jsp");
    return mav;
  }

}

问题解决

更换 Tomcat 10 为 Tomcat 9。记得也把 Classes 修改了,用 Tomcat 9 的 lib:

更换 Libraries

因 Tomca 9 的 servlet 依赖是 javax 开头的,所以我们还需要更换包路径:

更换 Tomcat 9 的 servlet 包路径

更换依赖包的包路径,以下适用于 Tomcat 9:

pom.xml
XML

<!-- servlet -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>javax.servlet.jsp-api</artifactId>
  <version>2.3.3</version>
  <scope>provided</scope>
</dependency>

问题总结

这类开发软件最好不要要用最新的,但也不需要用最老的,可以低于最一个版本,新版本改了很多东西,就容易发生各种问题。

作者:Himmelbleu
出处: https://www.cnblogs.com/Himmelbleu/#/p/16892826
版权:本作品采用「 署名-非商业性使用-相同方式共享 4.0 国际 」许可协议进行许可。
文章目录
问题原因
关键代码
问题解决
问题总结
点击右上角即可分享
微信分享提示