Web框架是人们在使用某种语言编写Web应用服务端时关于架构的最佳实践。
有些Web框架是从实际的Web项目抽取出来的,也就是说,做一个具体的应用项目时,采取的架构比较理想,就把这部分和领域无关,而仅和Web的请求和响 应处理有关的设计拿出来,形成一个基础,在开发别的应用项目的时候则可以从这基础做起,让开发者更关注领域问题,而不是Web的请求和响应的控制。
也有些Web框架是直接设计出来的,很多Web框架在设计的时候也都借鉴了别的框架,吸取优点,修改不足,并根据自己的框架的定位,在特定方面有自己的发 挥,形成了自己的特点,比如有的web框架追求的是松耦合性,层次,结构之间都不密切绑定,有的Web框架则追求敏捷性,强调约定而不是配置。
Java 的 Web框架虽然各不相同,但基本也都是遵循特定的路数的:使用Servlet或者Filter拦截请求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向抽象实现请求和响应的流程,支持Jsp,Freemarker,Velocity等视 图。

JSF
优点:
Java EE标准,这意味着有很大的市场需求和更多的工作机会
上手快速并且相对容易
有大量可用的组件库
缺点:
大量的JSP标签
对REST和安全支持不好
没有一个统一的实现。既有SUN的实现,又有Apache的实现——MyFaces。
国内的OperaMasks还支持AJAX,以及有开发工具 支持

Spring MVC
优点:
对覆盖绑定(overriding binding)、验证(validation)等提供生命周期管理
与许多表示层技术/框架无缝集成:JSP/JSTL、Tiles、Velocity、FreeMarker、Excel、XSL、PDF 等
便于测试——归功于IoC
缺点:
大量的XML配置文件
太过灵活——没有公共的父控制器
没有内置的Ajax支持

Stripes
优点:
不需要书写XML配置文件
良好的学习文档
社区成员很热心
缺点:
社区比较小
不如其他的项目活跃
ActionBean里面的URL是硬编码的

Struts 2
优点:
架构简单——易于扩展
标记库很容易利用FreeMarker或者Velocity来定制
基于控制器或者基于页面的导航
缺点:
文档组织得很差
对新特征过分关注
通过Google搜索到的大多是Struts 1.x的文档

Tapestry
优点:
一旦学会它,将极大地提高生产率
HTML模板——对页面设计师非常有利
每出一个新版本,都会有大量的创新
缺点:
文档过于概念性,不够实用
学习曲线陡峭
发行周期长——每年都有较大的升级

Wicket
优点:
对Java开发者有利(不是Web开发者)
页面和显示绑定紧密
社区活跃——有来自创建者的支持
缺点:
HTML模板和Java代码紧挨着
需要对OO有较好的理解
Wicket逻辑——什么都用Java搞定
在Java的Web框架中,我使用过Struts1,Struts2,试用过Stripes,Wicket,了解过JSF,SpringMVC。以我使用的经验,我觉得看一个Java Web框架应看看下面几个方面:
1.设计理念
一个框架设计出来应该有一个基本的思路,它为什么要要被设计出来?有的框架的目标 就是提高效率,有的框架的目标的给用户充分的选择,有的框架的目标是充分了解实际需求,给用户一个尽量合理的默认选择,有的框架是要给使用者开发桌面程序的感觉。应该说,一个好的框架应该是实现了预期目标,体现出了自己的设计理念的。
2.设计的合理性
设计的合理性表现在框架在一些关键问题上的处理,比如灵活性和敏捷性之间的权衡,硬编码和文本配置之间的权衡。灵活性指的是可以适应用户多样的需求,很特 殊的要求也能得到支持,有的框架的实现基于太多的约定,使得用户只能遵循。而敏捷性指的是用户在解决绝大多数常规问题的时候,能尽量少做工作,提高效率。 框架设计者只能在这两者见达到一个平衡点,权衡的怎么样,就很见水平了。硬编码和文本配置之间的权衡也很有意思,文本配置的意义在于Java是一个编译语 言,强调代码的封闭,讲究扩展而不是修改,这种情况下文本配置信息可以很方便的在不修改程序的情况下改变程序行为,但是随着一些灵活的脚本语言实现的 Web框架的出现,人们发现在这样的框架中,脚本语言即做程序编码语言,也做配置语言,还做视图上的标记语言,这使我们对Java实现的框架有了一番新的 审视,既然配置文件并没有消除对程序的修改,为什么不能在应编码上下下功夫呢?
3.设计的平衡性
设计的平衡性指的是,框架在设计流程中各阶段,各层次的实现方式时,所达到的上述权衡(灵活性和敏捷性之间的权衡等)应该是具有一致的水平。一个在控制上过分灵活,而视图上具有非常大限制的框架是不能算做一个好的框架的。
4.框架真的解放了开发者吗
框架的目的是让开发者把更多的精力放在领域问题,而非Web的请求和响应的处理问题上。而事实上框架都做到这一点了吗?不可否认,框架的使用提高代码的可 维护性,但是框架在解放开发者这点上就未必了,有时还给开发者带来了额外的负担。事实上,直接使用Servlet,只要维持好代码风格,一样可以很有效 率,当然,直接使用Servlet的灵活性就不用说了。
在我接触的Web框架中,我最推崇的是Struts2,设计优雅,偏重灵活,也基本不造成额外的负担,当然这些评价是和我参与的项目的规模有关的,其他规模的项目Struts2就未必合适了。我希望Struts2能在下面几个方面有些改善:
1.在提供文本配置方式的基础上给一个约定配置的方式,让开发者在大多数情况下可以不配置。
2.配置也支持硬编码,因为有时候维护可修改的硬编码是很有效率的。
3.在拦截请求上,能借鉴下ROR,Django的思路,适应新的Url的需求,考虑大家对“?”后添加属性的回避,支持带占位符的Url。

常用的Java Web框架简介相关推荐

  1. Java Web框架简介

    Java Web,是用Java技术来解决相关web互联网领域的技术总和.web包括:web服务器和web客户端两部分.Java在客户端的应用有java applet不过现在使用的很少,Java在服务器 ...

  2. 轻量级 Java Web 框架技术选型

    2019独角兽企业重金招聘Python工程师标准>>> 本文是<轻量级 Java Web 框架架构设计>的系列博文. 前面已对该 Java Web 框架做了一些简要描述, ...

  3. java web框架struts_Struts框架在Web开发中的应用

    <Struts框架在Web开发中的应用>由会员分享,可在线阅读,更多相关<Struts框架在Web开发中的应用(29页珍藏版)>请在人人文库网上搜索. 1.Struts,框架在 ...

  4. java web spark_spark-微型的Java Web框架 Spark Framework

    导读热词 Spark是一个微型的Java Web框架,它的灵感来自于Sinatra,它的目的是让你以最小的代价创建出一个Java Web应用. Implement CORS in Spark -spa ...

  5. Java web框架

    Java web框架综述 Java Web设计框架:Web应用的Java框架综述 特金德·辛格博士,助理教授, 旁遮普巴廷达Baba Farid学院计算机科学系(印度) 摘要:在本文中,我将Web设计 ...

  6. Java Web框架学习

    这是黄勇的开源框架 https://gitee.com/huangyong/smart-framework 这是非常好的学习框架,有利于了解Spring MVC这类框架的原理. 框架特点 1.它是一款 ...

  7. 读书杂谈-《架构探险:从零开始写Java Web框架》

    爱买书,虽然读书懒惰的很,但最近还是陆陆续续的买了五六本书的样子,包括:核心技术.深入虚拟机.并发编程等,这些书中我能读的进去,且通俗易懂的当属这本黄勇写的<架构探险:从零开始写Java Web ...

  8. Python之web开发(一):python常用搭建网站的框架简介

    谈及WEB开发,使用java来的确要比python多的多.但实际上还是有很多大型的网站都是使用python搭建起来的,如国外最大的视频分析网站YouTube.国内的豆瓣.搜狐以及知乎等都是使用pyth ...

  9. java web框架 django_django——web框架简介

    1.web应用 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件. 应用程序有两种模式C/S.B/S.C/S是客户 ...

最新文章

  1. C++知识点5——迭代器简述
  2. OpenMV中AprilTag识别Python程序源码
  3. Algorithm之MC:基于Matlab实现通过蒙特卡洛方法模拟二维布朗运动
  4. 常见的加密和解密算法—MD5
  5. Maven国内镜像 Maven阿里云镜像
  6. 成绩排序(信息学奥赛一本通-T1178)
  7. MySQL的五种日期和时间类型
  8. 关于MFC里面位图相关的操作
  9. php获取所有url地址_PHP_php 获取完整url地址,主要是获取到地址栏的一些信 - phpStudy...
  10. 基于阈值分解的多级中值滤波-附代码
  11. System Security Services Daemon(SSSD)系统安全服务守护进程
  12. 奇怪的信 c语言 整数位数为偶数求和
  13. 调试bootmgrwinload vistawin7 x86x64
  14. 交换机的Vlan技术 以及Vlan隔离和 端口隔离区别
  15. 如何打造团队的代码风格统一以及开发效率的提升
  16. 元素的显示、隐藏、遮罩
  17. python选取tensor某一维_超简单!pytorch入门教程(一):Tensor
  18. 单片机遥控开关mos管
  19. 未来计算机网络技术层面的发展,计算机网络技术的未来发展趋势和新媒体影响...
  20. python批量检索文献_基于Python的文献检索系统设计与实现

热门文章

  1. [KITTI] EVO评价前端里程计精度
  2. 【idm】idm突破cookie封锁 (解决http:1.1 403 forbidden)(附charles使用教程)
  3. 【C++ STL应用与实现】23: 如何使用std::mem_fn (since C++11)
  4. 在前端中清除IE浏览器缓存问题
  5. 微机原理_微处理器架构
  6. 从零开始研发GPS接收机连载——9、跟踪调试之凤凰涅槃
  7. 【Multisim仿真】光控报警电路
  8. 【吊打面试官系列】APP测试常见面试题解析
  9. python break语句作用_Python break语句详解
  10. FileReader和FileOutputStream