本文承接 Service 層整合,完成 Web 層配置:`web.xml` 雙容器啟動、`spring-mvc.xml` 核心組件裝配、Controller 標準化編寫、JSP 視圖渲染,構建請求從前端到數據庫的完整鏈路。
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
關鍵設計:
mvc:annotation-driven 內建功能**:`RequestMappingHandlerMapping`、`RequestMappingHandlerAdapter`、數據綁定 (`DataBinder`)、類型轉換 (`ConversionService`)、格式化 (`Formatter`)、JSON/XML `HttpMessageConverter` (需 Jackson/JAXB jar)、JSR-303 驗證 (`Validator`)。**實戰必開**。
@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;
}
}
規範要點**:
<%@ 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 核心標簽**:`
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/圖片)
| 現象 | 原因 | 解決 |
|---|---|---|
| 404 Not Found | URL 模式不匹配 / 視圖路徑錯誤 | 檢查 `url-pattern`、Controller 映射、ViewResolver 前綴後綴 |
| Controller 不生效 | 掃描包路徑錯誤 / 缺少 @Controller | 確認 `component-scan base-package` 包含 controller 包 |
| 中文亂碼 | Tomcat 8+ 默認 UTF-8,但 GET 參數需配置 `URIEncoding="UTF-8"` | server.xml ` |
| 事務不生效 | 根/子容器掃描交叉 / 缺少 @Transactional | 嚴格隔離掃描包,Service 方法加 @Transactional |