| 層 | 實現 | 說明 |
|---|---|---|
| View | 單一 JSP | 頁面頂部直接呼叫 Service Bean 取資料,EL/JSTL 渲染;無 Struts/Action/XML |
| Controller | 另一 JSP | 接收表單提交,呼叫 Service,redirect/forward 回 View;可用 Spring DataBinder 綁定 DTO |
| Model | Spring @Service POJO | 用 JdbcTemplate/SimpleJdbcTemplate 操作資料庫,@Transactional 管理事務,無 XML 定義 Bean |
@Service、@Autowired、@Transactional 替代 applicationContext.xml。MapSqlParameterSource 綁參數、ParameterizedRowMapper 映射結果集到 DTO。
// Service
@Service
public class UserService {
@Autowired JdbcTemplate jt;
@Transactional
public void save(User u) {
jt.update("INSERT INTO user(name,age) VALUES(?,?)", u.getName(), u.getAge());
}
public List list() {
return jt.query("SELECT * FROM user", new BeanPropertyRowMapper<>(User.class));
}
}
// View JSP 頂部
<% UserService svc = (UserService) pageContext.getAttribute("userService"); %>
<c:forEach items="${svc.list()}" var="u"> ${u.name} </c:forEach>
犧牲嚴格分層、型別安全、靜態檢查,換取極致開發速度與部署簡單度。非核心鏈路、非長期演進專案的務實選擇。