现下Java 流行的web开发框架中流行什么安全框架

框架_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
上传于|0|0|文档简介
&&软件编程
你可能喜欢developerWorks 社区
本文介绍了 Java 中安全模型框架,并用样例程序来讲解安全访问控制的使用。
, 高级软件工程师
刘进目前在 IBM STG 云计算团队从事云管理平台产品开发,拥有十年的 Java 应用开发经验,对 J2SE 和 J2EE 的相关应用开发比较熟悉。
作为一种诞生于互联网兴起时代的语言,Java 从一开始就带有安全上的考虑,如何保证通过互联网下载到本地的 Java 程序是安全的,如何对 Java 程序访问本地资源权限进行有限授权,这些安全角度的考虑一开始就影响到 Java 语言的设计与实现。可以说 Java 在这些方面的探索与经验,对后来的一些语言与产品都带来了积极影响。本篇文章中将介绍 Java 中安全模型,以及如何利用安全访问控制机制来实现一些特定目的。Java 中的安全模型在 Java 中将执行程序分成本地和远程两种,本地代码默认视为可信任的,而远程代码则被看作是不受信的。对于授信的本地代码,可以访问一切本地资源。而对于非授信的远程代码在早期的 Java 实现中,安全依赖于沙箱 (Sandbox) 机制。沙箱机制就是将 Java 代码限定在虚拟机 (JVM) 特定的运行范围中,并且严格限制代码对本地系统的资源访问,通过这样的措施来保证对远程代码的有效隔离,防止对本地系统造成破坏。如图 1 所示,图 1.JDK1.0 安全模型但如此严格的安全机制也给程序的功能扩展带来障碍,比如当用户希望远程代码访问本地系统的文件时候,就无法实现。因此在后续的 Java1.1 版本中,针对安全机制做了改进,增加了安全策略,允许用户指定代码对本地资源的访问权限。如图 2 所示,图 2.JDK1.1 安全模型在 Java1.2 版本中,再次改进了安全机制,增加了代码签名。不论本地代码或是远程代码,都会按照用户的安全策略设定,由类加载器加载到虚拟机中权限不同的运行空间,来实现差异化的代码执行权限控制。如图 3 所示,图 3.JDK1.2 安全模型当前最新的安全机制实现,则引入了域 (Domain) 的概念。虚拟机会把所有代码加载到不同的系统域和应用域,系统域部分专门负责与关键资源进行交互,而各个应用域部分则通过系统域的部分代理来对各种需要的资源进行访问。虚拟机中不同的受保护域 (Protected Domain),对应不一样的权限 (Permission)。存在于不同域中的类文件就具有了当前域的全部权限,如图 4 所示:图 4. 最新安全模型以上提到的都是基本的 Java 安全模型概念,在应用开发中还有一些关于安全的复杂用法,其中最常用到的 API 就是 doPrivileged。doPrivileged 方法能够使一段受信任代码获得更大的权限,甚至比调用它的应用程序还要多,可做到临时访问更多的资源。有时候这是非常必要的,可以应付一些特殊的应用场景。例如,应用程序可能无法直接访问某些系统资源,但这样的应用程序必须得到这些资源才能够完成功能。针对这种情况,Java SDK 给域提供了 doPrivileged 方法,让程序突破当前域权限限制,临时扩大访问权限。下面内容会详细讲解一下安全相关的方法使用。Java 安全控制实现Java SDK 中与安全相关的类和接口都放在 java.security 包中,其中既包括访问控制配置及细粒度访问控制框架的实现,还包括签名和加解密的实现。本文中涉及到的安全访问控制主要与安全包中访问控制框架相关,这里面最常用的就是 AccessContorller 类。通过下图的描述,您可以了解 ACC(Access Contorller) 机制是如何运作的。在某一个线程的调用栈中,当 AccessController 的 checkPermission 方法被最近的调用程序(例如 A 类中的方法)调用时,对于程序要求的所有访问权限,ACC 决定是否授权的基本算法如下:1. 如果调用链中的某个调用程序没有所需的权限,将抛出 AccessControlException;2. 若是满足以下情况即被授予权限:a. 调用程序访问另一个有该权限域里程序的方法,并且此方法标记为有访问“特权”;b. 调用程序所调用(直接或间接)的后续对象都有上述权限。在上面例子的调用链中,假定 E 域和 F 域不具备 X 权限 (permission),而在 C.class 对应的 G 域具有 X 权限,同时 C 使用 X 权限的对外接口 Y 方法是通过 doPrivilege 方式实现。那么,B.class A.class 调用 Y 方法就都具备 X 权限。如果 Y 方法没有标注 doPrivilege,那么对 Y 方法的调用就不具备 X 权限。还有一种特殊的情况,就是访问控制上下文的继承问题。当一个线程创建另一个新线程时,会同时创建新的堆栈。如果创建新线程时没有保留当前的安全上下文,也就是线程相关的安全信息,则新线程调用 AccessController.checkPermission 检验权限时,安全访问控制机制只会根据新线程的上下文来决定安全性问题,而不会考虑其父线程的相应权限。这个清除堆栈的做法本身并不会给系统带来安全隐患,但它会使源代码,尤其是系统代码的编写容易出现错误。例如,对安全框架实现不熟悉编程人员可能会很自然地认为,子线程执行的信任代码继承了父线程执行的不可信任代码的安全限制特性。当从子线程内访问受控制的资源时,如果父线程的安全上下文信息并未保存,就会导致意外的安全漏洞。因为丢失的父线程中安全限制数据会使子线程将资源传递给一些不可信任的代码。因此,在创建新线程时,必须确保利用父线程创建,或利用其他形式创建代码。总之,要保证让子线程自动继承父线程的安全性上下文,这样子线程中的后续 AccessController.checkPermission 调用就会考虑所继承的父线程的安全特性。需要注意是 AccessController 类的 checkPermission 方法将在当前执行线程的上下文,包括继承的上下文中进行安全检查。当这种安全检查只能在不同的上下文中进行时就会出现问题。意即,本应在一个线程上下文内部进行的安全检查,有时却需要在不同上下文中进行。例如,当一个线程将某个事件传给另一个线程时,如果所请求的事件服务要求访问某种安全受控资源,则为其请求事件服务的第二个线程将没有事件产生源线程相应的上下文来完成所需的访问控制决策。为解决这样的问题,Java 在 AccessController 类中提供了 getContext 方法和 AccessControlContext 对象。通过 getContext 方法可获取当前调用上下文的“快照 (snapshot)”,然后将其存放到返回的 AccessControlContext 对象中。调用的样例程序如下所示:AccessControlContext acc = AccessController.getContext();getContext 方法将当前上下文的快照信息捕获,然后执行程序就可以通过检查前后不同上下文中的信息,即比较快照上下文信息与本上下文信息,然后来做出对受控资源访问控制的决策。上面问题就可以如下方式来解决,当前一个线程把某个请求事件传给第二个线程时,同时捕获其上下文信息并将这些信息提供给后一个线程。略有不同的是,AccessControlContext 类本身的 checkPermission 方法可根据它自身携带的上下文信息来决定访问控制,而不是根据当前正在执行的线程上下文。因此必要时,后一个线程可直接通过调用前一个线程上下文快照本身的权限检查方法来执行相应的安全检查。如下,acc.checkPermission(permission),上述方法调用等同于在前一个线程的上下文中执行相同的安全检查,尽管访问控制检查实际上是在后一个线程中完成的。安全控制使用的代码实例上面关于安全控制使用的描述还是比较晦涩,下面将通过一个代码示例进行说明。在 Eclipse 开发环境中建立两个不同工程:projectX 和 projectY。我们会给 projectX 工程中的 bin 目录赋予写文件的权限,换句话说就是允许所有存在于此目录中的 class 文件可以自由的在 bin 目录中进行文件写操作。然后,我们会在 projectY 工程中调用 projectX 工程中的一个文件操作工具类。这个工具类提供两种类型接口,一种是特权访问方式,另外一种是普通访问方式。由于在 projectY 工程中的文件是不具备在 projectX 工程中 bin 目录的任何写权限,所以通过三种不同访问方式的调用结果,我们就可以很清楚地了解到 Java 中安全控制该如何使用。假定 ProjectX 的项目路径为 D:\workspace\projectX\ package learn.java.
import java.io.F
import java.io.IOE
import java.security.AccessControlE
import java.security.AccessC
import java.security.PrivilegedA
public class FileUtil {
// 工程 A 执行文件的路径
private final static String FOLDER_PATH = "D:\\workspace\\projectX\\bin";
public static void makeFile(String fileName) {
// 尝试在工程 A 执行文件的路径中创建一个新文件
File fs = new File(FOLDER_PATH + "\\" + fileName);
fs.createNewFile();
} catch (AccessControlException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
public static void doPrivilegedAction(final String fileName) {
// 用特权访问方式创建文件
AccessController.doPrivileged(new PrivilegedAction&String&() {
public String run() {
makeFile(fileName);
}假定 ProjectY 的项目路径为 D:\workspace\projectY\ package demo.
import java.io.F
import java.io.IOE
import java.security.AccessControlE
import learn.java.security.FileU
public class DemoDoPrivilege {
public static void main(String[] args) {
System.out.println("***************************************");
System.out.println("I will show AccessControl functionality...");
System.out.println("Preparation step : turn on system permission check...");
// 打开系统安全权限检查开关
System.setSecurityManager(new SecurityManager());
System.out.println();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
System.out.println("
Create a new file named temp1.txt via privileged action ...");
// 用特权访问方式在工程 A 执行文件路径中创建 temp1.txt 文件
FileUtil.doPrivilegedAction("temp1.txt");
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
System.out.println();
System.out.println("/////////////////////////////////////////");
System.out.println("Create a new file named temp2.txt via File ...");
// 用普通文件操作方式在工程 A 执行文件路径中创建 temp2.txt 文件
File fs = new File(
"D:\\workspace\\projectX\\bin\\temp2.txt");
fs.createNewFile();
} catch (IOException e) {
e.printStackTrace();
} catch (AccessControlException e1) {
e1.printStackTrace();
System.out.println("/////////////////////////////////////////");
System.out.println();
System.out.println("-----------------------------------------");
System.out.println("create a new file named temp3.txt via FileUtil ...");
// 直接调用普通接口方式在工程 A 执行文件路径中创建 temp3.txt 文件
FileUtil.makeFile("temp3.txt");
System.out.println("-----------------------------------------");
System.out.println();
System.out.println("***************************************");
}应用的安全访问控制策略文件 (MyPolicy.txt) 如下 , 假定安全策略文件放于 projectY 工程的根目录下: // 授权工程 A 执行文件路径中文件在本目录中的写文件权限
grant codebase "file:/D:/workspace/projectX/bin"
permission java.io.FilePermission
"D:\\workspace\\projectX\\bin\\*", "write";
};下面就可以运行程序了,您可以选择在 Eclipse 开发环境中直接运行,也可以通过命令行来执行。命令行执行如下所示,假定当前执行目录就是 projectY 的根目录。 java -Djava.security.policy=.\\MyPolicy.txt -classpath
D:\workspace\projectY\D:\workspace\projectX\bin demo.security.DemoDoPrivilege执行结果如下: ***************************************
I will show AccessControl functionality...
Preparation step : turn on system permission check...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Create a new file named temp1.txt via privileged action ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
////////////////////////////////////////
Create a new file named temp2.txt via File ...
java.security.AccessControlException: Access denied (java.io.FilePermission
D:\workspace\projectX\bin\temp2.txt write)
at java.security.AccessController.checkPermission(AccessController.java:108)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:533)
at java.lang.SecurityManager.checkWrite(SecurityManager.java:963)
at java.io.File.createNewFile(File.java:882)
at demo.security.DemoDoPrivilege.main(DemoDoPrivilege.java:32)
////////////////////////////////////////
----------------------------------------
create a new file named temp3.txt via FileUtil ...
java.security.AccessControlException: Access denied (java.io.FilePermission
D:\workspace\projectX\bin\temp3.txt write)
at java.security.AccessController.checkPermission(AccessController.java:108)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:533)
at java.lang.SecurityManager.checkWrite(SecurityManager.java:963)
at java.io.File.createNewFile(File.java:882)
at learn.java.security.FileUtil.makeFile(FileUtil.java:16)
at demo.security.DemoDoPrivilege.main(DemoDoPrivilege.java:43)
----------------------------------------
***************************************通过程序打印结果来看,当往 projectX 工程中 bin 目录创建 temp1.txt,temp2.txt,temp3.txt 文件时候,除了通过特权访问方式可以创建成功外,通过普通接口访问或者直接文件操作方式都会失败,失败的原因都是没有通过权限检查。对照前文所描述的权限检查规则,用一句话总结就是想访问安全资源,要么调用链上权限齐全,要么就要用特权。特权访问机制实际上就是给应用开后门的使用上需要小心,所以这也给代码实现带来新的考虑,开放范围一定要限定好,否则可能留下安全隐患。
参考 ,查看 Java 最新安全架构的文档。
查看 ,了解更多权限设置相关内容。
查看 ,了解安全策略文件使用。
查看 :在本文中,您将首先更多地了解 web 服务栈之间互操作性的安全问题。然后您将看到作者根据自己对本系列近期 10 余篇文章进行的研究,从正确性和可用性几个方面比较 Axis2、Metro 和 CXF 之间的不同。
查看 :在Spring Security 为使用 Spring 框架的 Web 应用提供了良好的支持。本文将详细介绍如何使用 Spring Security 框架为 Web 应用提供安全支持,实现用户认证和授权两个方面的安全增强。
查看 :本文介绍网络银行所普遍采用的安全技术和方案,将从数据和业务逻辑的两个角度详细地分析一般网络银行系统的安全需求,并据此引入以 PPDRR 为安全模型的安全设计方案。
:这里有数百篇关于 Java 编程各个方面的文章。
加入 。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。
developerWorks: 登录
标有星(*)号的字段是必填字段。
保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件。
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
选择您的昵称
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。
您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
标有星(*)号的字段是必填字段。
(昵称长度在 3 至 31 个字符之间)
单击提交则表示您同意developerWorks 的条款和条件。 .
所有提交的信息确保安全。
文章、教程、演示,帮助您构建、部署和管理云应用。
立即加入来自 IBM 的专业 IT 社交网络。
免费下载、试用软件产品,构建应用并提升技能。
static.content.url=/developerworks/js/artrating/SITE_ID=10Zone=Java technologyArticleID=853276ArticleTitle=Java 安全模型介绍publish-date=天极传媒:天极网全国分站
您现在的位置:
& &&Java开发中的10大最新安全风险
Java开发中的10大最新安全风险Yesky软件频道 17:09
  随着移动互联网的火爆,基于的开发变得愈加频繁和重要,但随之而来的是诸多开发过程中新的安全风险。将于9月24日在京举行的2013中国互联网安全大会OWASP web安全论坛上,著名安全专家,OWASP中国分会委员刘志乐将现场分享java开发中的10大最新安全风险。
  刘志乐是国内知名安全专家,现任于杭州安恒信息技术有限公司安全服务部总监,同时为OWASP中国分会委员,华东地区会负责人之一,浙江省信息系统安全协会安全技术专业委员会副主任。
  其在信息安全领域工作10余年,是资深的信息安全工程师,并且担任浙江省等级保护测评师工作,获得了CISP,ACCP软件工程师认证。在这10年里,主要从事信息安全实施规划、信息安全风险评估、信息安全服务、安全管理平台等方面工作。曾参与2008年第29届奥运会奥运安保工作,多次递交北京奥运会网站安全漏洞,并得以修复
  此次他出席ISC安全大会,将为大家分享java开发中结合最新的OWASP TOP 10(2013)安全风险,其中包括:
  Injection
  Broken Authentication and session Manager
  Insecure Direct Object References
  Security Misconfiguration
  Sensitive Data Exposure
  Missing Function Level Access Control
  Using Known Vulnerable Components
  Unvalated Redirects and Forwards
  通过自定义框架、esapi、shiro、Sanitizer 工程安全工程实践全面提升应用系统的安全性。
  “2013年中国互联网安全大会”是迄今为止国内规格最高、最具专业化、规模最大的一次以安全为主题的大型会议。除国内外顶尖安全专家、知名黑客外,还受到了OWASP、Gartner等知名国际安全机构的支持,知名会议SyScan360也将同期举行。有兴趣或立志在安全行业有所作为的个人或是团体,均可登录大会官网报名参加。地址:
(作者:佚名责任编辑:王玉平)
天极新媒体&最酷科技资讯扫码赢大奖
* 网友发言均非本站立场,本站不在评论栏推荐任何网店、经销商,谨防上当受骗!
Win10系统在Win8的基础上对界面、特性以及跨平台方面做了诸多优化。
手机整机DIY企业级
pc软件手机软件&>&&>&&>&&>&最流行的java web开发框架
最流行的java web开发框架
上传大小:466KB
最流行的Java web开发框架,java web框架是目前为止最完整、最强大、最时髦的框架,即使是华为、阿里巴巴、京东等也不例外 。
嵌到我的页面
<input type="text" value="">
综合评分:5(1位用户评分)
所需积分:1
下载次数:7
审核通过送C币
创建者:jerryshen
创建者:andy8921
创建者:jin80506
课程推荐相关知识库
上传者其他资源上传者专辑
开发技术热门标签
VIP会员动态
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
最流行的java web开发框架
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
software444
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:2016年7款最佳 Java 框架 - 开源中国社区
2016年7款最佳 Java 框架
英文原文:
is no doubt that Java is one of the programming languages that is most
in demand these days. Here, we have scooped a handful of good info about
trending frameworks that ease everyday lives of software developers
around the globe.As per a survey conducted by RebelLabs,
the media ally for the online Java User Group (Virtual JUG), the lineup
of best java frameworks for 2016 is the following:Source:&&for Zero TurnAround Inc.We
will not push you or make you jump to conclusions just based on the
comparison chart below, but we'll present you with the overview of each
concept, letting you analyze and contrast the differences and pick the
perfect match depending on your project.
毫无疑问,java 是目前最为流行的编程语言之一,这里我们挖掘出了一些比较受欢迎的框架的有效信息,它们可以减轻全球软件开发人员的日常工作。RebelLabs的一项调查显示,通过在线Java用户论坛(虚拟JUG)媒体联盟的调查统计,2016年度最佳Java框架阵容如下: &&&&&&& 数据来源:&for Zero TurnAround Inc. 我们不会仅仅基于上面图标的对比迫使你或让你草率作出结论,但是我们会给你介绍每个概念的概述,供你分析和对比他们之间的区别,然后根据你的项目选择最完美的匹配。
1. Spring MVCOld
but gold, Spring MVC is still ahead of the curve after more than a
decade since its first release. After its expansion to embrace complete
MVC framework, Spring kept on evolving adopting changes and turned into a
full-scale Java framework for Internet-facing applications, offering
software engineers a powerful toolkit for web application development
and application configuration as well as for security projects. Being
one of the most favored among programmers, Spring has a well-developed
ecosystem, offering a variety of add-ons to choose from: REST APIs or
SOAP web services, security (authentication and authorization,
encryption), etc. Another benefit of this choice is that a big company
of fellow developers who chose to use this particular Java framework,
too. Thus, they are ready to give you a helping hand with any query you
might have.Pros and ConsSpring is not nesting in
the top of the charts without reason. It is one of the best and most
well-known Java frameworks because of:Simplified injection of test data through the&use of POJOs.Enhanced modularity, resulting in better code readability.Loose coupling between different modules.Dependency Injection (DI) flexible use.Although
not a direct framework downside, regardless of the piles of reference
documentation, Spring MVC might be more than newbie Java devs can chew,
making the learning curve too steep. Thus, dealing with some parts of
this Java framework can be tough for if you bump into a&poorly
documented chunk of references. The info you find might be different
across versions.By the way, due to our engineers' great experience, Spring MVC is one of our most fancied frameworks.&
1. Spring MVC
自从10多年前的第一次发布之后,SpringMVC老当益壮,继续保持着领头羊的地位。在其完全拥抱 MVC框架之后,Spring 不断的发展与变化着,转变成了一个功能全面的面向互联网应用程序的Java框架, 它能提供给软件工程师的是一个用于web应用程序开发的强大工具集,以及针对安全项目的应用程序配置。作为程序员世界最受欢迎的一员,Spring所拥有有发育良好的生态提供了许许多多的附加选择: REST API 或者是 SOAP web 服务, 安全(认证和授权、加密)等等。这一选择的另一个优势就是大公司的开发者同行们也都在使用这个 Java 框架。因此,如果你有困难想要寻求帮助,他们随时都能给予援手。
Spring 高居榜首并不是没由来的。它能成为最好最知名的Java框架是因为:
简单的POJO测试数据注入方式。
增强过的模块化,因此拥有更好的代码可靠性。
不同模块之间解耦和。
能灵活运用的依赖注入(DI)。
不管文档有多少,Spring MVC都可能并非是一个Java开发的新手能掌控的,尽管这并不是框架的一个直接缺陷,但学习曲线真的是有点太陡了。因此,在碰到这个 Java 框架中文档相对比较缺乏的某些部分时,处理起来是会有点困难的。你找的信息如果版本不同,兴许也会有差异。顺便提一句,依据我们的工程师的至上经验,Spring MVC是我们最喜爱的框架之一。
2. Struts 2To
elaborate even more on existing Java frameworks that are widely used by
modern software engineers, we decided to refer to the successor of
Apache’s Struts 1, Struts 2. This Java framework is quite a find for
engineers who work with building contemporary Java EE web apps. The
Apache Software Foundation has equipped developers with an extensive
tool for creating enterprise-ready, web-facing applications, optimizing
the development process from the beginning to the final point and
post-go-live maintenance. This concept is the right choice if you sweat
over high-load systems such as&broadcasting portals.Testing
the written code takes less effort because of Struts 2's implemented
Action class – plain POJO objects. Coupling becomes easier with the
framework’s API, helping to tune Interceptors.Pros and ConsWhen
you ask yourself why you should consider Struts 2, consider the luxury
of not having to override or implement the Action class – it is already
in place! Repetitive setup code that IT engineers need to create for
several actions is no longer a concern because Interceptors take care of
it.However, you might get turned off by the weight of this Java framework: some programmers find it’s not agile enough to go for.&
2. Struts 2
为了更详细的阐述现代软件工程师广泛使用的现有Java框架,我们决定参考Apache的Struts 1后继版本Struts 2。这个Java框架对于使用构建当代Java EE Web应用程序的工程师来说是一个很好的选择。Apache软件基金会为开发人员提供了一个广泛的工具,用于创建企业级的面向Web的应用程序,开发过程的优化从开始贯彻到结束,还提供后期的维护。如果你还在为高负载系统(如广播门户)发愁,这个框架将是你的不二之选。
如果使用Struts 2实现Action类(普通POJO对象),那么测试编写的代码所需的工作量会较少。使用框架API,耦合变得更容易,有助于调整拦截器。
优点和缺点
当你问自己为什么要考虑Struts 2时,一定会想到不必重写或者不用实现Action类所带来的极大便利——这些功能它已具备!IT工程师为多个操作创建重复设置代码不再是一个问题,因为拦截器会处理它。
但是,你可能会因为这个Java框架的重量级而放弃这个框架:有一些程序员发现它不够灵活。
3. HibernateAlthough
not on RebelLabs’ list either, it is worth mentioning Hibernate when
debating the best Java framework. This mapping Java framework cracks
object-relational impedance mismatch issues by substituting persisting
DB accesses high-level object handling functions. With every enterprise
application being one of a kind, Hibernate is equipped with a great
feature suite that helps backend developers fine-tune data access layer.
This is an advanced ORM framework that lets you perform the database
operation on Java objects (entities). It is a persistence concept that
utilizes Hibernate cache to persist the data from the Java environment
to the&database.Pros and ConsHibernate allows
you to communicate with any database using tiny alterations in the code
you write, bridging the gap between objects and relational words. On top
of that:Oracle, Db2, or MySQL, Hibernate is DB independent.Caching mechanism to bug database with similar queries.N+1 or Lazy loading support.Despite
its obvious advantages, Hibernate does not permit multiple inserts, not
allowing some queries that JDBC does. In addition, this Java framework
might not be a good idea for small-scale projects that have fewer
3. Hibernate
尽管也没有位列 RebelLabs 的名单当中,但是在讨论最好的 Java 框架时, Hibernate 还是值得一提的。这个 Java 映射框架借助于将持续存在的数据库访问操作替换为高层次的对象处理功能,来解决对象-关系的不匹配问题。每一个企业应用程序的情况都不同,而Hibernate则拥有功能强大的工具套件来帮助后台开发人员对其数据访问层进行微调。这是一个高级的 ORM 框架,你可以用它来在 Java 对象(实体)上进行数据库操作。利用 Hibernate 缓存来将 Java 环境中的数据持久化到数据库是一个持久化的概念、
只要对你写的代码做点小修改,Hibernate 就可以帮助你同任何数据库进行通信, 它弥合对象和关系词之间的鸿沟。最重要的是:
不管是 Oracle, Db2, 或者是 MySQL, Hibernate 是 DB 独立的。
缓存机制能对类似的查询操作进行优化。
支持 N+1 或者懒加载。
尽管有其显著的优势,但Hibernate并不允许多次插入操作,也不支持一些 JDBC 能支持的查询操作。此外,如果是只有几个表的小规模的项目,采用这个Java框架也许并不是一个好主意。
4. JSFBeing
a part of Java EE, JavaServer Faces is supported by Oracle. Although
this one is not the best frameworks for speedy Java development, it is
easy to utilize because of great documentation provided by Oracle.
Additionally, until you leave the Java EE environment, JSF has no
external dependencies, but plenty of capabilities instead. Rich
libraries and tools (including a toolset for easy user interface
creation) become a magic wand that can back you up no matter how complex
the application might seem.Pros and ConsAs
mentioned, JSF is an integral part of Java EE. Thus, developers draw on
an IDE software suite as well as a prime level of support from
an&industry-leading vendor.On the contrary, JavaServer
Faces is too vast to easily comprehend for those whose prior experience
and skills in web development basics are not solid enough.
作为java EE的一部分,JavaServer Faces被Oracle所支持。虽然这不是一个可以进行快速java开发的最好框架,但它很容易使用,因为Oracle提供了大量文档。此外,除非你离开java EE环境,JSF不需要任何的外部依赖,而功能非常强大。它拥有丰富的库和工具(包括一个简单的用户界面生成工具),使之成为了一个神奇的魔法棒,无论应用程序可能看起来有多么复杂,它都可以给予你支持与帮助。
如前所述,JSF是java EE的一个组成部分。因此,开发者可以使用IDE的软件套件,以及来自业界领先的厂商提供的最高水平的支持。 相反,对于那些之前在网络开发方面所具有的经验和技能基础还不够牢固的人来说,JavaServer Faces还不太容易理解。
5. VaadinUsing
GWT for rendering the end web page, Vaadin became one of the uber
popular frameworks modern developers choose when creating applications
for business. Utilizing a well-known component-based approach, Vaadin
takes the burden off developer’s shoulder by communicating the changes
made to the browser. An extensive set of UI components, along with
varied widgets and controls, allows programmers to build cool
applications in no time.Pros and ConsBuilding
layout in Java, HTML or both, Vaadin gives an opportunity to bind data
using either MVC or MVP. Drag and drop support along with other
outstanding features simplifies the creation of single-page UIs for Java
applications.On the downside, a sluggish UI for a mobile app can be a concern since Vaadin sends back every event to the server.
当现代开发者创建商业应用程序,并使用GWT渲染终端网页时,Vaadin称得上是一个超级流行的框架。Vaadin利用一个众所周知的基于组件的方法,能够适应浏览器的变化,从而减轻了开发商的负担。它拥有一套扩展的用户界面组件,以及各种不同的部件和控件,可以让程序员在任何时候都可以建立一个很酷的应用程序。
通过在java或HTML中的开发布局,Vaadin提供了可以使用MVC或MVP进行数据绑定的方法。而且,拖放支持以及其他突出的特点简化了对java应用程序单页UI的创建。另一方面,由于Vaadin会向服务器发送回每一个事件,从而导致移动应用程序用户界面的反应迟钝,这是一个需要考虑的问题。
6. Google Web ToolkitGWT
is an another free Java framework allowing coders to create and
optimize sophisticated web-based apps. The GWT Software Development Kit
features core Java APIs and widgets for constructing apps compiled to
JavaScript after.Pros and ConsWith Google Web
Toolkit, you get single code base (both browser- and server-side
programming in Java) that eases up the development and debugging
processes. Simple integration with other technologies allows programmers
embed GWT widgets in web pages. Custom widget capability is another
benefit that can be created with the help of GWT.However,
if you are a web designer, GWT might be not the best Java framework to
it is not amiable to those favoring plain HTML and late dynamic
content placement.
6. Google Web Toolkit
GWT是另一个免费的java框架,它允许程序员创建和优化复杂的网络应用程序。GWT的软件开发工具包包括核心的java API和小部件,构建随后可以编译成JavaScript的应用程序。
使用谷歌网页工具包,你就可以通过单一的代码库(用java在浏览器和服务器端编程)来简化开发和调试的过程。通过与其他技术的简单集成可以使程序员在网页中嵌入GWT小部件。能够自定义部件的另一个好处是可以在GWT的帮助下创建。 然而,如果你是一个网页设计师,GWT可能不是最好的java框架选择;因为它对于创建普通的HTML以及后期的动态内容布局没有什么帮助。
7. GrailsThis
particular web framework is regarded as a dynamic tool enhancing
engineers’ productivity due to its opinionated APIs, sensible defaults,
as well as its convention-over-configuration paradigm. Seamless Java
integration makes this particular framework one of the top choices for
plenty of programmers worldwide. A suite of powerful features, such as
Spring-powered dependency injection and varied plug-ins, offer
everything needed to create modern web-based apps.Pros and ConsSpeedy
setup of a new project and scaffolding saves a lot of precious time for
coders. A huge library offers more than 900 of different
easy-to-install plug-ins. Despite the beauty of Grails, a full-stack
development Java framework, it has a bulky functionality covered by
Grails’ Object Relational Mapping, making it a relatively heavy piece of
这个独特的框架被视为是提升工程师生产效率的动态工具,因为其干脆的API设计,合理的默认值以及约定架构。与java的无缝集成使得这个框架成为世界上众多框架中的首选。一系列强大的特性,如基于sping的依赖注入和各式各样的插件,可以提供创建现代基于web的app的所有需要的东西。
可以快速搭建新项目,脚手架项目可以帮助节省大量宝贵时间。有一个庞大的插件库可以提供900多个容易安装的不同插件。抛开Grails的美好,对于一个全栈java开发框架,它的ORM涵盖了大量的功能,使得它成为相对的重量级软件。
So What to Choose?Choosing the
suitable concept among such a variety of popular Java frameworks for
2016 can be a cumbersome task, as each company sticks to its own ideas
on web-based and mobile app creation while selecting the winning
approach. No matter which exact framework you go for, bear in mind the
license, ease of installation, how active the network is, and
documentation at hand, etc. Depending on the project type, sometimes, it
is wise to have all the tools under one roof shaking things up, but
quite often it makes more sense to trim the fat and go for a lightweight
concept instead.Another question to ask is whether your
busy teammates are up for some learning and have spare time to allocate
to knowledge crunch. Often times it’s worth to simply hand over your
development to a remote team and get back a product ready for
monetization. Stay tuned and happy development!
其它翻译版本:2(点击译者名切换)
如何选择?在各种各样的,2016年流行的框架中选择适当的框架,是难以完成的任务。就像每个公司寻找盈利模式,并依据该模式来创造自己在web端和移动端需要坚守理念一样,都是非常困难的。无论你使用什么框架,谨记如下原则,所选框架需要具备,易于安装,社区活跃,文档丰富等特点。依赖项目类型不同,有时,明智的选择是只使用一家公司或组织下的一套框架来解决需求,但通常更有意义的是将重量级框架以轻量级框架替代。另一个问题是你的同事们是忙碌的,你需要知道他们是否有空闲时间来学习该框架。通常值得花费一些时间,针对你开发中使用的框架与远程团队进行交流,并且确保你的同事们能够应用该框架为公司创造价值。请持续关注我们,祝编程愉快!}

我要回帖

更多关于 最流行的web框架 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信