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

SSM 框架整合:web.xml 核心配置詳解

     編輯:Java 綜合教學

配置概覽

在 SSM(Spring + Spring MVC + MyBatis)架構中,web.xml 是應用程式的部署描述檔,負責啟動 Spring 容器、配置 DispatcherServlet、編碼過濾器等核心組件。本文提供一份完整、可直接使用的配置範本。

完整 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>SSM Demo</display-name>

    <!-- 1. Spring 容器啟動:載入業務層與資料層配置 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring.xml,classpath:spring-mybatis.xml</param-value>
    </context-param>

    <!-- 2. 編碼過濾器(必須在最前面) -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- 3. Spring 容器監聽器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- 防止記憶體洩漏 -->
    <listener>
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
    </listener>

    <!-- 4. Spring MVC 前端控制器 -->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- 5. Druid 監控 Servlet(可選) -->
    <servlet>
        <servlet-name>DruidStatView</servlet-name>
        <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DruidStatView</servlet-name>
        <url-pattern>/druid/*</url-pattern>
    </servlet-mapping>

    <!-- 6. Session 超時設定(分鐘) -->
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

關鍵配置解析

1. 雙容器架構

  • 父容器(ContextLoaderListener):載入 spring.xml、spring-mybatis.xml,管理 Service、DAO、DataSource、TransactionManager 等業務組件。
  • 子容器(DispatcherServlet):載入 spring-mvc.xml,管理 Controller、ViewResolver、Interceptor 等 Web 組件。
  • 子容器可存取父容器的 Bean,父容器不可存取子容器 Bean。

2. DispatcherServlet 映射策略

  • <url-pattern>/</url-pattern>:預設映射,攔截所有請求(含靜態資源),需配合 <mvc:default-servlet-handler/> 放行靜態資源。
  • 替代方案:<url-pattern>*.do</url-pattern> 或 /api/*,避免靜態資源攔截問題。

3. 編碼過濾器順序

必須置於所有 Filter 之前,確保請求/回應正確解碼。forceEncoding=true 強制覆寫瀏覽器編碼。

4. 記憶體洩漏防護

IntrospectorCleanupListener 在應用關閉時清理 JavaBeans Introspector 快取,防止 PermGen/Metaspace 洩漏。

對應的 Spring 配置檔結構

src/main/resources/
├── spring.xml           # 業務層掃描、屬性檔
├── spring-mvc.xml       # Web 層:Controller 掃描、視圖解析、JSON 轉換
├── spring-mybatis.xml   # 資料層:DataSource、SqlSessionFactory、Mapper 掃描、事務
├── config.properties    # JDBC 連線參數
└── log4j.properties     # 日誌配置

常見問題排查

現象可能原因解決方案
404 錯誤DispatcherServlet 映射錯誤檢查 url-pattern 與 Controller @RequestMapping 對應
中文亂碼編碼過濾器未生效確認 Filter 順序、forceEncoding=true
事務不生效事務管理器未掃描到確認 spring-mybatis.xml 載入、@Transactional 在 Service 實作類
Mapper 注入失敗掃描包路徑錯誤核對 MapperScannerConfigurer.basePackage

最佳實踐建議

  1. 使用 Servlet 3.0+ 註解配置(WebApplicationInitializer)替代 web.xml,實現零 XML 部署。
  2. 生產環境關閉 Druid 監控頁面或加入 IP 白名單保護。
  3. Session 超時時間依業務調整,建議 15-30 分鐘。
  4. 靜態資源走 Nginx/CDN,減輕應用伺服器負載。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved