zoukankan      html  css  js  c++  java
  • 课程作业08 MVC框架具体使用

    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);

    }

  • 相关阅读:
    java对象序列化机制
    进程和线程的区别
    关于Java中的String类的不可变
    计算机编码ASCII、UNICODE和UTF-8
    mybatis中的一级缓存和二级缓存
    SQL语句之EXSITS谓词
    git学习笔记
    hdu1542-扫描线求矩形面积并
    首场ACM总结——2019JXCPC(CCPC江西省省赛)
    hdu1199(离散化线段树)
  • 原文地址:https://www.cnblogs.com/java-test/p/6810373.html
Copyright © 2011-2022 走看看