本文以最簡單的方式帶你快速跑通 Spring MVC 流程,掌握核心配置與請求流轉。
springMVC1。9090。將 Spring MVC 及其依賴(spring-webmvc、spring-core、spring-context、spring-beans、spring-expression、commons-logging 等)放入 WEB-INF/lib。

<web-app ... version="2.5">
<display-name>springMVC1</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 核心前端控制器 -->
<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*:config/spring-servlet.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>
路徑:src/com/tgb/web/controller/HelloWorldController.java
package com.tgb.web.controller;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class HelloWorldController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("------這是控制方法-----");
Map<String, Object> map = new HashMap<>();
map.put("hello1", "hello1");
map.put("hello2", "hello2");
map.put("hello3", "hello3");
String hello = "你好啊";
String url = "/welcome"; // 邏輯視圖名
return new ModelAndView(url, "map", map); // (視圖名, 模型鍵, 模型值)
}
}
說明: 實作 Controller 介面為早期風格,後續會講解註解式開發(@Controller + @RequestMapping)。ModelAndView 封裝視圖名與模型數據。
路徑:WEB-INF/jsp/welcome.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>首頁</title></head>
<body>
這是我的第一個 JSP 頁面!!!!!!!++++++++++
<br/>
<h3>傳遞的數據</h3>
${hello} <!-- 此處取不到,Controller 未放入 hello -->
${map.hello2}
<div>
<c:forEach items="${map}" var="m">
${m.key} ====== ${m.value} <br/>
</c:forEach>
</div>
</body>
</html>
路徑:src/config/spring-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 1. 映射 URL 到 Controller Bean -->
<bean name="/test1/helloworld" class="com.tgb.web.controller.HelloWorldController" />
<!-- 2. 視圖解析器:前綴 + 後綴 = 完整路徑 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
https://localhost:9090/springMVC1/test1/helloworld
/test1/helloworld → DispatcherServlet 攔截。SimpleUrlHandlerMapping (隱式) 匹配 Bean Name /test1/helloworld 找到 Controller。ModelAndView("/welcome", map)。InternalResourceViewResolver 拼接路徑 /WEB-INF/jsp/welcome.jsp。