zoukankan      html  css  js  c++  java
  • 慕课网SSMOA办公系统

    目录

     需求分析

      1 用例图

     系统设计

     包及全局配置

     数据库设计

     工具类

     具体功能实现

      1 dao层功能实现

      2 编码过滤器及登陆拦截器

      3 单元测试

     遇到的问题总结

      1 新建一个Modul不会打开新页面

      2 导入依赖时标红

      3 Resources中文件名称有点但不意味着分层

      4 不同模块输出的日志不同

      5 ${catalina.base}位置在何处

      6 /* 和 / 的区别

      7 设置页面的根URL并统一导入

    需求分析

    1 用例图

    用例图是由产品经理产生的,主要是从用户的角度分析产品的功能和动态行为

    上图主要是从人员的角度来分析整个系统。这个系统最重要的步骤就是处理报销单,那么处理报销单的流程如下图所示

    系统设计

    对于整个系统采用SSM框架,并采用三层架构的方式 :持久层——Mybatis、表现层——Spring MVC、业务层——JavaBean。每层分别对应的列名为oa_dao、oa_web、oa_biz。

    包及全局配置

    对于配置这一点其实在一开的阶段并没有办法做到面面俱到,只能规定一些命名规范。对于全局的配置可以参考注释。

    数据库设计

    根据用例的分析,和项目的需求应该设计出总体的数据库

    工具类

    在编程中常常需要一些辅助类来帮助实现功能,因此有了工具类,但是这些工具类可能一开始并不确定有哪些,因此工具类下的各种类是随着代码的需求变化的。

    具体功能实现

    1 dao层功能实现

    部门管理

    部门与员工类似都需要增删改查操作,但是部门更的属性跟简单一点,因此先写部门管理,代码的具体实现流程为:

      实体类——dao接口——mapper映射方法——biz层接口——biz层实现接口——表现层实现

    在部门里具体编写代码时就是按照常规的CRUD进行的,具体代码的分析可以参考源代码中注释。其他模块的功能是类似的,只要分析一下源码就可以了

    2  编码过滤器及登陆拦截器

    这两个功能在oa_web中global包下,是比较常用的功能,具体分析可以参考代码注释。

    3 单元测试

    当写完功能代码后需要进行单元测试,具体的单元测试代码可以查看源码及注释。下面只是给出所用到的依赖

    <!-- 单元测试 -->
    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>4.12</version>
     </dependency>
    <!-- Spring test -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>

    具体的代码可以参考项目的源码

    遇到的问题总结

    1 新建一个Modul不会打开新页面

    因为想要在原有的project上要新建一个新的项目,因此直接按照如下操作,但是发现一只都是在原页面上打开的不会新建一个页面,后来发现这是我操作失误了。

    正确操作:选择上面的Project,然后选择Maven创建一个新的空白项目就会打开一个新的页面。

     

    2 导入依赖时标红

    在pom.xml时导入依赖发现标红了如下图所示,后来发现是这是因为idea导入出现了问题的原因,可以右键项目,选择Maven-Reimport。

     

     

     当还不行时就把以前导入的全部删除再重新导入即可。

    3 Resources中项目文件有点但不意味着分层

    在dao层有两个名字一样的文件夹,但是所表示的意义是不同的,在java中表示的包,采用com.imooc.oa会自动的在本地创建comimoocoa文件夹但是在resources中直接写com.imooc.oa.dao其实只会在本地中创建一个com.imooc.oa.dao的文件夹,并没有层次目录结构的。一开始因为不清楚这个导致排查了好久的错误。

    4 不同模块输出的日志不同

    在测试logback时分别在oa_dao,oa_biz进行了日志测试,发现在oa_dao测试日志时并没有任何新的文件产生,只是在控制台上有日志输出;在oa_biz时发现在该项目的路径下创建了一个新的文件夹catalina.base_IS_UNDEFINED然后在这个文件夹下面有日志记录。

    这些问题产生的原因是因为配置文件的设置,这些问题其实本质上而言都是正常的,在配置中有日志设置:${catalina.base}/logs/webapps但是在biz中并没有配置Tomcat有到哪里去找Tomcat的文件目录那,因此在biz项目新创建了一个文件夹,文件名字其实已经说明问题了:is undefined 没有被定义。

    注:其实在真实项目中应该只在oa_web中配置这个日志模块就可以了,在这里是为了学习,因此在每个模块中都配置了一个logback.xml。

    5 ${catalina.base}位置在何处

    其实只要看控制台的输出就可以明白

     此外控制台日志其实还有许多有效的信息可以查看的

     

     而下面则是记录了寻找logback配置文件的过程

    注:此处并不是说一定要把所有的日志打印全部看懂,但是一定要明白这些日志记录的信息,其实好多问题的出现都是因为不了解内部工作。

    6 /* 和 / 区别

    在SpringMVC的配置中如果采用/*进行匹配的话就会造成每一个页面都登录不进去

        <servlet-mapping>
            <servlet-name>SpringMVC</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>

    < url-pattern > / </ url-pattern >   不会匹配到*.jsp,即:*.jsp不会进入spring的 DispatcherServlet类 。
    < url-pattern > /* </ url-pattern >  会匹配*.jsp,会出现返回jsp视图时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以报404错。 

    总之,关于web.xml的url映射的小知识:
    < url-pattern>/</url-pattern>  会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url
    < url-pattern>/*</url-pattern> 会匹配所有url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等)

    在这个项目中:因为用了/,不会拦截jsp文件,那么首先会打开index.jsp,在index.jsp中有一个路径跳转action那么这个action便会被拦截开始执行流程。

    7 设置页面的根URL并统一导入

    没有配置前,在Tomcat设置中只要一修改Application context中的名称就会造成项目崩溃。

     后来发现原因是因为整个项目路径是写死的,因此要把项目改成可以灵活配置的,下面的代码是获取到页面的根url。

    <%
        String path = request.getContextPath();
        String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
        request.setAttribute("ctx", basePath);
    %>

    一般使用上述语句来获取当前页面的根url,在代码中使用${ctx}即可获得所配置的url

    <!-- 为所有的页面都引入一个共同的页面 -->
    <jsp-config>
        <jsp-property-group>
            <!-- 所有的页面 -->
            <url-pattern>*.jsp</url-pattern>
            <!-- 待引入页面的jsp路径-->
            <include-prelude>/WEB-INF/路径</include-prelude>
        </jsp-property-group>
    </jsp-config>

    一般设置根url的在index.jsp中或者某些公共的jsp文件中,可以在web.xml中配置让所有的jsp文件都导入这个只有根url的jsp文件,在其他jsp文件中只需要引入一个base即可。

    <base href="value">

    当引入公共的头部后还要在index.jsp重定向一次。

    0

  • 相关阅读:
    C#之设计模式
    C#之索引器
    C#基础强化-继承与多态
    C#基础强化-进程操作
    WKWebView与JavaScript交互基础
    HTML之JS学习
    HTML之CSS学习
    HTML学习
    玩诈欺的小杉
    最大异或和
  • 原文地址:https://www.cnblogs.com/youngao/p/11694241.html
Copyright © 2011-2022 走看看