j2e应用概述
过年也过完了,现在正式开始进入j2e的整理。现在开篇第一篇,整理一下j2e应用和开发环境。j2e应用提供的跨平台性,开放性已经各种远程访问的技术,为异构系统的良好整合提供了保证。注意这个是有一个异构系统,也就是说一个大的项目里面分布式整合了好多不同的平台 ,不同的系统,那么这就是一个复杂的异构系统。废话不多说,现在开始:
首先,什么是j2e?
2006年sun提出了java EE的概念,与之同步出现了2个主要规范,JSF1.2和Ejb3.0,但是应用依然不如使用SSH组合应用广泛。对于现在的项目来说,使用struts2的已经很少的,现在都是在使用springMVC来做前端控制器。SSH三大框架俗称轻量级j2e平台,关于什么是轻量级什么是重量级我后面会有整理,这里只需要明白基于轻量级的j2e平台可以运行在普通的web容器中,无需Ejb容器的支持,且一样具有稳定的性能和极高的可扩展性,可维护性。
- j2e应用的经典分层模型
每天在玩j2e,说白了就是玩6块东西。
1,数据库:很明显了,数据库用来存放数据,序列化对象,进行CRUD操作。
2,领域对象层:也就是我们常说的pojo,也就是entity,也就是VO,也就是domain object。在这里说明下pojo,实际中我们一般都不这样子来喊,一般都是说实体,这个东西就是实体。他的定义是Plain Old Java Object,也就是说说传统的,古老的,普通的java对象。这一层是直接关联数据库的表的,我们在做的ORM映射都是在做这个领域对象和数据库中表的映射的。实际开发中呢,还有另外的一层,我自己成为PO,也就是持久层对象,他里面可以再封装一层VO,用来在控制器和页面交互使用,举一个具体的例子,我现在有一个情节设计的数据结构有点复杂了,页面上显示一个list,但是list里面丢着是好多的map,或者说是map里面value存的是一个list集合,那么这个时候就要设计VO的时候就设计成简单的单表,在ORM映射的时候这样子很方便的,我自己在DAO层做处理,转换成PO。
3,DAO层:Date Access Object,数据访问对象,这一层由系列的DAO组件构成,这些DAO单纯的访问实体对象,实现了对数据库的CRUD的操作。为了使得业务逻辑组件的实现和DAO组件的实现分离,我们可以为每一个DAO组件提供接口,在编码的时候面向接口编程,这样子就很好的解耦了。
4,service层:业务逻辑层,这一层由系列的业务逻辑对象组成。这一层一般的都要依赖上面的DAO层,在这里可以使用门面模式,将上面的DAO的每一个方法组合成自己的一套业务逻辑方法。这里值得注意的是这些业务逻辑方法仅仅负责实现业务逻辑,不应该进行数据库的访问,因此,业务逻辑组件中不应该出现原始的hibernate,JDBC等API。
5,controller层:控制器层。这一层使用MVC设计模式,也就是说这些控制器用于拦截用户的请求,并调用业务逻辑组件的业务逻辑方法,处理用户请求,并根据处理结果转发到不同的表现层组件。
6,表现层:也就是我们说的页面了。我使用最多的是JSP,当然还有Velocity页面,PDF文档试图等等,现在比较流行的HTML5也都是表现层,负责收集用户请求,并显示处理结果。
以上各层组件之间以松耦合的方式联系在一起,各组件之间不以硬编码的方式进行耦合,这种方式是为了应用以后的扩展性。在具体一点就是说,比如,变现层使用jsp用于页面显示,控制器层使用springMVC来交互前后台,DAO层使用hibernate来进行ORM映射,数据库层使用oracle来处理数据,整个组件之间使用spring来管理,这样子就形成了一个有效的完成的j2e体系了。
- 关于j2e的一些名字的解释:
1,胖客户端:当一个程序运行时需要一个单独的客户端程序支持。比如QQ,就需要安装一个客户端程序。
瘦客户端:不需要进行任何程序的安装,直接使用即可。比如用浏览器访问我自己的博客。
2,静态web和静态web:他们2个最本质的区别就是动态的web是要进行数据库操作的,而静态的不需要。
关于静态web和动态web要多说几句:
实际开发中一般都会有静态服务器,什么叫静态服务器呢,就是里面放的都是些静态的文件,比如说模板了,比如说流程图等等这些,之所以分开还是处于降低服务器负荷的考虑。动态web和静态web访问的大致情况如下:
首先,所有的请求不在直接提交给web服务器,而是通过web服务插件进行接收,此插件的用处就是区分用户发出的请求是动态的还是静态的。OK,如果客户发出的是静态请求,则会将用户请求提交给web服务器,并通过文件系统将用户所需要的资源发回给客户端浏览器,但是如果是动态请求的话,则会将所有的请求提交给web容器处理,在web容器中将会采用拼凑代码的方式动态的生成数据并通过web服务器发回给客户端浏览器。具体的过程如下图:
3,C/S结构:即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势。早期的软件系统多以此作为首选设计标准。。
B/S结构:即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种 结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现,形成所谓3-tier结构。B/S结构,主要是利用了不断成熟的WWW浏览器技术,结合浏览器的多种Script语言(VBScript、JavaScript…)和ActiveX技术,用通用浏览器 就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。
最后说一下j2e要达到的终极目标,因为一个系统以后会维护,升级,产品也会迭代更新,这样子就要求我们的软件系统要具有良好的伸缩性。以后我们在写代码的时候要尽量的让应用的各组件以松耦合的方式组织在一起,让应用之间的耦合停留在接口层次,而不是代码层次。
j2e的概述基本就讲这么多,接下来我会详细的讲解下常用的服务器。也就是tomcat,之前使用的websphere和jetty暂时先不讲,以后再说。
j2e应用概述的更多相关文章
- 【AR实验室】ARToolKit之概述篇
0x00 - 前言 我从去年就开始对AR(Augmented Reality)技术比较关注,但是去年AR行业一直处于偶尔发声的状态,丝毫没有其"异姓同名"的兄弟VR(Virtual ...
- Recurrent Neural Network系列1--RNN(循环神经网络)概述
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
- .Net 大型分布式基础服务架构横向演变概述
一. 业务背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 二. 基础 ...
- [C#] 进阶 - LINQ 标准查询操作概述
LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
- Java消息队列--JMS概述
1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...
- [AlwaysOn Availability Groups]健康模型 Part 1——概述
健康模型概述 在成功部署AG之后,跟踪和维护健康状况是很重要的. 1.AG健康模型概述 AG的健康模型是基于策略管理(Policy Based Management PBM)的.如果不熟悉这个特性,可 ...
- μCos-ii学习笔记1_概述
一.μCos-ii _概述 网上关于μCosii的文章多不胜数,本人学习的过程中也参考了很多人的理解和想法,看的是卢有亮老师的<嵌入式实时操作系统-μC/OS原理与实践>(第2版),同时也 ...
随机推荐
- Python数据分析与可视化(经典学习资料)
Numpy:来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多,本身是由C语言开发.这个是很基础的扩展,其余的扩展都是以此为基础.数据结构为 ...
- python函数,模块及eclipse使用
一.eclipse的使用 1.作用 (1)最好用的IDE (2)可调式debug (3)查看可执行过程 (4)可查看源代码 2.安装eclipse及配置 目录安装Pythonpython for ec ...
- easy ui Tree请求跨域数据
扯淡篇: jQuery EasyUI为提供了大多数UI控件的使用,如:accordion,combobox,menu,dialog,tabs,validatebox,datagrid,window,t ...
- Python笔记(二):列表+列表数据处理+函数
#才疏学浅,难免有不恰当之处,请不吝指正,谢谢. #适合初学者. 列表的数据自下而上堆放(形成一个堆栈),类似于其他编程语言的数组.例如: user = ["张三","李 ...
- MySQL两阶段提交
参数介绍 innodb_flush_log_at_trx_commit 0: 每隔1s,系统后台线程刷log buffer,也就是把redo日志刷盘,这里会调用fsync,所以可能丢失最后1s的事务. ...
- iphone微信后退不刷新的问题
查看了很多解决ios微信返回不刷新页面的文章,大部分都是利用H5的新特性history来进行解决的,而且很多人的想法都是用了pushstate和popstate来实现了这个功能,但是用pushstat ...
- MongoDB批量操作及与MySQL效率对比
本文主要通过批量与非批量对比操作的方式介绍MongoDB的bulkWrite()方法的使用.顺带与关系型数据库MySQL进行对比,比较这两种不同类型数据库的效率.如果只是想学习bulkWrite()的 ...
- BZOJ:4530: [Bjoi2014]大融合
4530: [Bjoi2014]大融合 拿这题作为lct子树查询的练手.本来以为这会是一个大知识点,结果好像只是一个小技巧? 多维护一个虚边连接着的子树大小即可. #include<cstdio ...
- [bzoj3955] [WF2013]Surely You Congest
首先最短路长度不同的人肯定不会冲突. 对于最短路长度相同的人,跑个最大流就行了..当然只有一个人就不用跑了 看起来会T得很惨..但dinic在单位网络里是O(m*n^0.5)的... #include ...
- BZOJ2726: [SDOI2012]任务安排
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2726 倒着做,前面的点对后面的点都是有贡献的. f[i]=min(f[j]+cost[i]*( ...