zoukankan      html  css  js  c++  java
  • Fltiss项目的架构、包名的定义和类的划分

    这是项目的一览

                               

    首先Web根目录

    除了WEB-INF以外,还有css,img,js,lib目录,这四者都是静态资源。

    由于客户端无法访问WEB-INF下的内容,所以将它们放置在了Web根目录下。

    而且,很显然,需要在SpringMVC的配置文件中声明它们,

    以防DispatcherServlet认为,诸如/img/logo.gif的URL是希望去访问映射到这个URL的控制器请求方法

    <!-- 静态资源 -->
    <mvc:resources mapping="/css/**" location="/css/" />
    <mvc:resources mapping="/img/**" location="/img/" />
    <mvc:resources mapping="/js/**" location="/js/" />
    <mvc:resources mapping="/lib/**" location="/lib/" />

    这四个目录的前三者,已经用目录名自解释了自己存放了哪些文件,只有lib目录比较特殊。

    设计lib目录的目的是为外部js和外部UI框架安排存放位置,从而与项目自身的js和css文件区分开来

    如Bootstrap和JQuery.js都会统一的放在lib目录下。

    接着是WEB-INF目录,这个目录下除了为Web容器提供的classes(eclipse中没有显示)、lib(这个目录放的是jar文件)、web.xml以外,还有taglib.tld文件和jsp目录,

    其中taglib.tld声明的是自定义jsp标签,目的是辅助渲染视图,减少jsp中出现诸如

    <i class="uk-icon-plus uk-icon-justify"></i>

    <i class="uk-icon-circle uk-icon-justify"></i>

    标签,而是用

    <tag:ico value="plus" />

    <tag:ico value="circle" />

    来代替,解决了代码重复过多的问题。

    jsp目录下存放的是jsp文件,Deolin将jsp安排成了两类,

    第一类是将会被在请求方法的最后被转发的目标jsp,这类jsp被放在jsp的根目录下,与SpringMVC配置中的视图解析器前缀向呼应

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/" />

    第二类是不会被转发的jsp,这类jsp全是从第一类jsp中提取出来的共通jsp,提取这些jsp片段的目的是减少重复代码,

    这些jsp被统一的放在jsp目录下的com目录下,最终这类jsp会被这样引用到第一类jsp中

    <jsp:include page="/WEB-INF/jsp/com/Navigation.jsp" />

    Web根目录结束了,接下来是配置文件,也就是一览中的“src/main/resources”目录,

    这个目录是Maven项目所自带的,Deolin仅仅是在目录下为每个框架都建立一个专门的包。

    属于某个框架的配置,无论是properties文件还是xml文件,都统一放在对应的包之下,

    比如说,db.properties和mappers.xml都将被置于mybatis包之中。

    特别地,spring.xml和spring-webmvc-servlet.xml被放置在了一起,

    因为根据Spring官网来看,SpringMVC也是通过PROJECTS下的SPRING FRAMEWORK进入的,

    所以它也并放在了springframework包下,仅仅是这个原因。

    最后是“src/main/java”目录,Java源码存放的路径。

    util包和tagimpl包可能是相对独立的两个包了,

    前者放的是工具类,后者放的是前面taglib.tld文件声明标签的具体实现,

    前者为几乎为所有的其他类服务,但不依赖任何类,后者仅仅为taglib.tld服务。

    controller, service, mapper, vo分别代表的是控制层,业务层,持久层,视图层。

    控制层在SpringMVC的配置中被扫描,

    <mvc:annotation-driven />
    <context:component-scan base-package="io.deolin.controller" />

    业务层在Spring的“事务管理”模块被扫描,service包内仅仅是用于抽象的接口,具体实现需要通过service.impl包

    <tx:annotation-driven transaction-manager="transactionManager" />
    <context:component-scan base-package="io.deolin.service" />

    持久层在Spring的“整合Mybatis”模块以及Mybatis的配置文件——mappers.xml中被扫描,

        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
        </bean>
    <configuration>
        <mappers>
            <package name="io.deolin.mapper" />
        </mappers>
    </configuration>

    视图层里全是JavaBeans,这些类一一映射了jsp文件,所以命名上遵循了以下规则

    Navigation.jsp  >>  NavagationVo.java

    其中,vo在这里定义成View Object,用于封装渲染视图用的数据,

    如果数据结构比较复杂,那还需要vo.entity包的支持,entity用于封装更具体的实体,

    使vo内数据层次能与视图的表现层次一致。

    这四个层次的工作大致是这样安排的。

    1、控制层中的控制器请求方法接受到请求

    (如果是带有表单的请求,需要借助SpringMVC的数据绑定,这还需要form包的支持,form类中的私有域需要与对应form标签中的input标签name属性相一致),

    2、基于请求不断调用业务层的具体业务,将细节全部交给业务层,一个业务方法处理一个细节,对控制层负责,

    处理完毕后需要展示出来的数据会在请求方法中被一一传值到vo类对象中。

    3、请求方法的最后,被传值完毕vo对象会以addAttribute()的形式传到SpringMVC的Model对象(它以方法参数的形式出现在请求方法中)中,

    然后请求方法返回需要转发的jsp文件名。

    4、业务层虽然会处理业务细节,但是访问数据库的工作交给了持久层。

    举例说明一下4个层次的依赖关系

     

  • 相关阅读:
    编码问题
    僵尸进程与孤儿进程
    进程理论 阻塞非阻塞 同步异步 I/O操作
    浏览器上网流程以及套接字介绍
    OSI七层模型
    JsonResponse返回中文乱码问题
    查看源码所在位置
    linux ssh登录的小知识
    centos7安装python3.6
    Jquery的使用
  • 原文地址:https://www.cnblogs.com/deolin/p/6852670.html
Copyright © 2011-2022 走看看