Posted on 2007-09-11 18:05
匪客 阅读(1996)
评论(2) 编辑 收藏 所属分类:
开发技术
3.
架构概览
MVC
层在
Spring
的
AbstractController
类基础上进行了继承和重构,使整个框架仅使用单一的公共控制器,数据操作采用
Spring
JdbcTemplate
,在逻辑层中直接集成了
Spring Jdbc
能力,可直接操作数据,表现层
Jstl
,除此之外,未定义任何的表单对象、数据库表映射对象和其他
ORM
的配置文件,在保留对关键功能的集成度的基础上技术入门度极低,重点关注业务功能和优化
SQL
语句
。
请求处理流传如图所示:
1)
用户访问
http://www.fyyk.com/a.do
;
2)
Web
应用服务器(如
tomcat
)解析扩展名为
*.do
的请求,通过
Spring
分发器
org.springframework.web.servlet.DispatcherServlet
读取
servlet-do.xml
中的配置,将请求转发给公共控制器类
LogicController.java
;
3)
公共控制器类
LogicController.java
根据
servlet-do.xml
文件中的配置信息调用
DoLogicImpl.java
类中相对应名称的方法;
4)
DoLogicImpl.java
类中的方法在处理完成业务逻辑后,将数据内容
ModelAndView
返回给公共控制器类
LogicController.java
;
5)
公共控制器类
LogicController.java
处理
ModelAndView
信息,执行
b.jsp
将结果数据显示出来;
3.1.
控制器
Controller
控制器类配置在
servlet-xxx.xml
文件中,封装后的
Controller
特点如下:
1)
继承
AbstractController
类,便于调用应用环境的
Web
特性;
2)
只用控制器做请求的转发,业务实现全部在逻辑层;
3)
采用反映射机制(
reflect
),运行期调用逻辑类中的方法,而请求
URI
、逻辑类和方法名之间的对应关系只需要在
servlet-xxx.xml
中配置,这样,控制器实现就只有唯一的一个类文件;
3.2.
逻辑层
Logic
逻辑层类在
applicationContext-xxx.xml
文件配置
Bean
定义中,主要实现两项功能:一是处理业务逻辑,二是操作数据库;
逻辑层类首先需要定义一个接口类,统一以
xxxLogic.java
命名,实现类命名为
xxxLogicImpl.java
,并继承
JdbcDaoSupport
类,这样逻辑类便具有了数据库访问能力。
逻辑类的方法如果被公共控制器类
LogicController.java
的反映射机制直接调用,则其接口类需要继承空的公共接口类
BasicLogic
,定义方法时参数和返回值是固定的,如果是被其他逻辑类调用则不需要。
public ModelAndView initLogin(HttpServletRequest request, HttpServletResponse response, ServletContext servletContext);
|
控制器层直接将请求的
request
、
response
和
servletContext
全部传递过来交由逻辑层自由控制,对于
request
中的表单数据,未采用
SimpleFormController
的模式定义表单对象,建议手工获取,从代码量本身来将并不复杂,反而更加灵活。在业务处理完成后,必须构造一个
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.
表现层
Jstl
表现层采用
Jstl taglib 1.2
,在
*.jsp
页面中加入
taglib
引用即可使用
Jstl
标签的大部分功能了,标签的具体使用方法请参考相关文档。
<%@ 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" %>
|