今天看了慕课上面的Spring MVC起步视频,总结出来搭建第一个Spring MVC项目的步骤以供参考。
1. 配置本地Maven。
从官网下载apache-maven-3.5.2-bin.zip,解压至任意目录如E:\maven\。
将conf目录中的setting.xml拷贝至任意目录如E:\maven\.m2\。
修改拷贝好的setting.xml,添加本地仓库路径和Maven镜像站点配置:
<localRepository>E:\Program Files\maven\.m2\repository</localRepository>
<mirror>
<id>mirror-uk</id>
<name>UK Central</name>
<url>http://uk.maven.org/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>Aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Aliyun Maven Repository</name>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
2. 配置Intellij IDEA的Maven环境。
打开Settings->Build, Execution, Deployment->Build Tools->Maven,设置Maven homedirectory为E:\Program Files\maven\,User settings file后勾选Override后设置为E:\Program Files\maven\.m2\setting.xml。
这样在以后使用IDEA下载Maven依赖时都会下载到配置文件setting.xml中localRepository标签指定的位置。
3. 创建第一个Spring MVC项目。
打开IDEA创建新项目,选择Maven并且勾选Create from archetype,选择下方列出的org.apache.maven.archetypes:maven-archetype-webapp,点击下一步,指定GroupId/ArtifactId点下一步,检查Maven配置点下一步,确认Project配置完成创建。
4. 配置pom.xml加入相关依赖。
<project xmlns="http://maven.apache.org/POM/4.0.0" s:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MavenTest</groupId>
<artifactId>MavenExample</artifactId>
<packaging>war</packaging> <!-- Default: war-->
<version>1.0-SNAPSHOT</version>
<name>MavenExample Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<commons-lang.version>2.6</commons-lang.version>
<slf4j.version>1.7.6</slf4j.version>
<spring.version>4.1.3.RELEASE</spring.version>
</properties>
<dependencyManagement> <!--依赖管理,解决依赖冲突问题-->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>${spring.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!--dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>${commons-lang.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<finalName>MavenExample</finalName>
</build>
</project>
5. 添加相关配置文件。
WEB-INF/web.xml:指定配置文件路径、ContextLoadListener、Servlet、Servlet-mapping。
<?xml version="1.0" encoding="UTF-8" ?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Archetype Created Web Application</display-name>
<!--Spring应用上下文,理解层次化的ApplicationContext-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/conf/spring/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--DispatcherServlet, Spring MVC核心-->
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- DispatcherServlet对应的上下文配置,默认为WEB-INF/${servlet-name}-servlet.xml-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/conf/spring/mvc-dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
按照web.xml中mvc-dispatcher项指定的配置文件路径,配置mvc-dispatcher-servlet.xml。
WEB-INF/conf/spring/mvc-dispatcher-servlet.xml:配置mvc-dispatcher。配置ViewResolver中指定了前缀/WEB-INF/jsps/和后缀.jsp,表明servlet将从/WEB-INF/jsps/路径下寻找后缀名为.jsp的匹配页面文件。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--本配置文件供mvc-dispatcher:DispatcherServlet使用,提供其相关的Spring MVC配置-->
<!--启用Spring基于annotation的DI,使用户可以在Spring MVC中使用Spring的强大功能。-->
<!--激活@Required @Autowired,JSR 250's @PostConstruct @PreDestroy @Resource-->
<!--context:annotation-config/-->
<!--DispatcherServlet上下文,只管理@Controller类型的bean,忽略其他类型的bean如@Service-->
<!--已经包含了context:annotation-config的全部功能-->
<context:component-scan base-package="com.adam.spring">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--Handler Mapping默认启动-->
<!--DefaultAnnotationHandlerMapping 基于annotation的HandlerMapping-->
<!--扩充了注解驱动,可以将请求参数绑定到Controller参数-->
<mvc:annotation-driven/>
<!--静态资源处理,css,js,imgs-->
<mvc:resources mapping="/resources/**" location="/resources/"/>
<!--View Resolver.可以用多个ViewResolver。使用order属性排序。-->
<!--InternalResourceViewResolver放在最后。-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsps/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
WEB-INF/conf/spring/applicationContext.xml:Spring配置。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
<!--context:component-scan base-package="com.adam.spring.controller">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan-->
</beans>
6. 添加前端JSP页面。
在WEB-INF\jsps\路径下新建home.jsp页面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Spring MVC Test</title>
</head>
<body>
Hello Spring MVC!
</body>
</html>
7. 添加后端Controller。
在src/main/java下com.adam.spring.controller包下新建HelloMvcController。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/hello") //HelloMvcController响应/hello请求
public class HelloMvcController {
@RequestMapping("/mvc") //helloMvc()方法响应/hello/mvc请求
public String helloMvc() {
return "home"; //跳转到WEB-INF/jsps/home.jsp
}
}
8. 配置Tomcat服务器。
配置Tomcat,部署Web应用。
9. 启动服务器。
启动Tomcat服务器,地址栏输入localhost:8080/hello/mvc回车,页面会显示出home.jsp的内容。
问题记录:
1. java.lang.NoClassDefFoundError:javax/servlet/jsp/jstl/core/Config
类似错误:java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
解决:导入JSTL包。
WEB-INF下新建lib文件夹,放入jstl-1.2.jar,然后在ProjectStructure-Library中设置lib。
2. Cannot resolve reference to bean'cacheManager' while setting bean property 'cacheManager'; nested exception isorg.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named'cacheManager' is defined
解决:dispatcher-servlet.xml文件中将
xmlns:mvc="http://www.springframework.org/schema/cache"
改为
xmlns:mvc="http://www.springframework.org/schema/mvc"
同时将xsi:schemaLocation标签中进行相应调整。
3. java 非法字符’\ufeff’
编码格式问题。
解决:将文件所有内容复制到Notepad中,然后删除重新创建内容一样的文件。
附:如果要把代码传到github等平台,需要配置git远程仓库:
git remote add origin *.git(添加远程仓库)
git remote -v(查看远程仓库)