MVC是一种设计模式,它将应用划分为3个部分:数据(模型)、展现层(视图)和用户交互(控制器)。
在我的理解:
view 做界面展示
controller 对界面的请求进行一次过滤和转发
model 模型层,是对应数据库表的
一个事件发生的执行顺序是:
1. 用户和应用产生交互。
2. 控制器的事件处理器被触发。
3. 控制器从模型中请求数据,并将其交给视图。
4. 视图将数据呈现给用户。
不用类库或框架就可以实现这种MVC架构模式。关键是要将MVC的每部分按照职责进行划分,将代码清晰地分割为若干部分,并保持良好的解耦。这样可以对每个部分进行独立开发、测试和维护。
现用户登录:权限、角色、用户管理为例:
基于MVC框架用户登录时用户请求与数据处理如下图进行:
数据库中表的结构关系:
处理流程:
用户登录时,用户访问,传送用户登录信息,然后Struts根据配置文件(struts-config.xml)将ActionServlet接收到的Request委派给相应的Action处理。在业务层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,即进行用户验证,若通过验证,进入系统。
具体实现方法:
基于MVC框架实现权限控制大概有这么几种思路:“用户身份验证”、“控制器方法权限控制”、“界面元素权限控制”这三种方式可以为Web开发框架本身提供了很好用户访问控制和权限控制,使得用户界面呈现菜单、Web界面的按钮和内容、Action的提交控制,均能在总体权限功能分配和控制之下。
【用户身份验证】
在获取用户登陆基本信息进行验证时,获取用户的权限信息,从而达到权限控制的目的。
业务逻辑:在用户登录系统的时候获取用户的权限级别(一般用户,操作员等),然后根据用户级别获取到此用户级别可以操作的功能项,然后根据可以操作的功能项来动态的加载和移除功能菜单。
具体代码实现:
(1)视图层:即用户登录界面,再次省去。
(2) 控制层(配置文件)
<action name="showRole" class="roleAction" method="showRole">
<result name="showRole" type="dispatcher">/adminControl/showAllRole.jsp</result>
</action>
<action name="showRight" class="rightAction" method="showRight">
<result name="showRight" type="dispatcher">/adminControl/showAllRight.jsp</result>
</action>
(3)模型层
模型层中含有数据库的全部数据,并且定义了相应的方法去调用,当控制层调用这些方法时,像控制层传递这些数据。
主要代码:
PrintWriter out = response.getWriter();
List<SysRight> list = rightService.findByLoginUserId(user.getUserId());//调用hibernate中的数据
for (SysRight sysRight : list) {
System.out.println(sysRight);
}
String json = JSONSerializer.toJSON(list).toString();
out.print(json);
public List<SysRight> findByLoginUserId(String id) {
String hql="from SysUser u join u.sysRole r join r.sysRight m where u.userId = '"+id+"'";
return rightDao.findByHql(hql);
}
public List<SysRight> findByHql(String hql, Object... objects) {
return (List<SysRight>) this.getHibernateTemplate().find(hql,objects);
}