目录

 需求分析

  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会自动的在本地创建com\imooc\oa文件夹但是在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

慕课网SSMOA办公系统的更多相关文章

  1. 手机端web学习基础--from慕课网

    web知识零零散散的知道一些,但总感觉不够系统,遇到问题不知道如何解决,因此特此来系统的学习一下web前端的知识.从慕课网的web基础看起.下面学习http://www.imooc.com/learn ...

  2. react入门——慕课网笔记

    一. jsx 1. 被称为语法糖:糖衣语法,计算机语言中添加的某种语法,对语言的功能没有影响,更方便程序员使用,增加程序的可读性,降低出错的可能性 类似的还有(coffeescript,typescr ...

  3. 九思老客户分享:部署OA办公系统的四大意义

    原文:http://www.jiusi.net/detail/472__776__4009__1.html 关键词:OA办公系统.oa系统 .九思OA 九思老客户分享:部署OA办公系统的四大意义 当今 ...

  4. 以慕课网日志分析为例-进入大数据Spark SQL的世界

    下载地址.请联系群主 第1章 初探大数据 本章将介绍为什么要学习大数据.如何学好大数据.如何快速转型大数据岗位.本项目实战课程的内容安排.本项目实战课程的前置内容介绍.开发环境介绍.同时为大家介绍项目 ...

  5. IBOS云办公系统二次开发之功能介绍(PHP技术)

    IBOS自动化办公系统是我见到的功能.架构最好的开源自动化办公系统,功能与企业需求吻合度之高.架构之灵活,让我不得不将之介绍给大家,让跟多需要学习PHP开发的朋友来了解她,拥抱她! 如果您还没有很好的 ...

  6. PHP消息队列实现及应用_慕课网学习

    https://blog.csdn.net/d_g_h/article/details/79643714 https://blog.csdn.net/tTU1EvLDeLFq5btqiK/articl ...

  7. 一款优秀的OA办公系统有哪些功能?

    OA办公系统解决企业的日常管理规范化.增加企业的可控性.提高企业运转的效率的基本问题,范围涉及日常行政管理.各种事项的审批.办公资源的管理.多人多部门的协同办公.以及各种信息的沟通与传递.可以概括的说 ...

  8. JavaScript进阶--慕课网学习笔记

                         JAVASCRIPT—进阶篇 给变量取个名字(变量命名) 变量名字可以任意取,只不过取名字要遵循一些规则: 1.必须以字母.下划线或美元符号开头,后面可以跟字 ...

  9. 01慕课网《进击Node.js基础(一)》Node.js安装,创建例子

    版本:偶数位为稳定版本,基数为非稳定版本 - 0.6.x - 0.7.x    - 0.8.x -0.9.x    -0.10.x  -0.11.x 概念:Node.js采用谷歌浏览器的V8引擎,用C ...

随机推荐

  1. JDBC 注册驱动,获取连接

    jdbc 动力节点视频教程 JDBC编程六步 1.注册驱动(作用:告诉Java程序,即将要连接的是哪个品牌的数据库) 2.获取连接 (表示JVM进程和数据库进程之间的通道打开了,属于进程间的通信,重量 ...

  2. Python turtle(介绍一)

    关于绘制图形库turtle # 画布上,默认有一个坐标原点为画布中心的坐标轴(0,0),默认"standard"模式坐标原点上有一只面朝x轴正方向小乌龟 一:海龟箭头Turtle相 ...

  3. Django导出数据为Excel,调用浏览器下载

    1. 环境 Django (2.1.10) + Python3.6 + xlwt (1.3.0) 操作系统使用的为:Windows 7 2. 接口代码 def now_export(request): ...

  4. 【数据结构】P1165 日志分析

    题目描述 MM 海运公司最近要对旗下仓库的货物进出情况进行统计.目前他们所拥有的唯一记录就是一个记录集装箱进出情况的日志.该日志记录了两类操作:第一类操作为集装箱入库操作,以及该次入库的集装箱重量:第 ...

  5. Istio技术与实践03:最佳实践之sidecar自动注入

    Istio通过对serviceMesh中的每个pod注入sidecar,来实现无侵入式的服务治理能力.其中,sidecar的注入是其能力实现的重要一环(本文主要介绍在kubernetes集群中的注入方 ...

  6. Docker相关环境全套安装文档兼小技能

    Docker相关环境全套安装文档兼小技能 以下环境皆为ubuntu16.04,主要安装docker,docker-compose,docker仓库等. Docker安装 参考官方 A: 有源安装 Ub ...

  7. (十)mybatis之缓存

    一.缓存的意义 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)去查询,从缓存中进行查询,从而提高查询效率,解决了高并发系统的性能问题. 二.mybatis ...

  8. Quartz.net任务调度(石英钟定时任务)

    好了,现在具体来说一下怎么使用Quartz.net 2.0. 1.到网上下载Quartz.net 2.0,下载完后解压,里面有vs.net2008和vs.net2010两个版本. 2.新建一个空项目, ...

  9. 括号配对检测 A

    括号配对检测 A ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮ ...

  10. jQuery入门简述

    jQuery 是一套快速的,简洁的 javaScript 脚本库,jQuery 由美国人 John Resig 创建,至今已吸引了来自世界各地的众多 javaScript 高手加入其组织,使用户能更方 ...