请问JAVA三层架构,持久层,业务层,表现层,都该怎么理解和MVC三层模型有什么区别

请问JAVA三层架构,持久层,业务层,表现层,都该怎么理解和MVC三层模型有什么区别,第1张

持久层用来固化数据,如常说的DAO层, *** 作数据库将数据入库

业务层用来实现整体的业务逻辑 如 前台获得了数据,逻辑层去解析这些数据,效验这些数据等 *** 作

表现层很好解释 你现在看到的网页 一些界面 都属于表现层的东西可以用一些Html,jsp,Swing来实现

至于mvc么对应的是 model(模型) view(视图) Controller(控制)

在javaweb中就很好理解了再XX系统中,前台页面属于view 贯穿前台后台持久层的一套模型就是model(EJB,Spring来实现) 而连接前台后台进行逻辑 *** 作的就是Controller(Struts来实现)

Java web项目开发需要掌握哪些技术

分享作为千锋的Java开发工程师需要掌握的专业技能,大家可以参考一下。

一、熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的JavaAPI,包括 框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。

二、熟悉基于JSP和Servlet的JavaWeb开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行JavaWeb项目开发的经验。

三、对Spring的IoC容器和AOP原理有深入了解,熟练的运用Spring框架管理各种Web组件及其依赖关系,熟练的使用Spring进行事务、日志、安全性等的管理,有使用SpringMVC作为表示层技术以及使用Spring提供的持久化支持进行Web项目开发的经验,熟悉Spring对其他框架的整合。

四、熟练的使用Hibernate、MyBatis等ORM框架,熟悉Hibernate和MyBatis的核心API,对Hibernate的关联映射、继承映射、组件映射、缓存机制、事务管理以及性能调优等有深入的理解。

五、熟练的使用HTML、CSS和JavaScript进行Web前端开发,熟悉jQuery和Bootstrap,对Ajax技术在Web项目中的应用有深入理解,有使用前端MVC框架(AngularJS)和JavaScript模板引擎(HandleBars)进行项目开发的经验。

六、熟悉常用的关系型数据库产品(MySQL、Oracle),熟练的使用SQL和PL/SQL进行数据库编程。

七、熟悉面向对象的设计原则,对GoF设计模式和企业应用架构模式有深入的了解和实际开发的相关经验,熟练的使用UML进行面向对象的分析和设计,有TDD(测试驱动开发)和DDD(领域驱动设计)的经验。

八、熟悉Apache、NginX、Tomcat、WildFly、Weblogic等Web服务器和应用服务器的使用,熟悉多种服务器整合、集群和负载均衡的配置。

九、熟练的使用产品原型工具Axure,熟练的使用设计建模工具PowerDesigner和EnterpriseArchitect,熟练的使用Java开发环境Eclipse和IntelliJ,熟练的使用前端开发环境WebStorm,熟练的使用软件版本控制工具SVN和Git,熟练的使用项目构建和管理工具Maven和Gradle。

Web项目开发到底需要掌握哪些技术

移动互联网进入基于Web应用为核心的阶段, Java作为应用于网络的最好语言。

实施Java的WEB项目需要掌握的技术

Java语言;

面向对象分析设计思想;

设计模式和框架结构;

XML语言;

网页脚本语言;

数据库;

应用服务器;

集成开发环境;

开发工具

数据库;

Web服务器;

集成开发环境(IDE);

JavaWeb项目开发到底需要掌握哪些技术

你首先你的先学好java2,也就是j2se,大概是2到3个星期。然后根据你的去向,比如你想写桌面应用程序的话,你就学好swing,如果你想学android的话,就关注android方面的书,如果是从事web开发的,你的学好jsp+servlet ,大概是2到3个星期,这个很重要,关系到后面的框架的学习。

然后你在学struct2,在学hibernate,在学spring。在这期间,再学点前台的知识,+css+javascript的知识,然后你在晋级学习EJB,实现异步平台的互访使用。大概是这样的。

希望能够帮助你,请采纳我的答案。

一个完整的Java Web项目需要掌握哪些技术

+css+js,javaEE,ajax,数据库,jsp,这些知识就够做出一个javaweb项目了,不过性能可能不是太好,正常项目还应该要有数据库连接池,redis缓存等

做JavaWeb项目需要掌握哪些技术?

要做JavaWeb项目,需要掌握的技术有:Java语言、面向对象分析设计思想、设计模式和框架结构、XML语言、网页脚本语言、数据库、应用服务器和集成开发环境。

做一个完整的Java Web项目需要掌握哪些技术

视图层技术——HTML,CSS,JS,AJAX,Tiles,Velocity,FreeMarker

持久层技术——MyBatis,Hibernate

Spring , Spring MVC

项目构建工具Maven

日志Log4j

版本控制 Git

数据库技术:

SQL语句

参数调优

*** 作系统:

熟练掌握一种Linux系统,原理,Shell命令

服务器技术:

熟练使用并理解一个应用服务器技术的原理(Tomcat)

熟练使用并理解一个Web服务器技术的原理(Nginx)

用java做项目需要掌握哪些技术

给你说一下最基本的需求吧,首先要分你做的Java项目是什么项目

1、手机项目

了解Java基础,手机应用程序基础如J2ME,手机程序打包

2、WEB项目

了解Web服务器如Tomcat,了解数据库连接和 *** 作可以是JDBC或者hibernate,了解语言基础,WEB程序发布

3、游戏服务器

了解Java基础,了解Java多线程,Socket,tcp/ip协议,数据库连接和 *** 作,自制通讯协议等

wpf开发,需要掌握哪些技术

上面正解,我不充电,基础开发知识掌握后就是技巧提升了。什么mvvm设计模式等等,自定义属性,样式定义等等。

开发hololens,需要掌握哪些技术

微软Hololens全息眼镜是微软推出的一款虚拟现实装置,为头戴式增强现实装置,可以完全独立使用,无需线缆连接、无需同步电脑或智能手机。二0一5年一月二二日,微软举办Windows 一0预览版发布会,推出HoloLens全息影像头盔。 微软Hololens全息眼镜展示 微软Hololens全息眼镜是融合CPU、GPU和全息处理器的特殊眼镜,通过影像和声音,让用户在家中就能进入全虚世界,以周边环境为载体进行全息体验。 用户可以通过HoloLens以实际周围环境作为载体,在图像上添加各种虚拟信息。无论是客厅中玩Minecraft游戏、查看火星表面、甚至数进入虚拟的知名景点,都可以通过HoloLens成为可能。 头戴装置在黑色的镜片上包含透明显示屏,并且立体音效系统让用户不仅看到、同时也能听到来自周围全息景象中的声音,同时HoloLens也内置一整套的传感器用来实现各种功能。 HoloLens处在早期的开发阶段,在Windows 一0发布后开始测试,并在Windows 一0的时间框架内推出,价格会针对企业和个人消费者等不同用户分别制

现在使用java做web开发,需要掌握哪些相关技术?

刚开始必须掌握jsp,servlet,和一定的j2se知识,这个是基础,没有基础,学了框架也是白学,没有发展前途,然后是各种框架,虽然说流行的是struts2 spring hibernate,但其实各公司有各自不同的需求,很多好框架和技术也是需要去了解和掌握的,比如说jsf, EJB3,jpa等

前端技术了解就好,简单的 css js,这些是不需要花很多时间去学的,看看了解就行

比较PHP和JSP这两个Web开发技术,在目前的情况是其实是比较PHP和Java的Web开发。以下是我就几个主要方面进行的比较:

一、 语言比较

PHP是解释执行的服务器脚本语言,首先php有简单容易上手的特点。语法和c语言比较象,所以学过c语言的程序员可以很快的熟悉php的开发。而java需要先学好java的语法和熟悉一些核心的类库,懂得面向对象的程序设计方法。所以java不如php好学。

Java首先要编译成字节码class文件,然后在java虚拟机上解释执行。Java的Web开发首先最容易想到的就是JSP(现在已经到JSP20),原来的java的Web开发都是用servlet来实现的,用servlet来开发需要程序员在java的源文件中嵌入大量的html代码。所以后来就出现了JSP,JSP可以方便的嵌入到html文件当中,其实jsp文件在服务器上执行的时候首先会被应用服务器转换成servlet,然后再编译执行。Jsp可以通过servlet和JavaBean的支持产生强大的功能。JavaBean

是一种可复用的、跨平台的软件组件。使用javabean可以方便的实现java代码和html的分离,能够增强系统的功能和软件的复用性。

Java的Web开发属于SUN公司定义的J2EE其中的规范。而且在J2EE中包括了java的Web开发的所有方面,如:JSP、Servlet、JDBC、JNDI、JAVABEAN、EJB等等。J2EE就特别适合于做大型的企业级的应用。

二、 数据库访问比较

Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库。访问数据库的接口比较统一。

PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。例如:用Java开发的Web应用从MySQL数据库转到Oracle数据库只需要做很少的修改。而PHP则需要做大量的修改工作。

三、 系统设计架构比较

采用Java的Web开发技术,需要使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。所以用Java进行开发前期需要做大量的系统分析和设计的工作。

四、 跨平台性

Java和PHP都有很好的跨平台的特性。几乎都可以在不作任何修改的情况下运行在Linux或者Windows等不同的 *** 作系统上。

五、 开发成本比较

PHP最经典的组合就是:PHP + MySQL +

Apache。非常适合开发中小型的Web应用,开发的速度比较快。而且所有的软件都是开源免费的,可以减少投入。

Java的Web应用服务器有免费Tomcat、JBoss等,如果需要更好的商业化的服务有:Web Sphere和 Web logic。

六、 分布式多层架构比较

PHP只能实现简单的分布式两层或三层的架构,而JAVA在这方面就比较强大,可以实现多层的网络架构。数据库层(持久化层)、应用(业务)逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如Struts就是利用java的Web开发技术实现了MVC的设计模式,而在业务逻辑层也有Spring框架,数据库持久化层有Hibernate等框架。这些框架可以方便开发者高效、合理、科学得架构多层的商业应用。

下面简要的说一下Struts,它实质上是在JSP Model2的基础上实现的一个MVC(Model、View、Controler)框架。JSP

Model2体系结构是一种联合使用JSP 与Servlet

来提供动态内容的方法。在Struts框架中,模型由实现业务逻辑的JavaBean或EJB组件构成,控制器由Servlet实现的,视图由一组JSP文件组成。采用Struts可以明确角色的定义和开发者与网页设计者的分工。而且项目越复杂,其优势越明显。

七、 源代码安全

PHP开发的程序的源代码都是公开的,他人拿到php开发的程序后都可以进行修改。

Java开发的程序,最后用户拿到的是只是一些编译好的class类,无法看到完整的源代码,安全性高。

八、性能比较

有人做过试验,对这两种种语言分别做回圈性能测试及存取Oracle数据库测试。

在循环性能测试中,JSP只用了令人吃惊的四秒钟就结束了2000020000的回圈。而PHP测试的是20002000循环(少一个数量级),却分别用了63秒。

数据库测试中,二者分别对 Oracle 8 进行 1000 次 Insert,Update,Select和Delete: JSP 需要 13 秒,PHP

需要 69 秒。

综上所述,我个人认为,PHP适合于快速开发,中小型应用系统,开发成本低,能够对变动的需求作出快速的反应。而Java适合于开发大型的应用系统,应用的前景比较广阔,系统易维护、可复用性较好。还有,同样功能的系统用Java开发的系统要比PHP开发的系统的价格要高。

网上搜索的,不对我在找 :

java 三层架构ssh

一个spring25+hibernate32+struts20组合框架,使用spring的 IoC来管理应用的 所有bean,包括struts2的 action,充分发挥了spring轻量级框架的 优势。

摘 要: 针对当前Web应用程序开发面临的问题,结合目前比较流行的开源框架Spring、Struts和Hibernate,提出了一种开发J2EE Web应用的轻量级解决方案,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。并且,通过案例具体说明了如何将这一方案应用到实际项目中。

关键词: J2EE MVC Struts Spring Hibernate

大型企业级Web应用系统的开发通常要求有一个良好的软件架构、便于协作开发和扩展升级,而传统的开发模式不能很好地满足这些要求。本文针对当前Web应用程序开发面临的问题,结合目前比较流行的开源框架SSH(Spring、Struts、Hibernate),提出一种开发J2EE 企业级Web应用的轻量级解决方案,并通过案例具体说明如何将这一方案应用到实际项目中。

1 框架技术

著名的软件大师Ralph Johnson对框架(Framework)进行了如下的定义: 框架是整个系统或系统的一部分的可重用设计,由一组抽象的类及其实例间的相互作用方式组成[1] 。

框架一般具有即插即用的可重用性、成熟的稳定性以及良好的团队协作性。J2EE复杂的多层结构决定了大型的J2EE项目需要运用框架和设计模式来控制软件质量。目前,市场上出现了一些商业的、开源的基于J2EE的应用框架,其中主流的框架技术有:基于MVC模式的Struts框架和基于IoC模式的 Spring框架以及对象/关系映射框架Hibernate等。

11 表示层框架Struts

Struts是一个在JSP Model2基础上实现的MVC框架,主要分为模型(Model)、视图(Viewer)和控制器(Controller)三部分,其主要的设计理念是通过控制器将表现逻辑和业务逻辑解耦,以提高系统的可维护性、可扩展性和可重用性[2] 。Struts框架的体系结构如图1所示。

下面就图1所示的体系结构图分析Struts框架中的MVC组件。

(1)视图:视图部分主要由JSP页面组成,其中没有流程逻辑、业务逻辑和模型信息,只有标记。Struts自身包含了一组标记库(TagLib),这也是Struts的精华之一,灵活运用它们可以简化JSP页面的代码,提高开发效率。

(2)控制器:Struts中的Controller主要是其自身提供的ActionServlet。ActionServlet接收所有来自客户端的请求并根据配置文件(struts-configxml)中的定义将控制转移到适当的Action对象。

(3)模型:Struts没有定义具体Model层的实现,Model层通常是和业务逻辑紧密相关的,有持续化的要求。目前在商业领域和开源世界,都有一些优秀的工具可以为Model层的开发提供便利。

12 业务逻辑层框架Spring

Spring是一个解决了许多J2EE开发中常见问题并能够替代EJB技术的强大的轻量级框架。这里所说的轻量级指的是 Spring框架本身,而不是指Spring只能用于轻量级的应用开发。Spring的轻盈体现在其框架本身的基础结构以及对其他应用工具的支持和装配能力。与EJB这种庞然大物相比,Spring可使程序研发人员把各个技术层次之间的风险降低。

Spring框架的核心是控制翻转IoC(Inversion of Control)/依赖注入DI(Dependence Injection)机制。IoC是指由容器中控制组件之间的关系(这里,容器是指为组件提供特定服务和技术支持的一个标准化的运行时的环境)而非传统实现中由程序代码直接 *** 控,这种将控制权由程序代码到外部容器的转移,称为“翻转”[3] 。DI是对IoC更形象的解释,即由容器在运行期间动态地将依赖关系(如构造参数、构造对象或接口)注入到组件之中[3] 。 Spring采用设值注入(使用Setter方法实现依赖)和构造子注入(在构造方法中实现依赖)的机制,通过配置文件管理组建的协作对象,创建可以构造组件的IoC容器。这样,不需要编写工厂模式、单例模式或者其他构造的方法,就可以通过容器直接获取所需的业务组件。Spring框架的结构如图2所示。

  Spring框架由七个定义明确的模块组成,且每个模块或组件都可以单独存在,或者与其他一个或多个模块联合实现。Spring Core Container是一个用来管理业务组件的IoC容器,是Spring应用的核心;Spring DAO和Spring ORM不仅提供数据访问的抽象模块,还集成了对Hibernate、JDO和iBatis等流行的对象关系映射框架的支持模块,并且提供了缓冲连接池、事务处理等重要的服务功能,保证了系统的性能和数据的完整性;Sprnig Web模块提供了Web应用的一些抽象封装,可以将Struts、Webwork等Web框架与Spring整合成为适用于自己的解决方案。

Spring框架可以成为企业级应用程序一站式的解决方案,同时它也是模块化的框架,允许开发人员自由地挑选适合自己应用的模块进行开发。Spring框架式是一个松耦合的框架,框架的部分耦合度被设计为最小,在各个层次上具体选用哪个框架取决于开发者的需要。

13 数据持久层框架Hibernate

O/R mapping技术是为了解决关系型数据库和面向对象的程序设计之间不匹配的矛盾而产生的。Hibernate是目前最为流行的O/R mapping框架,它在关系型数据库和Java对象之间做了一个自动映射,使得程序员可以以非常简单的方式实现对数据库的 *** 作。Hibernate工作原理如图3所示。

  Hibernate通过对JDBC的封装,向程序员屏蔽了底层的数据库 *** 作,使程序员专注于OO程序的开发,有助于提高开发效率。程序员访问数据库所需要做的就是为持久化对象编制xml映射文件[4] 。

底层数据库的改变只需要简单地更改初始化配置文件(hibernatecfgxml或者hibernateproperties)即可,不会对应用程序产生影响。

Hibernate有自己的面向对象的查询语言HQL,HQL功能强大,支持目前大部分主流的数据库,如Oracle、DB2、MySQL、 Microsoft SQL Server等,是目前应用最广泛的O/R映射工具。Hibernate为快速开发应用程序提供了底层的支持。

2 基于SSH组合框架的Web应用模型设计与实现

21 集成SSH的新型J2EE框架

前面分析了基于J2EE的三种框架技术,下面通过集成以上三种框架技术来对传统的J2EE Web开发模型加以改进,以形成一种新的、轻量型的J2EE架构。

集成SSH框架 的系统框架图 如图4所示,系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在 Struts框架的模型部分,利用Hibernate框架对持久层提供支持,业务层用Spring支持。具体做法是:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO接口,并给出Hibernate的DAO实现,采用Hibernate架构实现的 DAO类来实现Java类与数据库之间的转换和访问,最后由Spring完成业务逻辑。

系统的基本业务流程是:在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后Struts根据配置文件 (struts-configxml)将ActionServlet接收到的Request委派给相应的Action处理。在业务层中,管理服务组件的 Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。而在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。

采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。

22 基于SSH框架 的Web应用系统的实现

下面将通过一个实际的系统来展示如何进行基于SSH框架 的Web应用开发。该系统是为某通信公司运营部开发的一个问答式系统,功能类似于百度知道和新浪爱问。由于系统的模块较多,下面就以一个用户管理模块为例来说明系统的开发实现过程,并将按照数据持久层、业务逻辑层、表示层的顺序说明系统构建过程。

(1)数据持久层

数据持久层由Java对象持久化类和数据访问对象(DAO)组成。每个数据库表都对应着一个持久化对象,这样就给予了开发者使用OO思想设计和开发的便利,同时也屏蔽了具体的数据库和具体的数据表、字段,消除了对数据库 *** 作的硬编码在重用性上的弊端。用户信息表的部分结构如表1所示。

Hibernate通过映射(Mapping)文件将对象(Object)与关系型数据(Relational)相关联,因此需要编写和数据库表相对应的Java持久化类以及对应的映射文件。有了Java持久化类后就可以在此基础上实现数据访问类。在Spring框架中,数据访问类可以从辅助类 HibernateDaoSupport继承,这极大地方便了Hibernate框架在Spring中的使用,相应的部分代码如下:

public class UserDao

extends HibernateDaoSupport {

public int add(User user) {

return IntegerParseInt(thisgetHibernateTemplate()save(user)toString());

}

public List findAll() {

return thisgetHibernateTemplate()loadAll(Userclass);

}

}

  具体的Hibernate数据源、session工厂、事务管理、缓冲连接池等功能都由业务层的Spring容器提供。

(2)业务逻辑层

业务逻辑层由Spring框架支持,提供了处理业务逻辑的服务组件。开发者需要对业务对象建模,抽象出业务模型并封装在Model组件中。由于数据持久层实现了Java持久化类并且封装了数据访问对象(DAO),因此可以在Model组件中方便地调用DAO组件来存取数据。Spring的IoC容器负责统一管理Model组件和DAO组件以及Spring所提供的事务处理、缓冲连接池等服务组件。

在用户管理模块中,通过业务建模创建了用户模型UserService类,封装了对用户的权限管理以及积分管理等功能。UserService类通过调用数据访问类UserDao实现对用户数据的 *** 作。这些组件的关系将通过配置Spring框架的applicationContextxml联系起来,配置文件的主要内容如下:

 

(3)表示层

表示层结合JSP和Struts的TagLib库处理显示功能,利用ActionServlet将请求(do)映射到相应的Action,并由Action调用业务逻辑的服务组件,然后根据处理结果跳转到Forword对象指定的响应页面。

业务流程的部署由struts-configxml完成。下面以一个显示所有用户信息的请求(ListUserdo)为例来说明配置文件的使用。

 

基于J2EE的Web应用以其层次性、平台无关性的优势已经逐渐成为了电子商务、电子政务主要的解决方案。本文针对传统的J2EE Web应用开发的弊端,提出了一种利用轻量级框架来快速搭建Web应用的解决方案,并且通过其在实际项目中的应用,证明了采用此方案可以帮助开发人员在短时间内建立结构清晰、可重用性好、维护扩展方便的Web应用程序。

参考文献

[1] GAMMA E, HELM R, JOHNSON R, et al Design patterns:Elements of reusable object-oriented software[M] Addison Wesley, 1994

[2] 孙卫琴精通Struts:基于MVC的Java Web设计与开发[M] 北京:电子工业出版社,2004

[3] JOHNSON R, HOELLER J, ARENDSEN A, et al Java/J2EE application framework reference document V11

2004

[4] 徐长盛,戴超一种快速开发Web应用程序方法的研究[J] 计算机工程与设计,2004,(12):2237-2239

[5] 夏昕,曹晓钢,唐勇深入浅出Hibernate[M] 北京:电子工业出版社,2005

[6] JOHNSON RExpert one-on-one J2EE design and development[M] 魏海萍译北京:电子工业出版社,2003

在用ssh 开发web应用时,需要对生成的 各个类文件进行组织,下面就对一个可行的 目录方案进行介绍:

譬如应用中有一个用户管理模块,则在公共包下建立一个user包,如该公共包可以为comsimonoa,

在user包下包括如下子包

1、controler包

该包放置各种struts的 action。

2、dao包

该包放置各类dao(data access object),也就是放置对数据库访问的 实现类,在用myeclipse中的 “Hibernate Reverse Engineering”进行反向 *** 作时在某一个目录中就会生成对应某个表的 DAO,生成后可将该DAO拖到dao包中。在某些应用中将DAO作为接口,在该接口中包括所有对数据库的 *** 作方法,然后在dao包建立一个hibernate包,在hibernate包中放置对DAO接口的 实现,譬如:UserDAO接口有一个实现类为UserDaoImpl,将该类放置到hibernate包中,实际的 开发倾向于后一种方式,因为对这个DAO接口可以实现spring的 IoC *** 作。(不知道myeclipse对此是怎么考虑的 ,这个问题让我纠缠了很久,误将DAO理解成一个能够进行实际 *** 作的 类,而不是一个接口,以后开发要注意 )

3、model包

该包中放置hibernate反向工程生成的 bean和该bean对应的 hbmxml文件。

4、service包

该包放置业务 *** 作类,譬如用户服务类,一般情况将该用户 *** 作类提取一个接口,然后在service包下生成一个impl包,在impl包中才放置用户 *** 作接口的 实现类。该用户接口实现类中调用DAO接口对数据库进行 *** 作,而调用该实现类的 方法在struts的 action中。

5、vo包(value object)

vo包中的 中包括struts中使用的 POJO及actionform等信息。

VO: Value Object

DTO: Data Transfer Object

个人理解VO和DTO是类似的 东西,原则上VO和DTO只有Public Fields,主要用于进程之间数据传递的 问题,VO和DTO不会传递到表示层,在业务层就会被吸收。但看到很多人在建立VO和DTO时,也含有Setter,Getter属性和一些其它的 辅助方法,这也无可厚非,我自己也不能确定这对不对。

面对及其复杂的web项目,为了提高项目的可维护性与可扩展性,简化开发人员的工作,越来越多的框架被设计实现出来,并且得到广泛的应用。

框架包括全栈框架如Spring,MVC框架如structs与SpringMVC,ORM框架如Hibernate与Mybatis。它们在web项目中有各自的分工,通过Spring将他们整合起来。

所谓三大框架,即struts、spring及hibernate。要想学习好三大框架,快速掌握,最好的方法无疑是理论与实践结合,由简入繁,由单一到全部,逐一攻克,具体学习步骤如下:

1、先学习struts,struts是世界上第一个经典的mvc框架,其作用就是将业务逻辑与视图分离开来,使得项目层次分明,清晰,更具有结构性。学习一个框架,首先要知道这个框架的作用,有哪些特征,然后就是了解其实现原理,最后就是结合实际项目例子来进一步加深对这个框架的理解。

2、struts掌握了后,接着学习spring,spring就是一个大的工厂,其轻量理强大,它改变了传统的编程模式,将实例化bean交给了容器管理,使得项目中类的耦合度大为降低。spring的特性很多,较为有名就是IOC(控制反转)与AOP(面向世面编程)。要想学习好spring,就要先掌握相应的理论知识点,然后就是动手敲代码,将它的每一个特性都实现一遍,功力到了,自然就掌握了。

3、掌握了以上两大框架之后,可以继续深入学习hibernate框架了。hibernate是一个orm-maping框架,即对象关系映射,将数据库表反转映射成实体对象,使得用户在 *** 作底层数据库时,不用再写那些繁琐的SQL语句,而是通过直接 *** 作对象将数据持久化到数据库。学习好hibernate,首先要掌握其原理,映射配置,然后就是对其每一个特性进行编码验证,如一对一,一对多,多对多关系映射等。可以不结合项目,只要能连上数据库进行相应 *** 作即可。

4、三大框架都初步掌握了后,就可以进行整合学习了。三大框架在整合分工也很明确,也是一个经典的MVC框架,其中struts充于其中的V(即视图层),spring充当C(即业务控制层),hibernate充当M(持久层)。整合学习三大框架的难点在于其中的配置,依赖及管理,这非一两天能完成的事情,得要多查阅相关书籍交资料,动手实践,用心体验。

最后,要想学习好框架,除了掌握其原理、特性外,还要多动手编码,多思考,熟能生巧。一句话,纸上得来终觉浅,绝知此事要躬行。

应该说EJB中对于数据的持久化方面和hibernate的功能是一致的,但两者没法从全局上比较,两者的适合范围和功能区别实在太大

一段时间以来,EJB、Hibernate、Spring的恩怨情仇,是J2EE的热门话题。EJB VS Hibernate、EJB VS Spring这样的议题随处可在。这篇文章,笔者试图通过对技术发展史的回顾,对source的剖析、对比,深入挖掘这些技术出现的初衷、缺陷、走向。

前言

我强调EJB、Hibernate、Spring的恩怨情仇,同时也必须说明,我一向反感你说我怎么侵入、你说我怎么依赖式的EJB VS Hibernate、EJB VS Spring的讨论,因为这种行为本身就是没有意义的、错误的。我提倡从正确的技术对比和理性的技术批判中受益。对比,我们需要找准对比点;批判,我们需要从source、spec、application context中分析、批判。

从EJB说起

21 EJB几种Bean类型的引入顺序

EJB10,有两种Bean类型:SessionBean、EntityBean。

EJB20,引入CMP EntityBean、引入Message-Driven Bean、引入Local接口。

22 Entity Bean和O/R Mapping的微妙关系

我想对O/R Mapping、O/R Mapping Engine做一个简要的说明。

O/R Mapping,以对象视图(Object View)来看待DB Record,对象 *** 作能够通明地映射成DB Record *** 作。

O/R Mapping Engine,就是使得O/R Mapping成为可能的具体实现手法。

从我们的定义来看,使用BMP EntityBean意味着你自己在实施一个非常简单的O/R Mapping ,你自己在为能够以对象视图和DB交互做出努力。而为了支持CMP EntityBean,EJB Server提供商会为你提供O/R Mapping 能力。而且,事实的确是这样,任何支持CMP EntityBean的EJB Server都需要提供一个Persistence(O/R Mapping) Engine,譬如JBOSS的JAWS(Just Another Web Store)。

至于,Hibernate、IBATIS等,虽然,也叫做O/R Mapping Tool,但是它们的意义已经远远超过了CMP EntityBean O/R Mapping Engine这样的Tool。下面会有详细的分析。

23 EJB-10

EJB10是分布式组件架构,包括SessionBean和EntityBean。它引入了很多非常前卫的技术、概念。主要包括分布式组件、容器、DB *** 作的对象试图。

EJB10,可能Expert Group设想的EJB的应用场景是大规模分布式的系统。所以,SessionBean、EntityBean尚没有引入Local接口。 client->SessionBean、client->EntityBean、SessionBean->SessionBean、SessionBean->EntityBean等等都是remote的。

EJB10,将容器这个概念引入EJB,意义重大。这里我想顺便澄清一个问题:容器是什么?我的观点:容器只是一个概念、一种架构。就拿EJB Server来说,Server试图为Bean提供分布式、事务、安全等基础设施,那么就必须有一个凌驾于Bean之上的Layer或者说warp,这样才能够从高层拦截Bean调用,进行一些额外 *** 作。这样的架构就叫做容器架构,这个概念当然不是自EJB才有的。至于怎样实现,方法各异。

事实上,以个人的观点,容器架构的核心,不在于从高层“掌握”Beans(Objects),而在于采用怎样的技术来实现Bean(Object)调用的拦截。无疑,EJB Servers和Spring的实现手法是不同的。下面会详细讨论这个问题。

EJB10为DB *** 作提供了对象试图。Expert Group当初是怎样定位EntityBean的?无疑,10中的EntityBean,也就是20以后的BMP EntityBean,定位是Domain Object(我不知道当时有没有这个概念,只是它们的思想是非常一致)。它的fields直接映射DB Table Schema,member functions就是对Table Record的 *** 作。Client->EntityBean、SessionBean->EntityBean等就可以直接和数据库交互了。

有人跟我说EJB10基于Catalysis方法学,SessionBean对应Role,EntityBean对应Domain Object。到目前为止,我对这种说法,持保留态度,因为EJB Spec中,我丝毫没有这种说法的痕迹。

24 EJB-2X

无疑,EJB1X的设计存在重大的缺陷。20增加的特性包括Local接口、CMP EntityBean,它们是对1x缺陷的重大更正。

首先,事实上没有多少Expert Group想象中的大规模分布式应用。我们从两个方面来说:(1)通过Remote方式使用 EntityBean引起严重的性能问题,很有必要提供Local接口。(2)访问SessionBean的WebApplication和SessionBean部署在同一服务器上的情况非常普遍,所以提供SessionBean的Local接口,也是必然的事情。2X之后,最常用的一个Pattern就是使用SessionBean Façade通过Local的形式访问EntityBean。而且,即使应用规模大到连SessionBean和EntityBean都需要部署到不同的Server,也没有关系,因为EJB2X同样支持Remote接口。

其次,EJB20引入CMP EntityBean。CMP EntityBean解决了EntityBean持久化表示和JDBC分离的问题,同时大大简化了EntityBean的开发、提高了性能。但是,我不得不说,CMP EntityBean将EJB1X的Domain Model理念完全冲掉了,因为CMP EntityBean是不能包含任何Domain Logic的。BMP EntityBean似乎就是Matrin所说的DomainObject,而CMP EntityBean在典型的SessionBean->EntityBean这样的应用场景下,似乎就是Martin所说的Transaction Script中的AnaemicDomainObject。

顺便说一下,我个人是不同意Martin的RichDomainObject的说法。因为,在数据应用系统中,Martin提到的相对于Transacton Script中AnaemicDomainObject的RichDomainModel往往没有反映现实世界。一个Bank Account反映到现实世界,就是账本中的一条记录,它没有自发的动作,譬如withdraw。它和Person不同,Person可以有say(String words)这样的自发动作。Account的withdraw应该放到AccountManager中,由AccountManger来 *** 作Account。不是说OO中的Object都需要有动作,现实世界中,本来就有静态的、没有自发动作的事物,譬如一个账本、一个帐号、一个资料库。虽然,不可否认,Rich Domain Model(对比AnaemicDomainObject说的)能够带来不少的好处(什么样的好处,你看看Martin的《Domain Logic and SQL》,就知道了)。

三、我理解的Hibernate

本来,本文的题目叫做《EJB、Spring:剖析、批判和展望》,因为我觉的Hibernate和EJB、Spring不是一个层次的东西,虽然,这个道理很浅显,但是为什么那么多人还拿Hibernate来攻击EJB,来攻击EntityBean?EntityBean是值得狠狠攻击的,但是你用错了q。

我上面提到,支持CMP EntityBean的EJB Implements都有一个Persistence Engine,也就是O/R Mapping Engine。CMP O/R Mapping Engine用来做什么的它通过分析CMP Abastract Schema、分析EJBQL、分析Bean状态等行为,生成SQL,然后和DB 进行交互。

而在我眼里,Hibernate不是”O/R Mapping Tool”这几个字能概括的了。我说Hibernate是一款独当一面的轻量级翻译中间件,是Layer,和CMP EntityBean O/R Mapping Engine不是一个层次的东西了。

Application------->CMP EntityBean Operation-------->DB

|

(O/R Mapping Engine)

----------------------

|---HQL、Criteria Query

Application------> Hibernate ------> |---POJO/PO Operation---------> DB

|---and so on

通过上面的两个图,你看出区别来了吗?

EntityBean应用,不知道O/R Mapping Engine的存在,只需要使用EntityBean来完成交互。

而在Hibernate应用中,Application是直接使用Hibernate的。也就是说,它是直接使用O/R Mapping Engine的。

在这里,我建议你停下来,想想EntityBean是不是应该对应Hibernate中的PO/POJO?举个例子,你修改PO后,是不是需要sessionObjupdate(po)来更新,这个sessionObjupdate(po)是不是表示你直接使用Hibernate的Persitence Engine?是的。而在EntityBean中,你修改EntityBean后,你需要其它的行为来使得EntityBean的变化同步到DB吗?不需要。因为,EJB Container拦截你的调用,在你更改Bean的field之前、之后,container会调用load/store方法的(当然,在BMP/CMP EntityBean中,情况是不同的,BMP EntityBean调用programmer自己用JDBC编写的load/store等方法,而CMP EntityBean,使用CMP Peristence Engine来做这个工作)。这样,就隐式的持久化数据了。不需要,你像Hibernate那样调用sessionupdate这样的语句。EntityBean这种同步方式是对它性能差的重要原因之一。值得注意的是,EJB Implements对于EntityBean同步并不完全是我上面描述的那样,同步的频率和事务、特定的implements是紧密相关的。

总的来说,CMP EntityBean O/R Mapping Engine是为静态的、功能固定的EntityBean的O/R Mapping提供支持而开发的。而Hibernate担任的是一个Layer的作用。

四、Spring不是神话

Rd Johnson聪明在哪里?聪明在,他坚持了自己的实践,而不是随大流。Rd Johnson认识到90%的应用不需要分布式、不需要J2EE中那些重量级的技术,譬如JNDI,他就动手为EJB脱去Remote这层皮、将大多数应用中不必要的技术隔离、改造。从适用范围上来说,Spring对EJB做了90%的补充。

个人看法:Spring的哲学在于,framework针对最常见、最简单的应用场景而设计,等到需要特殊技术的时候,再想办法解决问题。这样,在绝大多数没有特殊要求的应用中,Spring就显示出优势来了。下面,我们会做详细的讲解。

41 Spring“无侵入性“是谎言,但是有资格笑”百步之外的EJB”

“无侵入性”是Spring标榜的特性。但是,我想说,Spring的“无侵入”是谎言,随着应用的深入,“无侵入”对什么framework来说,都是个神化。

什么就叫“无侵入性”?部署到Spring中的Object不需要强制任何实现接口就可以说Spring是“无侵入性”的?我觉的,这是大错特错。如果你非要说,Spring的确不需要像EJB那样强制实现一些接口,那么我只能告诉你:

(1)Spring设想的Object的应用场景是从最简单的出发。所以,它没有,为了一些预料中要使用的特性而强制Object实现一些特定的接口。但是,事实上,在Spring中,如果你的应用场景稍微深入一点,那么你就和和Spring绑定了。

(2)Spring管理的Object,从某种意义上说是没有状态的。

针对第一点,我举两个个例子。(1)EJB内部方法的调用,会导致基础设施不会起作用。但是Bean接口(SessionBean、EntityBean、MessageDrivenBean)中都有可以使Bean获得自己Context的支持,譬如:SessionBean的setSessionContext(SessionContext ctx) 等等,容器部署Bean的时候会通过它给每个Bean设置一个上下文。而EJBContext中,有EJBObject getEJBObject这样的函数,可以使得Bean获得自身的EJBObject,这样通过EJBObject来调用Bean自己的函数,基础设施就会起作用了。而Spring中,如果,一个Object的函数需要调用自己的其它函数,而又希望譬如安全检查、事务等等Aspect起作用?那么Spring,怎么做?你需要设置Bean的exposeProxy属性。

ExposeProxy: whether the current proxy should be exposed in a ThreadLocal so that it can be accessed by the target (It's available via the MethodInvocation without the need for a ThreadLocal) If a target needs to obtain the proxy and exposeProxy is true, the target can use the AopContextcurrentProxy() method

所以,当你需要上面说的内部调用需要基础设施起作用的特性,不管在EJB还是Spring肯定需要和特定框架绑定的。为什么说,Spring五十步笑百步?因为,我上面提到,Spring在Object很简单的情况下,是可以任意部署的、复用的。而EJB却不管你需不需要,开始就设想你需要的。同样,Spring中的BeanFactoryAware、BeanNameAware等等接口也都说明了一点:Spring将特性从Object剥离,从而,尽量降低它的依赖性。只有当你的Object复杂的时候,framework才会侵入你的Object。

针对,第二点,我想着重谈一下。为什么说,从某种意义上说Spring中部署的对象是没有状态的?我们知道,Spring支持两种Object:Singleton和Prototype。Spring Spec中,认为,Singleton可以称为stateless的,Prototype可以称为是statefule的。而在EJB的世界中,StatefuleSessionBean和EntityBean也称作是stateful的。那么,它们的stateful分别意味着什么?它们为什么在依赖性方面有那么大的区别?为什么Spring中的Object不需要实现特定接口,而EJB需要?先来,看看EJB的SessionBean接口:

void ejbActivate()

The activate method is called when the instance is activated from its

"passive" state

void ejbPassivate()

The passivate method is called before the instance enters the

"passive" state

void ejbRemove()

A container invokes this method before it ends the life of the

session object

void setSessionContext(SessionContext ctx)

Set the associated session context

其中的setSessionContext我上面说过。看ejbActivate()、ejbPassive(),为什么会有这两个函数?而Spring不需要实现有同样函数的接口?这是EJB和Spring的对象管理机制的不同造成。EJB implements一般来说,为了复用Bean,会采用一级Cache加上一级InstancePool(StatelessSessionBean是不需要Cache的),从而支持将StatefulSessionBean持久化到磁盘,支持EntityBean的Bean Instance(注意这个Bean Instance和client得到的EntityBean是不同的,它没有和任何的DB Record关联)的复用,这就导致了ejbAcrivate、ejbPassivate等的引入。但是,Spring没有采用这样管理机制,它只有Singleton/Prototype。而Prototype虽然也可以说成是Statefule的,但是它不会在不同的client中复用Object Instance,而是每一个client一个对象,哪怕一万个client,那么就产生一万个Instance,而在EJB中,可能使用100 Instance来服务,将not active的Bean持久化到磁盘,复用Bean Instance。还请注意,这里我不是说EJB中的StatefuleSessionBean好,事实上我发现,一般来说,当并发量很大时,采用节约内存而持久化Bean到磁盘这种策略,I/O瓶颈引起的问题更为严重。

再看,ejbRemove,这个没什么多说的,Spring中你可以选择实现InitializingBean、DisposableBean接口,但是Spring推荐不要这样做,可以写普通的init成员函数,然后在配置文件中指明init-method、destroy-method属性,这样避免和Spring框架的绑定。

总的来说,Spring从对象最基本的引用场景出发,当需要复杂特性的时候,才会采用特殊机制来解决问题,也就是在这时,才会使应用绑定到Spring中。所以,它的侵入性比较低,但是不是“无侵入性”,不是你想的那么美好,当然,也没有“绝对无侵入“的framework。

42 我觉的Spring IOC的设计思路不够完美

Spring的IOC被一些人当作多么神奇的东西。

EJB具有Spring中所说的那种IOC的能力吗?答案是肯定的。EJB中的EJB引用、资源引用、环境属性都可以说是IOC,不是吗?然而,Spring和EJB的IOC不同在哪里?

Spring注入的特色:主要考虑Local Object的查找,这个时候不需要任何的协议(譬如JNDI),当你需要注入Remote Object的时候,采用RMI协议或者使用第三方Tool(譬如Hessian)。

EJB的特色:无论你的Bean-Bean是否部署在同一台机器上、Client->Bean是否在同一台机器上,肯定需要通过JNDI来查询Bean,只是,如果是它们在同一台机器上的时候,你使用Local接口,这样使得调用变为Local调用,从而提升性能。EJB它从出生时起,就定位为分布式组件架构,一头栽进“distributed”不容易出来了。这个可能就叫“尾大不掉”吧。

这一切的不同,只能说,它们的定位不同。一个更关注Local、一个更关注Remote。Spring仍然坚持它的哲学,从最基本的、大多数的场景考虑起,到特殊需要的时候,再想办法来解决问题。它试图找到J2EE开发和系统能力的均衡点。

可以说,Spring的做法,更加合情合理。但是,我也相信,Spring在”只是为Remote注入提供简单的支持“这一点上有点矫枉过正。我觉的,它可以做的更好,譬如通过作为J2EE标准的JNDI来封装Local、Remote查找。

目前,Spring不怎么关心Remote Object注入,对于需要Remote注入的情况,只提供简单的支持,而且还需要针对expert单独写配置信息。在这里,EJB30的做法,我觉的,是目前,最方便、最理智、也是最有前途的。EJB30通过@remote、@local就可以让EJB Server做不同的部署。

Spring导出远程对象。

AccountService

exampleAccountService

1199

Spring中注入Remote是怎样做的?

rmi://HOST:1199/AccountService

exampleAccountService

看了,这段代码,你就知道了。

这种方法非常的轻量级,从本质上来说,这种方法和JNDI没有任何的不同,这种方法,也需要一个NamingService,还记得RMI编程中,运行服务端的时候,首先运行rmiregistry,这个实际上就是非常简单的NamingService。看来,Rd Johnson对JNDI真是深恶痛绝啊。怎么也不愿意用JNDI。Spring这种方法,也许没有JNDI那样重量级,但是很显然它不能支持工业级分布系统,J2EE发展到今天,JNDI已经成为最核心的技术,它不是简单的Object Naming Service,它提供标准接口来定位用户、微机、网络、对象、服务器等等。它已经广泛而深入的进入J2EE技术的各个领域、成为J2EE系统的纽带。

举个很简单的例子:我需要在Spring应用中动态获取Remote Object,我该怎么做?我需要无缝使用LDAP,我该怎么做?答案是,Spring不能帮到你什么。

那么我就想,Spring为什么不使用JNDI来封装Local、Remote查找两种协议?从而,使用J2EE标准来实现无缝

SSH: Struts1 Spring Hibernate

SS2H:Struts2 Spring Hibernate

spring:就是面向切面编程的框架AOP,和控制反转(IOC)是它最大的特性,

Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来 *** 纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任

struts1和struts2有很大的不同,现在企业中应用的一般还是struts1居多,而且前段事件struts2出现了大量远程可执行漏洞struts体现了mvc三层架构,对与web项目来说是不错的选择,hibernate是数据持久化,而且提供了数据库 *** 作接口,不论使用什么数据库,在配置中定义好之后,其他的由框架完成

java所需要的学习的知识点很多,可以大致分为以下几个阶段:一、预科学习:

HTML5:HTML5标签入bai门、HTML5表格、表单

CSS3:CSS3选择器和简单属性、CSS3定位和布局、CSS3复杂选择器和高级属性

数据库:mysql数据库安装和数据 *** 作、约束和简单查询、复杂查询、数据库设计、oracle的安装与数据 *** 作、oracle与mysql的对比学习

二、JavaSE

Java语言基础、程序逻辑:环境配置和第一个语言程序-HelloWorld 变量运算符 条件和循环 方法和数组

Java面向对象:面向对象入门 面向对象应用_管理系统类 Java常用类、String相关、算法相关 面向对象深入(重载、this、static )继承(重写、super、初始化顺序) 多态(抽象类和接口、final、克隆和比较接口 设计模式、对象和类的生命周期)

API:异常、日志 集合 集合工具类和泛型 IO JDBC基础线程 网络编程 反射 NIO Junit

Java面向对象思想:设计模式 面向对象原则

Java底层理论:集合底层 性能监控工具 反编 JUC

三、Java web

web基础:TOMCAT/WEB程序结构/>

第三方工具包:连接池、事务、分页、文件上传下载、Dom4j/Log4j/Log back

JavaScript和jQuery框架技术:JS入门和DOM基础 、DOM模型深入 、jQ基础、 jQ *** 作

MVC动态Web开发技术:自定义MVC框架、DAO框架、前端框架(layUI)

Web开发高级运用:tomcat server服务器配置 、nginx使用、 jetty配置

网络编程:网络原理、>四、SSM框架

Spring框架、SpringMVC框架、MyBatis框架:mybatis入门、 配置文件详解和动态sql的使用、 mybatis管理关系映射和延迟加载、 查询缓存和逆向工程 、Spring入门和集成、myBatis SpringMVC入门 、SSM集成、 Spring配置详解 、Spring AOP、 Spring事务配置 、SpringMVC高级功能 、SpringMVC原理

五、前沿技术

高可用、高并发、高扩展:Spring Boot 、缓存 、分布式 、全文索引、 服务中间件、 myCat、 云服务 、人脸识别 、语言识别 、JVM底层+优化

在java的学习中,最重要的表示实践,任何一个大牛都是敲出来的,光有理论知识,没有实际动手能力也是不行的。

对java有兴趣的小伙伴们,不妨先从java入门开始!B站上有很多的java教学视频,从基础到高级的都有,还挺不错的,知识点讲的很细致,还有完整版的学习路线图。也可以自己去看看,下载学习试试。

以上就是关于请问JAVA三层架构,持久层,业务层,表现层,都该怎么理解和MVC三层模型有什么区别全部的内容,包括:请问JAVA三层架构,持久层,业务层,表现层,都该怎么理解和MVC三层模型有什么区别、Java web项目开发需要掌握哪些技术、我是学java的,因公司原因 现在要转php求大神给说下php与java的差异等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9832074.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存