javaweb开发常用架构
JavaWeb是一个既可以包括前端也可以包括后端开发的技术体系,主要用于开发Web应用程序。其中,Java通常用于开发后端服务端组件实现业务逻辑的处理、数据存储和数据处理等任务,而前端部分则使用 HTML,CSS,JavaScript 等技术,用于实现用户交互、页面渲染等功能。因此,JavaWeb是一个涵盖前端和后端开发的全栈技术体系.
下面我们来说一下什么是mvc,当然有一些前端开发也是会涉及到mvc
MVC框架理解及优缺点
MVC:模型(Model)、视图(View)、控制器(Control).
流程如下:首先是视图向控制器发送请求,控制器再将业务请求发送给模型,然后模型处理请求业务并把结果返回给控制器,控制器根据结果再选择视图
MVC原理
一.MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.
另:MVC是一种程序开发设计模式,它实现了显示模块与功能模块的分离。提高了程序的可维护性、可移植性、可扩展性与可重用性,降低了程序的开发难度。它主要分模型、视图、控制器三层.
1、模型(model)它是应用程序的主体部分,主要包括业务逻辑模块(web项目中的Action,dao类)和数据模块(pojo类)。模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性.
2、视图(view) 用户与之交互的界面、在web中视图一般由jsp,html组成.
3、控制器(controller)接收来自界面的请求 并交给模型进行处理 在这个过程中控制器不做任何处理只是起到了一个连接的做用.
MVC的优点:
1、低耦合性:视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码。同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可,因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则.
2、高重用性和可适用性MVC模式允许你使用各种不同样式的视图来访问同一个服务器端的代码。它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),例如:例如,很多数据可能用HTML来表示,但是也有可能用WAP来表示,而这些表示所需要的仅令是改变视图层的实现方式,而控制层和模型层无需做任何改变.
3、较低的生命周期成本MVC使降低开发和维护用户接口的技术含量成为可能.
4、快速的部署使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中 精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上.
5、可维护性分离视图层和业务层也使得WEB应用更便于维护和修改.
6、有利于软件工程化管理由于不同的层各司其职,没一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码.
MVC的缺点:
1、增加了系统结构和实现的复杂性.
2、视图与控制器间的过于紧密的连接.
3、视图对模型数据的低效率访问.
4、目前一般高级的界面工具或构造器不支持MVC模式,改造这些工具以适应MVC需要和建立分离的部件的代价很高,从而造成使用MVC的困难.
5、小型项目,反而会降低开发效率,虽然层与层之间相互分离,但之间关联性太强,没有做到独立的重用。增加了系统结构和实现的复杂性。视图对模型数据的低效率访问.
2.Spring框架是一个开源的Java应用程序框架,由Rod Johnson发起。它是一个轻量级的容器,主要针对bean的生命周期进行管理。Spring以Ioc(控制反转)和AOP(面向切面编程)为内核,使用基本的JavaBean来完成以前只可能由EJB(Java企业Bean)完成的工作,取代了EJB的臃肿、低效的开发模式。Spring框架是目前主流的Java Web开发框架之一,具有很高的凝聚力和吸引力,被数以百万计的开发人员使用来创建高性能、易于测试的、可重用的代码
spring是一套提供IOC和AOP功能架,为简洁开发提供的一套轻量级框架。主要包括一下几个模块:
spring context:提供框架式的bean访问方式,以及企业级任务(定时任务)等
spring beans:是ioc最著名的实现,是spring的基石。beans的核心是beanfactory和BeanDefinition。BeanDefinition就像是java中的pojo。
spring core:核心类库,所有功能都依赖于该类库,提供IOC和DI服务。用来负责发现,创建并处理bean之间的关系。
spring aop:提供aop服务
spring mvc:提供面向Web应用的Model-View-Controller,即MVC实现。
spring DAO:对JDBC的抽象封装,简化了数据访问异常的处理,并能统一管理JDBC事务;
Spring ORM:对现有的ORM框架的支持;
IOC的理解
1.含义:ioc意思是控制反转,其核心实现是DI ,指将创建对象的权力交给ioc容器,由spring框架负责控制对象的生命周期和对象的依赖关系。其核心是DI 依赖注入。当我们只需要new一个对象的时候,有没有IOC是没有区别的。但是当我们new的这个对象又依赖了很多对象的时候就会变得及其麻烦,这时候交给spring 容器的话就会自动帮我解决依赖的问题,提供给我们想要的对象。
2.什么是DI:
IoC 的一个重点就是在程序运行时,动态的向某个对象提供它所需要的其他对象,这一点是通过DI(Dependency Injection,依赖注入)来实现的,即应用程序在运行时依赖 IoC 容器来动态注入对象所需要的外部依赖。而 Spring 的 DI 具体就是通过反射实现注入的,反射允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性
3.IOC的原理:spring的ioc的实现原理是工厂模式加反射机制。而bean如何注册到ioc容器中,以及bean对象的加载,实例化,初始化详细过程可以阅读bean加载流程
4.spring AOP的理解
AOP,一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,提高系统的可维护性。可用于权限认证、日志、事务处理。简单来说就是重复利用代码,重复的代码被称为切面。
AOP的关键在于代理模式,分为静态代理AspectJ,动态代理又分为实现接口类就用JDK动态代理或者Cglib动态代理。
1.静态代理:就是在编译阶段生成AOP代理类,并将切面织入到java字节码里卖弄,运行后就是增之后得AOP对象。
2.动态代理:
jdk动态代理核心是InvocationHandler接口和Proxy类,使用proxy类来生成目标类的代理类,当代理对象调用真是对象的方法时,invocationhandler通过invoke方法反射来调用目标类中的代码。
② 如果被代理类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成指定类的一个子类对象,并覆盖其中特定方法并添加增强代码,从而实现AOP。CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的
总结起来,Spring有如下优点:
1.低侵入式设计,代码污染极低
2.独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺
3.Spring的DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦
4.Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用
5.Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问
6.Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部
缺点:
使用了大量的反射机制,比较占内存,而且效率不如直接调用高
Spring包含很多的组件,使用的组件越多,Spring的启动就会越慢
配置比较复杂,不过后来引入了注解配置,简化了配置过程
没有做到依赖管理,比如控制各依赖之间的版本兼容关系,非常麻烦。后续SpringBoot这一点做得很不错。
启动Spring的IOC容器,需要依赖第三方的Web服务器,自身不能启动
使用Spring做出来的程序,逻辑不太清晰,代码不直观,需要时不时去查看配置才能理解代码
调试阶段不直观,不容易定位到Bug的问题所在。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
MyBatis特点
-
简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件。易于学习,易于使用。通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
-
灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
-
解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
-
提供映射标签,支持对象与数据库的ORM字段关系映射。
-
提供对象关系映射标签,支持对象关系组建维护。
-
提供xml标签,支持编写动态sql。