目录

java-web-前端开发框架和流程

java web 前端开发框架和流程

http://wiki.sankuai.com/download/attachments/117783218/image2014-12-8%201%3A39%3A9.png?version=1&modificationDate=1417973843000&api=v2

举个例子,对于广告系统的来说, 我们先不管一些job, ,config  … 这些优化,些框架和分层可以是这样的,

http://wiki.sankuai.com/download/attachments/117783218/image2014-12-8%202%3A14%3A41.png?version=1&modificationDate=1417975975000&api=v2

MVC的技术选型:

  • V: FreeMarker    vs    JSP / Velocity
  • C: SpringMVC     vs    Struts / Webwork
  • M: /JPA/Hibernate    vs    iBatis

前端开发刚兴起的阶段,前端开发人员的工作经常穿插在后端开发过程中担任辅助作用的,随着业务越来越复杂,前端必须有自己的开发框架和流程,使得后端专注于服务类的开发,前端专注于与用户交互类的开发。

WEB前端从 概念上划分为三个层次:结构、表现、和行为 。三层相对独立,互不影响。在 物理上层面上分别对应HTML、CSS、JS三种不同的的文件格式 。

  • HTML:负责定义网页的结构,内容
  • CSS:负责内容的展现方式
  • JS:负责网页关于动态的行为反应

http://wiki.sankuai.com/download/attachments/117783218/image2014-12-8%2014%3A34%3A19.png?version=1&modificationDate=1418020352000&api=v2

好的层次划分对前端的开发也很关键。 显示内容问题的唯一来源应该是html文件定义的,内容展示问题的唯一来源应该是CSS文件定义的,行为问题的唯一来源应该是javascript文件定义的,各司其职相互独立。但是他们是相关的,因为行为和样式无法与结构分离,必须写在同一个文件里。这种情况下,首先还是你要把行为和样式从html标签中分开,然后在html文件中引入 。

实际的开发结构是这样的:

http://wiki.sankuai.com/download/attachments/117783218/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202014-12-08%20%E4%B8%8B%E5%8D%883.03.15.png?version=1&modificationDate=1418022166000&api=v2

前端开发的核心是HTML + CSS + JavaScript。 本质上它们构成一个MVC框架 ,即HTML作为信息模型(Model),CSS控制样式(View),JavaScript负责调度数据和实现某种展现逻辑(Controller)。

在java领域,表现层技术主要有三种:jsp、freemarker、velocity。

它是在传统的网页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结构。

它生成静态页面,首先需要使用自己定义的模板页面,这个模板页面可以是最最普通的html,也可以是嵌套freemarker中的 取值表达式, 标签或者自定义标签等等,然后后台读取这个模板页面,解析其中的标签完成相对应的操作, 然后采用键值对的方式传递参数替换模板中的的取值表达式,做完之后 根据配置的路径生成一个新的html页面, 以达到静态化访问的目的。

模板+数据模型=输出,模板只负责数据在页面中的表现,不涉及任何的逻辑代码,而所有的逻辑都是由数据模型来处理的。用户最终看到的输出是模板和数据模型合并后创建的。

FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或者其他。

优点:

  • 可以彻底的分离表现层和业务逻辑,

    使用JSP 开发过程中在页面中大量的存在业务逻辑的代码,使得页面内容凌乱,在后期大量的修改维护过程中就变得非常困难。

    FreeMarker根本不支持Java代码。

  • 可以提高开发效率, JSP在第一次执行的时候需要转换成Servlet类,开发阶段进行功能调适时,需要频繁的修改JSP,每次修改都要编译和转换 。 FreeMarker模板技术不存在编译和转换的问题,开发过程中,后端不必在等待界面设计开发人员完成页面原形后,再来开发程序。

  • 对jsp标签支持良好

  • 内置大量常用功能, 比如html过滤,日期金额格式化等等

  • 使用表达式语言 (EL)

缺点:

  • 不是官方标准
  • 用户群体和第三方标签库没比jsp丰富

使用FreeMarker后,作为界面开发人员,只专心创建HTML文件、图像以及Web页面的其他可视化方面,不用理会数据;而程序开发人员则专注于系统实现,负责为页面准备要显示的数据。

还有一些像velocity这样较早出现的用于代替jsp的模板语言 … …

结构搭建之后,就是为他们添加样式表属性。 它实现的是页面内容和现实样式分离,所有的CSS都是非必需的,就算无法应用CSS或CSS冲突,网页也能够正常访问。

为了管理的方便,可以将不同样式进行拆分,比如可以拆分为全局样式,结构布局样式,色彩样式,文字样式和重置样式。c ss在开发时代码采用了规范的形式,比如有注释,缩进等,这样,这些文件的大小比较大,为了减少网络流量,提高网页的下载速度,一般发布时需要对javascript和css进行压缩处理,

我们将样式文件进行合并压缩,目的是减少与服务器交互的时间和次数 。如 可以在线进行压缩。

样式混合使用 选择 :

  • 有关整个网站统一的样式代码,放置在独立的样式文件中.css
  • 某些样式不同的页面,除了链接外部样式文件,还需要自定义的样式
  • 某张网页中,部分内容如果需要一种不同,采用内行样式

http://wiki.sankuai.com/download/attachments/117783218/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202014-12-08%20%E4%B8%8A%E5%8D%8811.37.51.png?version=1&modificationDate=1418009796000&api=v2

常见的也是最有名的javascript 框架,其实准确来说应该是库:

( )

  • jQuery

jQuery 是目前用的最多的前端 类库,它是比较轻量级的类库,对 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 成为内网开发利器。

  • YUI

YUI 也有自己的 JavaScript 类库,DOM 操作和效果处理也还比较方便,功能和控件也很齐全,但是相比 jQuery 和 Ext JS 显得比较中庸一些。随着 Yahoo的没落,YUI 也渐渐的被淡化。

目前 前端框架主要采用 JavaScript+CSS 模式 。基于上面的几种javascript库,我们可以基于JQuery框架搭建起一个java web前端系统的框架。如丛林的前端就是COS-UI+jQuery搭建起来的,再利用插件ztree实现品类树在前端的展示。

JQuery能大大简化Javascript程序的编写,主要表现:

  • 定位元素
JS写法: document.getElementById("abc") jQuery写法: $("#abc") 通过id定位 $(".abc") 通过class定位 $("div") 通过标签定位
  • 改变元素的内容
JS写法: abc.innerHTML = " TEST "; jQuery写法: abc.html(" TEST ");
  • 显示隐藏元素
JS 写法: abc.style. DISPLAY = "none" ; abc.style. DISPLAY = " BLOCK " ; jQuery 写法: abc.HIDE(); abc. SHOW (); abc.TOGGLE();
  • 修改元素样式
JS写法: abc. STYLE .fontSize=size; jQuery写法: abc.css( 'font-size' , 20 );
  • Ajax
JS 自己创建对象,自己处理浏览器兼容等乱七八糟的问题,略去不表 jQuery $.get( "abc.php?a=1&b=2" , recall); postvalue = "a=b&c=d&abc=123" ; $. POST ( "abc.php" , postvalue, recall); FUNCTION recall(RESULT) { ALERT (result); //如果返回的是json,则如下处理 //result = eval('(' + result + ')'); // ALERT (result); }
  • 获得焦点
  • 为表单赋值
  • 获得表单的值
  • 设置元素不可用

前端开发流程:

http://wiki.sankuai.com/download/attachments/117783218/image2014-12-8%2015%3A57%3A22.png?version=1&modificationDate=1418025336000&api=v2

前端RD在开发团队位置(其 上游和下游 ):

http://wiki.sankuai.com/download/attachments/117783218/image2014-12-8%2016%3A14%3A30.png?version=1&modificationDate=1418026363000&api=v2