記錄初次接觸 Spring MVC + Maven 的完整搭建過程,包括項目結構、核心依賴、web.xml、Spring 配置、Controller 編寫,以及兩個經典啟動報錯的解決方案(缺少 Maven 依賴部署、JSTL 缺包)。
springMvc
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── cn.taofu.TestController
│ │ ├── resources
│ │ └── webapp
│ │ ├── WEB-INF
│ │ │ ├── web.xml
│ │ │ ├── spring-servlet.xml
│ │ │ └── jsps
│ │ │ └── index.jsp
│ │ └── index.html
│ └── test
└── target
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<!-- 查找坐標利器:https://mvnrepository.com/ -->
</dependencies>
<web-app version="2.5" ...>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern> <!-- 攔截所有請求 -->
</servlet-mapping>
</web-app>
<beans ...>
<context:annotation-config/>
<context:component-scan base-package="cn.taofu">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<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>
@Controller
@RequestMapping("/test")
public class TestController {
@RequestMapping("/mvc")
public String getMode() {
System.out.println("hello springmvc");
return "index"; // 對應 /WEB-INF/jsps/index.jsp
}
}
啟動 Tomcat,瀏覽器訪問 https://localhost:8080/springMvc/test/mvc 應跳轉到 index.jsp 並控制台打印日志。
java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
原因:Maven 依賴未部署到 WEB-INF/lib。
解決(Eclipse/MyEclipse):
Project Properties → Deployment Assembly → Add → Java Build Path Entries → Maven Dependencies → Finish,然後清理重新部署。
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
原因:缺少 JSTL API 與實現包。
解決:pom.xml 添加:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
或手動放入 jstl-1.2.jar、standard-1.1.2.jar 到 WEB-INF/lib。
spring-orm、mybatis-spring、數據源配置)。@EnableTransactionManagement、DataSourceTransactionManager)。@RestController、Jackson JSON 序列化)。MultipartResolver)。