文档章节

JavaWeb应用开发架构浅谈

一别经年
 一别经年
发布于 2014/06/13 16:34
字数 2045
阅读 80
收藏 3
点赞 0
评论 0

本文就我所经历和使用过的技术和框架, 讨论 Java / Javascript 技术组合构成的Web 应用架构。


一、 概述

Web 应用架构可以划分为两大子系统:前端子系统和后台子系统。 

前端子系统:

1.     基础技术: Html/Javascript/CSS / Flash

2.     开发框架: jQuery, Extjs , Flex 等;

后台子系统:

1.     基础技术: Java Servlet;

2.     开发框架: Struts, Spring, Hibernate, ibatis 等; 

3.     应用服务器: Tomcat / Jetty 


编程模型: B/S 模型。 客户端向服务器端发送请求, 服务器经过处理后返回响应, 然后客户端根据响应及需求绘制前端展现。 在用户客户端和实际提供功能的Web 服务器之间还可能存在着代理服务器, 负载均衡服务器, 不过那些属于锦上添花的事物,暂时不在考虑范围内。


富客户端应用理念: 客户端承担大量的交互逻辑及渲染工作,服务器端主要是处理请求和返回数据。

前后端系统耦合: 客户端和服务器端各自处理自己内部的子系统耦合;而客户端与服务器端的耦合简化为一个通信与数据通道。该通道用来传输通信请求和返回数据;


请求通信: 采用 Http / Tcp 协议

数据通道: 采用 Json, xml , 文本字符串,字节。 内部系统一般采用 Json 作为数据交换格式;系统间的互操作则采用XML 来规范; 文本字符串是最一般的形式, 字节是最底层的形式。

 

 


二、 架构演变

最轻的架构: jQuery + Servlet + ajax

       在客户端使用 jQuery发送 ajax 请求给Java 服务端的 Servlet 进行处理, Servlet 仅仅返回数据给客户端进行渲染。 该架构有效地分离了前端展示和后台请求处理,同时又保持了最轻的复杂性, 只需要学会编写 Servlet 及使用 jQuery , 就能构建简单的应用。

       如果只是做个人创意演示, 可以采用该架构, 快速实现自己的创意功能。 Servlet 是Java web 应用的基础技术,jQuery 则是前端开发的简单易用的利器。

 

后台架构演变:

Ø  逻辑与页面的分离: JSP/Servlet 

       JSP 实现了页面逻辑与外观的分离,但是, 前端子系统与后台子系统仍然是紧密耦合的; 前端设计人员实际上只需要服务端返回的数据, 就可设计出非常专业的界面显示;

Ø  MVC 架构:Struts2(含Servlet,MVC) + JDBC

        用Servlet 来添加服务器功能是基本的选择,但在web.xml中配置大量的 Servlet 却不是最佳的选择。Struts2 在服务端实现了更丰富的MVC 模式, 将本来由应用决定的控制器从web容器中分离;

Ø  SSH 架构: Struts2(含Servlet,  MVC) + Spring (Ioc) + Hibernate (ORM,对象-关系映射)

        通常, 应用系统中需要预先创建一些单例对象, 比如 Controller,  Service, Dao, 线程池等, 可以引入 Spring Ioc 来有效地创建、管理和推送这些对象; 使用 Hibernate 来实现关系数据库的行与面向对象的属性之间的映射与联接, 以更好地简化和管理应用系统的数据库操作。SSH 可以说是 JavaWeb应用系统开发的三剑客。

Ø  SI 架构: SpringMVC(含Servlet, Ioc, MVC, Rest) + iBatis (Semi-ORM)

        过于复杂的架构会将人搞晕。因此,在适应需求的情况下, 尽量选择简单的架构,是明智之选。 这种架构使用面向资源的理念, 着重使用Spring作为MVC及应用基础服务设施, 同时使用 iBatis 来实现更简单灵活的ORM映射, 使之在可以理解和维护的范围内。

 

前端架构:

1.     Flash 架构: Flex + jQuery + JSP

       这是一种比较传统的前端架构,采用同步模式, Flex 承担大量的页面渲染工作, 并采用AMF协议与Java端进行通信, 而JSP 则可以用于更快速的页面显示。优点是: 经过考验的结构, 通常是值得信赖的; 缺点是, 由于采用同步模式, 在交互效果上可能不够流畅, 需要进行比较耗时的编译过程; 此外, Flex 基于浏览器插件运行,在调试方面有些麻烦。 

2.     MVC 架构: Extjs + jQuery

       这是一种比较现代的前端架构, 采用异步模式, Extjs4 可以实现前端子系统的MVC 分离, 对于可维护性是非常不错的支持; 此外, jQuery 可以作为有效的补充。优点: 异步, 快速, 对于企业内部的后台管理系统是非常好的选择。 缺点: Extjs4 的可定制性、可适应性可能难以适应各种特殊的需求,需要用其它组件来补充, 比如大数据量的绘制。对于互联网应用, 速度可能是致命伤。

 

三、  架构的选择

       不要去询问哪种架构更好, 更需要做的是清晰地定位项目目标,根据自己的具体情况来选择和定制架构。反复地尝试、观察和改进,反复磨炼技艺,这样才有助于设计水平的提升。

架构的选择通常有四种关注点:

1.     适用性: 是否适合你的项目需求。 架构有大有小, 小项目用小架构, 大项目用大架构;

2.     可扩展性: 该架构在需要添加新功能时,是否能够以常量的成本添加到现有系统中, 所做的改动在多大程度上会影响现有功能的实现(基本不影响,还是要大面积波及);

3.     便利性: 使用该架构是否易于开发功能和扩展功能, 学习、开发和测试成本有多大;

4.     复杂性: 使用该架构后, 维护起来的成本有多大。你自然希望能够写一条语句做很多事,使用各种成熟的组件是正确的方式,同时,在项目中混杂各种组件,也会提升理解和维护系统的复杂度。便利性和复杂性需要达到较好的平衡;

 

特殊的关注点:

譬如,应用需要支持高并发的情况, 需要建立一个底层的并发基础设施, 并向上层提供简单易用的接口,屏蔽其复杂性。

 

四、 架构演进的基本手段

架构并不是一成不变的, 在做出最初的架构之后,随着开发的具体情况和需求的变更, 需要对最初架构做出变更和改进。

架构演进的基本手段:

一致性, 隔离与统一管理, 螺旋式重构改进, 消除重复, 借鉴现有方案

1.     一致性: 确保使用统一模式来处理相同或相似的功能; 解决一次, 使用多次;

2.     模块化、隔离与统一管理: 对于整体的应用, 分而治之,将其划分为隔离性良好的模块,提供必要的通信耦合;对于特定的功能模块, 采用隔离手段,将其隔离在局部统一管理,避免分散在系统的各处;

3.     不断重构改进, 一旦发现更好的方式, 马上替换掉原有方式;

4.     尽可能重用,消除重复;

5.     尽可能先借鉴系统中已有方案并复用之;如果有更好方案可替换之;

 

       有一条设计准则是: 预先设计, 但不要过早设计。

       意思是说, 你需要对需求清楚的部分进行仔细的设计, 但是对于未知不清楚的需求,要坚持去理解它,但不要过早地去做出“预测性设计”; 设计必须是明确的、清晰的、有效的, 不能针对含糊的东西来设计。可以在后期通过架构演进来获得对后续需求的适应能力。


本文转载自:http://blog.csdn.net/lovesqcc/article/details/9472613

共有 人打赏支持
一别经年
粉丝 17
博文 173
码字总数 58546
作品 0
西安
程序员
三,JavaWeb之什么是JavaWeb

但是不要怕,学会JSP,servlet,Java就行了,其他的等开始开发后台了再慢慢一个一个撸过去就行了。下面是装13环节。这么多高大上的技术,必须知道他们的中文名才能装得下去是不?否则请脑补一...

zhanggong
2016/01/13
140
0
java技术路线

在技术方面无论我们怎么学习,总感觉需要提升自已,却又不知道从哪里着手,同时也不知道自己处于哪个水平。这时候就需要有清晰的指示图来指引我们,这样我们能清楚的知道我们在哪方面不足,以...

罗文浩
2015/11/26
193
1
java进阶之路

Java程序员 高级特性 反射、泛型、注释符、自动装箱和拆箱、枚举类、可变参数、可变返回类型、增强循环、静态导入 核心编程 IO、多线程、实体类、集合类、正则表达式、XML和属性文件 ·图形编...

旋转木马-千里马
2016/01/19
279
0
JavaWeb应用,在实际开发中常用的怎样一个架构设计呢?

各位大牛,可不可以分享一下下,实际开发JavaWeb应用的设计架构,比如持久层,业务层,控制层这些设计,怎样更加优秀呢?

18号
2013/07/09
114
1
课余时间技术方面晋级

javaWeb开源技术与框架 负载均衡 2015.11.27研究完成 ok、   工作流、   规则引擎   搜索引擎、   缓存引擎 、   任务调度、   身份认证   报表服务、   系统测试、   集群...

圣杰是也
2015/11/28
59
0
Java学习历程

一:入门阶段 学习目标:Java程序员 1: 熟悉jdk,jvm,eclipse,安装于配置jdk 2:熟悉并掌握java的基础语法,类,抽象类,接口,内部类等概念 3: java核心编程,如输入输出流,多线程,集合...

余丰文zmixed
2016/07/21
109
0
JAVAEE规范基础知识

JavaEE规范基础知识 本人博客文章网址:https://www.peretang.com/basic-knowledge-of-javaee-standard/ JavaEE简介 JavaEE,Java平台企业版,其提供了一个用于开发Web应用和企业应用的标准平...

PereTang
2017/04/26
0
0
.NET系列文章——近一年文章分类整理,方便各位博友们查询学习

由于博主今后一段时间可能会很忙(准备出书:《.NET框架设计—模式、配置、工具》,外加换了新工作),所以博客会很少更新; 在最近一年左右时间里,博主各种.NET技术类型的文章都写过,根据...

王清培
2014/03/02
0
0
Java开发手册及JavaWeb工程师的成长及实践(及进阶)

> 进阶 个人总结的一个中高级Java开发工程师或架构师需要掌握的一些技能- http://geek.csdn.net/news/detail/246999 成为一名合格软件工程师的7点建议- http://blog.csdn.net/dev_csdn/artic...

shareus
2016/03/03
0
0
作为一名Java开发工程师需要掌握的专业技能

在学习Java编程完之后,学员们面临的就是就业问题。作为一名Java开发工程师,企业在招聘的时候,也是有一定的标准的。 为了帮助大家更好的找到适合自己的工作,小编在这里分享了作为一名Jav...

IT范儿
2017/11/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
0
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
昨天
1
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
昨天
1
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
昨天
0
0
非常实用的IDEA插件之总结

1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...

Gibbons
昨天
1
0
Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...

TaoXu
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部