- ofcms简介,技术选型介绍
- Tomcat运行原理浅析
- Maven功能浅析
- ofcms项目结构分析
壹 ofcms简介
ofcms是一款基于java开发的内容管理系统,也就是我们俗称的建站系统,国内建站系统大多由php开发而来,java开发的少之又少
ofcms由JFinal框架开发,而JFinal是在Spring MVC的基础上开发而来的
本打算基于ofcms入手,开始java代码审计的学习流程,后发现自身知识盲区实在太多,于是便开始从底层一步步的开始学习
ofcms建于Tomcat 8.5+之上,使用Maven内容管理模块,数据库使用MySQL 5.7+,其项目结构大致如下所示:
在RAEDME.md中作者对技术选型如下介绍:
可见整站的建设并未使用完整的框架进行开发,使用前后端分离的设计思想,将各个现成组件整合而成,是一款不错的的java建站系统。
贰 Tomcat运行原理浅析
本人未曾系统学习过javaweb开发相关知识,都是零散从不同方面接触过,知识储备少之又少,大厦始于地基,便开始从下往上开始慢慢补充;
什么是Tomcat?
Tomcat是一个web中间件,位于JVM虚拟机和java项目之间的中间人,也就是负责处理请求包和响应包的转发人
我们的WEB项目,本质是一个资源堆和无数的实例化java类方法,我们的Tomcat通过java方法去调用处理那些个资源堆,从而吧用户想得到的数据和资源返回给用户浏览器,就得到了我们的“web”网站;
Web项目部署进Tomcat的WebApp文件夹中的目的是很明确的,那就是希望Tomcat中间件去调用写好的方法去为客户端返回需要的资源和数据;
再往下分析:
Tomcat作为一个java程序可以运行起来,那必然有一个main方法去指导它的工作,那么对于Tomcat而言,他的main方法是被部署进WebApp文件夹下才得以确定的
Tomcat如何确定调用什么方法呢。这取却于客户端的请求:
例如:http://127.0.0.1:8080/ofcms-admin/index.java?show这样的一个请求,通过http协议,在浏览器发往本机的8080端口,携带的参数show方法,包含此方法的路径为/ofcms-admin文件下的java类文件,文件名为:index.java
在ofcms里,核心java方法代码放在了 .../src/main/java/中
在WebApp中存放的是web应用部署的资源文件,大都是前端的资源文件,Tomcat通过核心java代码去调用前端资源,再去利用核心java代码访问数据库,最终吧资源和数据都整合后通过http协议以响应包的形式发送给客户端的浏览器。
至于为何ofcms的核心代码是在java文件夹里,这里则需要讲一下Maven项目包管理器:
叁 Maven功能浅析
什么是Maven?
这里举一个栗子(摘自知乎大佬):
我要做一盘红烧排骨,我需要下列材料:
- 小排500克。
- 酱油20克
- 盐5克。
- 糖20克。
- 茴香5克。
- 姜,一个。
那么,我就要先去菜市场买小排,去超市买酱油,去南北货店买茴香。而且我还要自己去记。麻烦吗?
这个时候,有个超市,卖一个红烧排骨的一个包,把这些材料打包好,放在橱柜里卖。你要做的就是:
- 去超市
- 买这个红烧排骨包,里面包含了小排和所有要用到的材料。
然后,你就可以开始烧红烧小排了。至于这个红烧小排的配料怎么配,不用你操心,这个是超市做个包的配菜师傅的事情。当然,你要宫保鸡丁的配料,这个师傅也会给你配好。
Maven就是这个超市,只是它卖的不是红烧排骨,而是一个jar包已经和它有依赖关系的其他jar包。这样,你就不用再开撸java代码前,去各个网站下载各种不同的jar包了,也不用考虑它们之间的依赖关系。
这个就是Maven的作用。
一个玩针对各Java项目需要用到不计其数的依赖包,而且我们还需要将各个分类整理,放入相对应的文件夹中,以便于资源的调用,手动来做,理论上可行,但是这是一个十分复杂繁琐的工程,所以Apache公司就专门为Java项目的开发打造了Maven包管理工具,其主要功能是:
- 提供了一套标准化的项目结构;
- 提供了一套标准化的构建流程(编译,测试,打包,发布……);
- 提供了一套依赖管理机制。
一个最基本的Maven目录如下:
a-maven-project 项目名称
├── pom.xml |--项目描述文件
├── src |--源文件夹
│ ├── main | |--源码
│ │ ├── java | | |--存放java源码
│ │ └── resources | | |--存放资源文件
│ └── test | |--测试源码
│ ├── java | |--存放测试源码
│ └── resources | |--存放测试资源文件
└── target |--所有编译、打包生成的文件
这些目录都是Maven协议好的标准目录,不可随意更改目录结构,直接使用就可以。
其中我们看pom.xml文件:其中随便截取了一段
其中
- <groupId>类似于java的包名,通常是公司和组织的名称
- <artifactId>类似于Java的类名,通常是项目名称
- <version>就是简述版本号
整个pom.xml就是由这三个唯一标识构建起来的项目描述文件
在我们声明一个依赖以后,Maven就会自动下载这个依赖包并把它们放到classpath中
简单了解了一下Tomcat服务器的工作原理和Maven包管理器后,我们就来看ofcms的目录结构:
肆 ofcsm目录结构简析
先放上来整个项目的基本情况:
pom.xml文件:
- pom.xml:从这儿可以看出,ofcms项目是使用Maven包管理器,根目录下包含了多个子项目,每个项目都有各自的pom.xml描述文件
项目根目录下只有src和target两个文件夹:
- src:源码文件(包含需要被Tomcat调用的资源以及调用所需的Java方法文件,web部署文件)
- target:编译后打包生成的文件
主要看src文件夹内的文件,targent内都是一些.class二进制文件以及src内文件的镜像生成文件
src内只有一个文件夹:main文件夹,旗下有java、resources、webapp文件夹
- java:存放的是java核心代码,及指导tomcat工作的java方法
- resources:存放的是一些静态资源(静态html文件、Sql方言等)
- webapp:web应用部署的根目录,其下存放可访问的静态html的page界面、前端css文件、上传的图片资源、以及WEB-INF文件夹
java文件夹没什么好说的,就是java功能代码
- conf:
- sql:数据库SQL方言模板
- dev:
- conf:数据库连接配置文件
- resource:一些默认界面的资源文件
- static:静态资源和一些前端插件
- upload:web前端所需要的图片文件
- WEB-INF:Tomcat下特有的文件夹,WEB-INF文件夹是一个非常安全的文件,在页面中不能直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。
最后:
制作不易,且行且珍惜
参考文章:
https://blog.youkuaiyun.com/qq_33792843/article/details/76904111
https://www.zhihu.com/question/20104186
https://www.liaoxuefeng.com/wiki/1252599548343744/1309301146648610
https://zhuanlan.zhihu.com/p/115403195
https://juejin.cn/post/6844903824524574734
https://blog.youkuaiyun.com/l00149133/article/details/78984083
https://blog.youkuaiyun.com/qq_32951553/article/details/79686367
来到自我意识的边疆,
看到父亲坐在云端抽烟,
他说:孩子,去和昨天和解吧
————万能青年旅社《揪心的玩笑和漫长的白日梦》