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

SpringMVC 整合 MyBatis 實戰 (九):DispatcherServlet 配置、視圖解析器與 Controller 編寫規範

     編輯:Java 綜合教學

SpringMVC 整合 MyBatis 實戰 (九):DispatcherServlet 配置、視圖解析器與 Controller 編寫規範

本文承接 Service 層整合,完成 Web 層配置:`web.xml` 雙容器啟動、`spring-mvc.xml` 核心組件裝配、Controller 標準化編寫、JSP 視圖渲染,構建請求從前端到數據庫的完整鏈路。

一、web.xml:雙容器架構落地



    firstssm

    
    
        contextConfigLocation
        classpath:spring/applicationContext-*.xml
    
    
        org.springframework.web.context.ContextLoaderListener
    

    
    
        springmvc
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:spring/springmvc.xml
        
        1
    
    
        springmvc
        *.action
    

    
        index.jsp
    

關鍵設計:

  • 根容器掃描 `applicationContext-*.xml` (DAO、Service、事務)。
  • 子容器僅掃描 `@Controller`,**隔離掃描包路徑**,防止事務失效 (見上篇)。
  • `url-pattern` 採用 `*.action`,靜態資源 (JS/CSS/圖片) 不經 DispatcherServlet,性能更優。RESTful 風格可改 `/` 但需配置 `DefaultServletHttpRequestHandler` 放行靜態資源。

二、spring-mvc.xml:核心組件最小化配置



    
    

    
    

    
    
        
        
    

mvc:annotation-driven 內建功能**:`RequestMappingHandlerMapping`、`RequestMappingHandlerAdapter`、數據綁定 (`DataBinder`)、類型轉換 (`ConversionService`)、格式化 (`Formatter`)、JSON/XML `HttpMessageConverter` (需 Jackson/JAXB jar)、JSR-303 驗證 (`Validator`)。**實戰必開**。

三、Controller 標準化編寫範例


@Controller
@RequestMapping("/items")
public class ItemsController {
    @Autowired private ItemsService itemsService;

    @RequestMapping("/queryItems")
    public ModelAndView queryItems() throws Exception {
        List list = itemsService.findItemsList(null);
        ModelAndView mv = new ModelAndView();
        mv.addObject("itemsList", list);
        mv.setViewName("items/itemsList"); // 解析為 /WEB-INF/jsp/items/itemsList.jsp
        return mv;
    }
}

規範要點**:

  1. 類級 `@RequestMapping` 定義模塊根路徑。
  2. 方法級 `@RequestMapping` 與方法名語義一致。
  3. 注入 Service 接口,不依賴實現類。
  4. 異常拋出 `Exception`,交由全局異常處理器 (`@ControllerAdvice` + `@ExceptionHandler`) 統一處理。
  5. 返回 `ModelAndView` 明確語義,或 `String` 視圖名 + `Model` 參數填充數據。

四、JSP 視圖編寫 (items/itemsList.jsp)


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="https://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>



    
    商品列表


    
            
ID名稱價格圖片創建時間詳情操作
${item.id} ${item.name} ${item.price} ${item.detail} 修改

JSTL 核心標簽**:`` 迭代、`` 判斷、`` 日期格式化、`` 數字格式化。**嚴禁在 JSP 中寫 Java 腳本let (`<% %>`)**,保持視圖純淨。

五、項目結構最佳實踐

src/main/java
└── com.iot.learnssm.firstssm
    ├── controller
    │   └── ItemsController.java
    ├── service
    │   ├── ItemsService.java
    │   └── impl/ItemsServiceImpl.java
    ├── mapper
    │   ├── ItemsMapper.java
    │   └── ItemsMapperCustom.java
    └── po
        ├── Items.java
        ├── ItemsCustom.java
        └── ItemsQueryVo.java
src/main/resources
└── spring
    ├── applicationContext-dao.xml
    ├── applicationContext-service.xml
    ├── applicationContext-transaction.xml
    └── springmvc.xml
src/main/webapp
├── WEB-INF
│   ├── jsp
│   │   └── items/itemsList.jsp
│   └── web.xml
└── static (JS/CSS/圖片)

六、常見問題排查

總結

SpringMVC + MyBatis 整合的關鍵在於 **雙容器架構清晰劃分**、**掃描包嚴格隔離**、**mvc:annotation-driven 一鍵啟用完整註解支持**、**視圖解析器約定優於配置**。遵循 Controller 薄、Service 富、DAO 專的分層原則,配合統一異常處理、參數校驗、日誌攔截,即可構建企業級可維護的 Web 應用骨架。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
現象原因解決
404 Not FoundURL 模式不匹配 / 視圖路徑錯誤檢查 `url-pattern`、Controller 映射、ViewResolver 前綴後綴
Controller 不生效掃描包路徑錯誤 / 缺少 @Controller確認 `component-scan base-package` 包含 controller 包
中文亂碼Tomcat 8+ 默認 UTF-8,但 GET 參數需配置 `URIEncoding="UTF-8"`server.xml `` 或 Spring `CharacterEncodingFilter`
事務不生效根/子容器掃描交叉 / 缺少 @Transactional嚴格隔離掃描包,Service 方法加 @Transactional