Posted on 2007-09-11 18:05
匪客 閱讀(2009)
評論(2) 編輯 收藏 所屬分類:
開發(fā)技術(shù)
3.
架構(gòu)概覽
MVC
層在
Spring
的
AbstractController
類基礎(chǔ)上進行了繼承和重構(gòu),使整個框架僅使用單一的公共控制器,數(shù)據(jù)操作采用
Spring
JdbcTemplate
,在邏輯層中直接集成了
Spring Jdbc
能力,可直接操作數(shù)據(jù),表現(xiàn)層
Jstl
,除此之外,未定義任何的表單對象、數(shù)據(jù)庫表映射對象和其他
ORM
的配置文件,在保留對關(guān)鍵功能的集成度的基礎(chǔ)上技術(shù)入門度極低,重點關(guān)注業(yè)務(wù)功能和優(yōu)化
SQL
語句
。
請求處理流傳如圖所示:
1)?????
用戶訪問
http://www.fyyk.com/a.do
;
2)?????
Web
應(yīng)用服務(wù)器(如
tomcat
)解析擴展名為
*.do
的請求,通過
Spring
分發(fā)器
org.springframework.web.servlet.DispatcherServlet
讀取
servlet-do.xml
中的配置,將請求轉(zhuǎn)發(fā)給公共控制器類
LogicController.java
;
3)?????
公共控制器類
LogicController.java
根據(jù)
servlet-do.xml
文件中的配置信息調(diào)用
DoLogicImpl.java
類中相對應(yīng)名稱的方法;
4)?????
DoLogicImpl.java
類中的方法在處理完成業(yè)務(wù)邏輯后,將數(shù)據(jù)內(nèi)容
ModelAndView
返回給公共控制器類
LogicController.java
;
5)?????
公共控制器類
LogicController.java
處理
ModelAndView
信息,執(zhí)行
b.jsp
將結(jié)果數(shù)據(jù)顯示出來;
3.1.
控制器
Controller
控制器類配置在
servlet-xxx.xml
文件中,封裝后的
Controller
特點如下:
1)???
繼承
AbstractController
類,便于調(diào)用應(yīng)用環(huán)境的
Web
特性;
2)??
只用控制器做請求的轉(zhuǎn)發(fā),業(yè)務(wù)實現(xiàn)全部在邏輯層;
3)?????
采用反映射機制(
reflect
),運行期調(diào)用邏輯類中的方法,而請求
URI
、邏輯類和方法名之間的對應(yīng)關(guān)系只需要在
servlet-xxx.xml
中配置,這樣,控制器實現(xiàn)就只有唯一的一個類文件;
3.2.
邏輯層
Logic
邏輯層類在
applicationContext-xxx.xml
文件配置
Bean
定義中,主要實現(xiàn)兩項功能:一是處理業(yè)務(wù)邏輯,二是操作數(shù)據(jù)庫;
邏輯層類首先需要定義一個接口類,統(tǒng)一以
xxxLogic.java
命名,實現(xiàn)類命名為
xxxLogicImpl.java
,并繼承
JdbcDaoSupport
類,這樣邏輯類便具有了數(shù)據(jù)庫訪問能力。
邏輯類的方法如果被公共控制器類
LogicController.java
的反映射機制直接調(diào)用,則其接口類需要繼承空的公共接口類
BasicLogic
,定義方法時參數(shù)和返回值是固定的,如果是被其他邏輯類調(diào)用則不需要。
public ModelAndView initLogin(HttpServletRequest request, HttpServletResponse response, ServletContext servletContext);
|
控制器層直接將請求的
request
、
response
和
servletContext
全部傳遞過來交由邏輯層自由控制,對于
request
中的表單數(shù)據(jù),未采用
SimpleFormController
的模式定義表單對象,建議手工獲取,從代碼量本身來將并不復(fù)雜,反而更加靈活。在業(yè)務(wù)處理完成后,必須構(gòu)造一個
ModelAndView
對象,作為方法返回值回傳給控制器。
范例代碼如下:
public class AdminLogicImpl extends JdbcDaoSupport implements AdminLogic
{
?
public ModelAndView insertUser(HttpServletRequest request, HttpServletResponse response,
??? ServletContext servletContext) throws DataAccessException
??? {
?
????
??String userId = request.getParameter("userId");
?
????
??String userName = request.getParameter("userName");
?
????
??int age = Integer.parseInt(request.getParameter("age"));
?
????
??double weight = Double.parseDouble(request.getParameter("weight"));
?
?
????
??String sqlStr = "insert into testuser (userId,username,age,weight,updatetime) values (?,?,?,?,?)";
??
????
?Object[] object = new Object[]{userId, userName, age, weight, new Date()};
??
????
?getJdbcTemplate().update(sqlStr, object);
?
?
????
?Map<String, Object> model = new HashMap<String, Object>();
??
????
?model.put("msg", "
插入用戶成功!
");
???
????model.put("url", "pageForm.user");
??
????
?String view = "admin/message.jsp";
??
????
?return new ModelAndView(view, model);
??? }
}
|
3.3.
表現(xiàn)層
Jstl
表現(xiàn)層采用
Jstl taglib 1.2
,在
*.jsp
頁面中加入
taglib
引用即可使用
Jstl
標(biāo)簽的大部分功能了,標(biāo)簽的具體使用方法請參考相關(guān)文檔。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
|