SpringMVC的简单示例(HelloWorld配置文件版)

1、工程创建

  • 创建一个普通Maven工程
  • 将项目添加web支持,右击项目–>Add Framework Support

2、相关依赖

<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.4</version>
    </dependency>
</dependencies>

3、创建控制器

HomeController.java

package com.yusian.controller;

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

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

public class HomeController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView mv = new ModelAndView("index.jsp");
        mv.addObject("message", "Hello SpringMVC!!!");
        return mv;
    }
}

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
    ${message}
  </body>
</html>

4、相关配置文件

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 name="/home" class="com.yusian.controller.HomeController"/>
</beans>
  • 在resources根目录下创建一个springmvc-servlet.xml文件

  • 这是一个标准的Spring的配置文件

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">
    <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-servlet.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
  • web.xml是web项目的配置文件
  • 在该文件中添加一组servlet,该servlet对应SpringMVC的配置器Servlet:DispatcherServlet
  • 这是SpringMVC的核心,所有控制器都是响应都是由这个Servlet处理后统一转发;

5、测试

打开浏览器输入http://localhost:8080/home 就可以看到Hello SpringMVC!!!

6、相关问题排查

6.1、404错误

打开项目设置:Project Settings —> Artifacts —> Output Layout —> Available Elements,如果下面还有包,右击put into Output Root即可:

6.2、500错误

上面404的问题解决了,可能又会出现500错误,错误原因是没有找到相关的控制器类,其实其本质原因是没有生成target目录,相关类没有编译成功;这个问题有几个明显的特征:

  • 创建一个普通的maven项目,然后转换为web项目就会出现,但并不是一定会出现;
  • 如果一开始创建maven项目的时候,选择的就是webapp模板不会有这个问题;

问题的根源在项目的iml文件中,找到项目根目录下的xxx.iml文件

<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
  <component name="FacetManager">
    <facet type="web" name="Web">
      <configuration>
        <descriptors>
          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/web/WEB-INF/web.xml" />
        </descriptors>
        <webroots>
          <root url="file://$MODULE_DIR$/web" relative="/" />
        </webroots>
        <sourceRoots />
      </configuration>
    </facet>
  </component>
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$" />
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
  </component>
</module>

注意文件中的第二组component

<component name="NewModuleRootManager" inherit-compiler-output="true">
  <exclude-output />
  <content url="file://$MODULE_DIR$" />
  <orderEntry type="inheritedJdk" />
  <orderEntry type="sourceFolder" forTests="false" />
</component>

这里应该是编译的时候排除了项目根目录下的java类文件,从而使得根项目无法正常编译,这和maven没有直接关系,在maven中compile是会正常生成target目录和相关class文件的,但web项目不行。

解决方案:如果iml中有类似的配置,删除掉然后更新maven项目再编译项目就正常了

One thought on “SpringMVC的简单示例(HelloWorld配置文件版)

  1. Pingback: SpringMVC的简单示例(HelloWorld注解版) | 年年有"余"

Leave a Reply