java

位置:IT落伍者 >> java >> 浏览文章

常用的Java Web框架简介


发布日期:2022年03月06日
 
常用的Java Web框架简介

Web框架是人们在使用某种语言编写Web应用服务端时关于架构的最佳实践

有些Web框架是从实际的Web项目抽取出来的也就是说做一个具体的应用项目时采取的架构比较理想就把这部分和领域无关而仅和Web的请求和响应处理有关的设计拿出来形成一个基础在开发别的应用项目的时候则可以从这基础做起让开发者更关注领域问题而不是Web的请求和响应的控制

也有些Web框架是直接设计出来的很多Web框架在设计的时候也都借鑒了别的框架吸取优点修改不足并根据自己的框架的定位在特定方面有自己的发挥形成了自己的特点比如有的web框架追求的是松耦合性层次结构之间都不密切绑定有的Web框架则追求敏捷性强调约定而不是配置

Java 的 Web框架虽然各不相同但基本也都是遵循特定的路数的使用Servlet或者Filter拦截请求使用MVC的思想设计架构使用约定XML或 Annotation实现配置运用Java面向对象的特点面向抽象实现请求和响应的流程支持JspFreemarkerVelocity等视图

JSF

优点

Java EE标准这意味着有很大的市场需求和更多的工作机会

上手快速并且相对容易

有大量可用的组件库

缺点

大量的JSP标签

对REST和安全支持不好

没有一个统一的实现既有SUN的实现又有Apache的实现——MyFaces

国内的OperaMasks还支持AJAX以及有开发工具 支持

Spring MVC

优点

对覆盖绑定(overriding binding)验证(validation)等提供生命周期管理

与许多表示层技术/框架无缝集成JSP/JSTLTilesVelocityFreeMarkerExcelXSLPDF 等

便于测试——归功于IoC

缺点

大量的XML配置文件

太过灵活——没有公共的父控制器

没有内置的Ajax支持

Stripes

优点

不需要书写XML配置文件

良好的学习文档

社区成员很热心

缺点

社区比较小

不如其他的项目活跃

ActionBean里面的URL是硬编码的

Struts

优点

架构简单——易于扩展

标记库很容易利用FreeMarker或者Velocity来定制

基于控制器或者基于页面的导航

缺点

文档组织得很差

对新特征过分关注

通过Google搜索到的大多是Struts x的文档

Tapestry

优点

一旦学会它将极大地提高生产率

HTML模板——对页面设计师非常有利

每出一个新版本都会有大量的创新

缺点

文档过于概念性不够实用

学习曲线陡峭

发行周期长——每年都有较大的升级

Wicket

优点

对Java开发者有利(不是Web开发者)

页面和显示绑定紧密

社区活跃——有来自创建者的支持

缺点

HTML模板和Java代码紧挨着

需要对OO有较好的理解

Wicket逻辑——什么都用Java搞定

在Java的Web框架中我使用过StrutsStruts试用过StripesWicket了解过JSFSpringMVC以我使用的经验我觉得看一个Java Web框架应看看下面几个方面

设计理念

一个框架设计出来应该有一个基本的思路它为什么要要被设计出来?有的框架的目标 就是提高效率有的框架的目标的给用户充分的选择有的框架的目标是充分了解实际需求给用户一个尽量合理的默认选择有的框架是要给使用者开发桌面程序的感觉应该说一个好的框架应该是实现了预期目标体现出了自己的设计理念的

设计的合理性

设计的合理性表现在框架在一些关键问题上的处理比如灵活性和敏捷性之间的权衡硬编码和文本配置之间的权衡灵活性指的是可以适应用户多样的需求很特殊的要求也能得到支持有的框架的实现基于太多的约定使得用户只能遵循而敏捷性指的是用户在解决绝大多数常规问题的时候能尽量少做工作提高效率框架设计者只能在这两者见达到一个平衡点权衡的怎么样就很见水平了硬编码和文本配置之间的权衡也很有意思文本配置的意义在于Java是一个编译语言强调代码的封闭讲究扩展而不是修改这种情况下文本配置信息可以很方便的在不修改程序的情况下改变程序行为但是随着一些灵活的脚本语言实现的 Web框架的出现人们发现在这样的框架中脚本语言即做程序编码语言也做配置语言还做视图上的标记语言这使我们对Java实现的框架有了一番新的审视既然配置文件并没有消除对程序的修改为什么不能在应编码上下下功夫呢?

设计的平衡性

设计的平衡性指的是框架在设计流程中各阶段各层次的实现方式时所达到的上述权衡(灵活性和敏捷性之间的权衡等)应该是具有一致的水平一个在控制上过分灵活而视图上具有非常大限制的框架是不能算做一个好的框架的

框架真的解放了开发者吗

框架的目的是让开发者把更多的精力放在领域问题而非Web的请求和响应的处理问题上而事实上框架都做到这一点了吗?不可否认框架的使用提高代码的可维护性但是框架在解放开发者这点上就未必了有时还给开发者带来了额外的负担事实上直接使用Servlet只要维持好代码风格一样可以很有效率当然直接使用Servlet的灵活性就不用说了

在我接触的Web框架中我最推崇的是Struts设计优雅偏重灵活也基本不造成额外的负担当然这些评价是和我参与的项目的规模有关的其他规模的项目Struts就未必合适了我希望Struts能在下面几个方面有些改善

在提供文本配置方式的基础上给一个约定配置的方式让开发者在大多数情况下可以不配置

配置也支持硬编码因为有时候维护可修改的硬编码是很有效率的

在拦截请求上能借鑒下RORDjango的思路适应新的Url的需求考虑大家对?后添加属性的回避支持带占位符的Url

上一篇:JVM优化:缩短eclipse的启动时间

下一篇:myeclipse导入项目后中文乱码