首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring MVC入門極簡示例:從零構建基於註解的Hello World應用

     編輯:Java 相關知識

專案目標:最小依賴、最少配置、最快跑通

本示例基於Spring 3.x / 4.x,採用Java註解配置(無XML)、Maven構建、Tomcat/Jetty運行,演示Spring MVC核心流程:請求 → DispatcherServlet → Controller → Service → View → 響應。

1. Maven依賴 (pom.xml)

<dependencies>
    <!-- Spring MVC核心 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.21</version>
    </dependency>
    <!-- Servlet API (provided by container) -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <!-- JSP視圖渲染 -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.3</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <port>8080</port>
                <path>/</path>
            </configuration>
        </plugin>
    </plugins>
</build>

2. Web啟動配置:無web.xml,純Java配置

// 替代web.xml:Servlet 3.0+ 容器自動掃描
public class WebAppInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext container) {
        // 1. 創建Spring上下文
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(AppConfig.class); // 掃描配置類
        
        // 2. 註冊DispatcherServlet
        ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(ctx));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/"); // 攔截所有請求
    }
}

3. Spring MVC核心配置類

@Configuration
@EnableWebMvc // 啟用Spring MVC預設配置(視圖解析器、靜態資源等)
@ComponentScan(basePackages = "com.example") // 掃描Controller、Service
public class AppConfig implements WebMvcConfigurer {
    
    // 視圖解析器:JSP路徑前綴/後綴
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
    
    // 靜態資源處理(CSS/JS/圖片)
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addHandler("/resources/**").addResourceLocations("/resources/");
    }
}

4. 業務層:Service接口與實現

public interface GreetingService {
    String greet(String name);
}

@Service
public class GreetingServiceImpl implements GreetingService {
    @Override
    public String greet(String name) {
        return "Hello, " + name + "! Welcome to Spring MVC.";
    }
}

5. 控制器:@Controller + @RequestMapping

6. 視圖頁面:JSP + JSTL

<!-- /WEB-INF/views/helloForm.jsp -->
<%@ taglib prefix="form" uri="https://www.springframework.org/tags/form" %>
<html>
<body>
<h2>Spring MVC 入門示例</h2>
<form:form modelAttribute="user" method="POST">
    <form:label path="name">您的名字:</form:label>
    <form:input path="name" />
    <input type="submit" value="提交" />
</form:form>
</body>
</html>
<!-- /WEB-INF/views/helloResult.jsp -->
<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<h2>結果頁面</h2>
<p><c:out value="${message}" /></p>
<a href="/hello">返回</a>
</body>
</html>

7. 運行與驗證

# Maven命令啟動內嵌Tomcat
mvn tomcat7:run

# 瀏覽器訪問
https://localhost:8080/hello
→ 顯示輸入表單
→ 輸入 "ZhangSan" 提交
→ 顯示 "Hello, ZhangSan! Welcome to Spring MVC."

核心流程圖解

  1. 請求 GET /hello → DispatcherServlet 接收
  2. HandlerMapping 匹配 HelloController.showForm()
  3. 執行方法,返回視圖名 "helloForm"
  4. ViewResolver 解析為 /WEB-INF/views/helloForm.jsp
  5. JSP渲染輸出 HTML 表單
  6. 用戶提交 POST /hello → 匹配 submitForm()
  7. @ModelAttribute 自動綁定表單數據到 UserForm
  8. 調用 GreetingService.greet() 獲取業務結果
  9. 攜帶 message 轉發到 helloResult.jsp 渲染最終頁面

避坑指南:新手常見 5 大錯誤

錯誤現象根因修正
404 Not FoundDispatcherServlet映射路徑錯誤(如/app/*而非/)確保addMapping("/")或*.do覆蓋目標路徑
視圖解析失敗JSP路徑不在/WEB-INF/views/或後綴不匹配檢查InternalResourceViewResolver前綴後綴
表單數據綁定為null表單字段名與UserForm屬性名不一致path="name" 對應 getName()/setName()
@Autowired注入失敗Service未掃描(包路徑錯誤)或缺少@Service檢查@ComponentScan基礎包、類註解
JSTL標簽不生效缺少jstl依賴或JSP未聲明taglib添加依賴、頁面頂部<%@ taglib prefix="c" ...%>

進階擴展方向

  • RESTful API:@RestController 直接返回 JSON,配合 @RequestBody 接收 JSON。
  • 參數校驗:@Valid @ModelAttribute + JSR-303 註解(@NotBlank 等)。
  • 異常統一處理:@ControllerAdvice + @ExceptionHandler。
  • 國際化:MessageSource + LocaleResolver。
  • 整合Spring Boot:spring-boot-starter-web 零配置啟動,生產級監控、打包部署開箱即用。

總結

本示例通過零XML、純註解、Maven標準結構,在 50 行核心代碼內跑通 Spring MVC 完整閉環。掌握 DispatcherServlet、@Controller、@RequestMapping、ViewResolver、@Autowired 五大核心組件交互,即可舉一反三構建企業級 Web 應用。建議以此為骨架,漸進式引入校驗、異常處理、安全、緩存等橫切能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved