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

Spring MVC 入門實戰:基於 IntelliJ IDEA 構建第一個 HelloWorld 程序

     編輯:Java 綜合教學

前言:為什麼選擇 Spring MVC?

在 Java Web 開發演進史中,從 Servlet → JSP → Servlet+JSP → MVC 框架,Spring MVC 憑藉 請求處理關注點完全分離、視圖解耦靈活、無縫整合 Spring 生態 三大優勢成為主流選擇。本文基於 IntelliJ IDEA (非 Eclipse/MyEclipse),零 Maven 依賴,手把手構建首個 Spring MVC 程序。

一、環境準備與項目創建

1.1 開發環境

  • JDK 1.8+
  • IntelliJ IDEA 2017+ (Community 版即可)
  • Tomcat 8/9 (配置為 IDEA Run Configuration)
  • Spring 4.x JAR 包 (官網下載 spring-framework-4.x.x.RELEASE-dist.zip)

1.2 創建 Web 模塊項目

  1. File → New → Project → Java Enterprise → Web Application
  2. 取消勾選「Create web.xml」(IDEA 會自動生成 Servlet 3.0+ 註解版,但本教程手寫 web.xml 以便理解)
  3. 項目名:mvcdemo,位置自選
  4. Finish 完成創建

1.3 導入 Spring JAR 包 (手動模式)

因不使用 Maven,需手動配置庫依賴:

  1. 右鍵項目 → Open Module Settings (F4)
  2. 選中 Modules → Dependencies 標籤
  3. 點擊 + → JARs or directories
  4. 選中 Spring 解壓目錄下 libs/ 所有 JAR (spring-webmvc, spring-core, spring-context, spring-beans, spring-expression, spring-aop, spring-web, commons-logging 等)
  5. Scope 選 Compile,Apply → OK

二、核心配置文件編寫

2.1 web.xml - 註冊前端控制器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee 
                             https://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <display-name>Spring MVC Demo</display-name>

    <!-- 前端控制器:攔截所有請求 -->
    <servlet>
        <servlet-name>mvcdemo</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/mvcdemo-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>mvcdemo</servlet-name>
        <url-pattern>/</url-pattern>  <!-- 攔截所有請求,含靜態資源需額外配置 -->
    </servlet-mapping>
</web-app>

2.2 mvcdemo-servlet.xml - Spring MVC 核心配置

<?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.xsd">

    <!-- 1. 處理器映射:按 Bean 名稱匹配 URL -->
    <bean class="org.springframework.web.servlet.mvc.support.ControllerBeanNameHandlerMapping"/>

    <!-- 2. 控制器 Bean 定義:URL 映射到具體處理類 -->
    <bean name="/hello" class="com.luoxn28.hello.HelloController"/>

    <!-- 3. 視圖解析器:邏輯視圖名 → 物理 JSP 路徑 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

配置關鍵點解析

組件角色本例配置
DispatcherServlet前端控制器,統一入口攔截 / 所有請求
ControllerBeanNameHandlerMappingURL 與 Controller 映射策略Bean name 即 URL 路徑
HelloController具體請求處理器實現 Controller 接口
InternalResourceViewResolver視圖解析器/WEB-INF/ + 視圖名 + .jsp

三、業務代碼實現

3.1 控制器實現

package com.luoxn28.hello;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloController extends AbstractController {
    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request, 
                                                 HttpServletResponse response) {
        // 1. 獲取請求參數
        String hello = request.getParameter("hello");
        System.out.println("HelloController 接收參數: " + hello);

        // 2. 構建 ModelAndView:視圖名 + 模型數據
        ModelAndView mav = new ModelAndView("hello");  // 對應 /WEB-INF/hello.jsp
        mav.addObject("hello", hello);  // 模型數據鍵值對

        return mav;
    }
}

3.2 視圖頁面

/WEB-INF/hello.jsp (受保護路徑,僅通過 ViewResolver 訪問):

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Spring MVC Demo</title></head>
<body>
    Spring MVC<br/>
    接收到的參數: ${hello}  <!-- EL 表達式顯示模型數據 -->
</body>
</html>

/index.jsp (歡迎頁,發起請求):

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>首頁</title></head>
<body>
    <form action="hello" method="post">
        輸入內容: <input type="text" name="hello"/>
        <input type="submit" value="提交"/>
    </form>
</body>
</html>

四、IDEA 運行配置與啟動

4.1 配置 Tomcat

  1. Run → Edit Configurations → + → Tomcat Server → Local
  2. Name: Tomcat_mvcdemo
  3. Deployment 標籤 → + → Artifact → 選擇 mvcdemo:war exploded
  4. Application context: / (根路徑訪問)
  5. Server 標籤確認 HTTP port: 8080

4.2 關鍵:配置 Spring Facet (識別配置文件)

  1. Project Structure (Ctrl+Alt+Shift+S) → Modules → Spring 標籤
  2. 勾選 Spring Application Context
  3. 點擊 + → 選擇 /WEB-INF/mvcdemo-servlet.xml
  4. OK 保存

4.3 修復 Artifact 警告

若 Artifacts 標籤有紅色提示,點擊 Fix 自動修復 WAR 包結構。

五、運行驗證與效果

  1. 點擊工具欄綠色三角形 ▶ 啟動 Tomcat
  2. 瀏覽器訪問 https://localhost:8080/ 顯示輸入表單
  3. 輸入 luoxn28 點擊提交
  4. 跳轉顯示:Spring MVC
    接收到的參數: luoxn28

六、架構流程總結

請求流向:
1. 瀏覽器 POST /hello?hello=luoxn28
2. DispatcherServlet 攔截
3. ControllerBeanNameHandlerMapping 匹配 Bean name "/hello" → HelloController
4. HelloController.handleRequestInternal() 處理 → 返回 ModelAndView("hello", model)
5. InternalResourceViewResolver 解析視圖 → /WEB-INF/hello.jsp
6. JSP 渲染模型數據 ${hello} → HTML 響應瀏覽器

七、避坑指南與進階建議

⚠️ 常見問題

  • 404 錯誤:檢查 url-pattern、Controller Bean name、視圖解析器前後綴
  • 中文亂碼:web.xml 配置 CharacterEncodingFilter、JSP pageEncoding、Tomcat URIEncoding
  • 靜態資源無法訪問:/ url-pattern 攔截所有,需配置 <mvc:default-servlet-handler/> 或靜態資源映射
  • JAR 衝突:手動導包易重複/缺失,強烈建議遷移 Maven/Gradle 管理依賴

現代化改造方向

  • 註解驅動:@Controller + @RequestMapping 替代 XML 配置
  • REST 風格:@RestController + @PathVariable + JSON 返回
  • 配置類:@Configuration + @EnableWebMvc 替代 XML
  • 構建工具:Maven/Gradle 管理依賴、多模塊、Profile 環境隔離

八、總結

本文通過零 Maven、手動導包、XML 配置的「原始」方式,完整還原了 Spring MVC 核心運行機制:DispatcherServlet 統一入口 → HandlerMapping 尋找處理器 → Controller 處理業務 → ViewResolver 解析視圖 → 渲染響應。理解這套流程是掌握 Spring MVC 乃至 Spring Boot 自動配置原理的基石。建議以此為起點,快速遷移至註解開發與 Maven 管理,擁抱現代化開發效率。

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