1 通常 Java Web 开发框架
举个例子,对于广告系统的来说, 我们先不管一些job,CACHE,config ... 这些优化,些框架和分层可以是这样的,
MVC的技术选型:
- V: FreeMarker vs JSP / Velocity
- C: SpringMVC vs Struts / Webwork
- M: SPRING/JPA/Hibernate vs iBatis
2 前端V的架构
前端开发刚兴起的阶段,前端开发人员的工作经常穿插在后端开发过程中担任辅助作用的,随着业务越来越复杂,前端必须有自己的开发框架和流程,使得后端专注于服务类的开发,前端专注于与用户交互类的开发。
WEB前端从概念上划分为三个层次:结构、表现、和行为。三层相对独立,互不影响。在物理上层面上分别对应HTML、CSS、JS三种不同的的文件格式。
- HTML:负责定义网页的结构,内容
- CSS:负责内容的展现方式
- JS:负责网页关于动态的行为反应
好的层次划分对前端的开发也很关键。显示内容问题的唯一来源应该是html文件定义的,内容展示问题的唯一来源应该是CSS文件定义的,行为问题的唯一来源应该是javascript文件定义的,各司其职相互独立。但是他们是相关的,因为行为和样式无法与结构分离,必须写在同一个文件里。这种情况下,首先还是你要把行为和样式从html标签中分开,然后在html文件中引入。
实际的开发结构是这样的:
前端开发的核心是HTML + CSS + JavaScript。本质上它们构成一个MVC框架,即HTML作为信息模型(Model),CSS控制样式(View),JavaScript负责调度数据和实现某种展现逻辑(Controller)。
1)结构层
在java领域,表现层技术主要有三种:jsp、freemarker、velocity。
(1) jsp(Java Server Pages)
它是在传统的网页HTML文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),它实现Html语法中的java扩展(以 <%, %>形式)。从而形成JSP文件,后缀名为(.jsp)。因为java具有跨平台特点, 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。JSP与Servlet一样,是在服务器端执行的,最终都要变.class文件,通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
优点:
- 可以写java代码
- 支持jsp标签(jsp tag)
- 支持表达式语言(el)
- 官方标准,用户群广,丰富的第三方jsp标签库
- 性能良好,jsp编译成class文件执行,有很好的性能表现
缺点:
- 编写java代码,如使用不当容易破坏mvc结构。
(2) Freemarker
它生成静态页面,首先需要使用自己定义的模板页面,这个模板页面可以是最最普通的html,也可以是嵌套freemarker中的 取值表达式, 标签或者自定义标签等等,然后后台读取这个模板页面,解析其中的标签完成相对应的操作, 然后采用键值对的方式传递参数替换模板中的的取值表达式,做完之后 根据配置的路径生成一个新的html页面, 以达到静态化访问的目的。
模板+数据模型=输出,模板只负责数据在页面中的表现,不涉及任何的逻辑代码,而所有的逻辑都是由数据模型来处理的。用户最终看到的输出是模板和数据模型合并后创建的。
FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或者其他。
优点:
- 可以彻底的分离表现层和业务逻辑,使用JSP 开发过程中在页面中大量的存在业务逻辑的代码,使得页面内容凌乱,在后期大量的修改维护过程中就变得非常困难。FreeMarker根本不支持Java代码。
- 可以提高开发效率,JSP在第一次执行的时候需要转换成Servlet类,开发阶段进行功能调适时,需要频繁的修改JSP,每次修改都要编译和转换 。FreeMarker模板技术不存在编译和转换的问题,开发过程中,后端不必在等待界面设计开发人员完成页面原形后,再来开发程序。
- 对jsp标签支持良好
- 内置大量常用功能,比如html过滤,日期金额格式化等等
- 使用表达式语言 (EL)
缺点:
- 不是官方标准
- 用户群体和第三方标签库没比jsp丰富
使用FreeMarker后,作为界面开发人员,只专心创建HTML文件、图像以及Web页面的其他可视化方面,不用理会数据;而程序开发人员则专注于系统实现,负责为页面准备要显示的数据。
还有一些像velocity这样较早出现的用于代替jsp的模板语言 ... ...
2) 表现层CSS
结构搭建之后,就是为他们添加样式表属性。它实现的是页面内容和现实样式分离,所有的CSS都是非必需的,就算无法应用CSS或CSS冲突,网页也能够正常访问。
为了管理的方便,可以将不同样式进行拆分,比如可以拆分为全局样式,结构布局样式,色彩样式,文字样式和重置样式。css在开发时代码采用了规范的形式,比如有注释,缩进等,这样,这些文件的大小比较大,为了减少网络流量,提高网页的下载速度,一般发布时需要对javascript和css进行压缩处理,我们将样式文件进行合并压缩,目的是减少与服务器交互的时间和次数。如http://www.jb51.net/tools/cssyasuo.shtml可以在线进行压缩。
样式混合使用选择:
- 有关整个网站统一的样式代码,放置在独立的样式文件中.css
- 某些样式不同的页面,除了链接外部样式文件,还需要自定义的样式
- 某张网页中,部分内容如果需要一种不同,采用内行样式
3) 行为层 javaScript
常见的也是最有名的javascript 框架,其实准确来说应该是库:
(http://www.ibm.com/developerworks/cn/web/1404_wangfx_jsframeworks/)
-
jQuery
jQuery 是目前用的最多的前端 JAVASCRIPT 类库,它是比较轻量级的类库,对 DOM 的操作也比较方便到位,支持的效果和控件也很多。同时,基于 jQuery 有很多扩展项目,包括 jQuery UI(jQuery 支持的一些控件和效果框架)、jQuery Mobile(移动端的 jQuery 框架)、QUnit(JavaScript 的测试框架)。这些补充使得 jQuery 框架更加完整,而且这些扩展与目前的框架基本都是兼容的,可以交叉使用,使得前端开发更加丰富。
-
Ext
相比 jQuery,Ext JS 更重量级,有几个兆的文件,使得 Ext 在开发中成为的弊端和累赘。但是,另一方面,在 Ext JS 庞大的文件背后是 Ext JS 强大的功能。Ext JS 的控件和功能可以说强大和华丽到的程度。图表、菜单、特效,Ext JS 的控件库非常丰富,同时它的交互也非常强大,独立靠 Ext JS 几乎就可以取代控制层完成于客户的交互。强大的功能,丰富的控件库,华丽的效果也使得 Ext JS 成为内网开发利器。