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项目再编译项目就正常了
Pingback: SpringMVC的简单示例(HelloWorld注解版) | 年年有"余"