1 SSM(SSM 框架集)

SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容),常作为数据源较简单的web项目的框架。

1-1 Spring

Spring就像是整个项目中装配Bean的大工厂在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂
Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地new一个对象,而是让Spring框架帮你来完成这一切。

1-2 SpringMVC

SpringMVC在项目中拦截用户请求,它的核心ServletDispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架struts

1-3 MyBatis

MyBatis是对jdbc的封装,它让数据库底层操作变的透明。MyBatis的操作都是围绕一个sqlSessionFactory实例展开的。MyBatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令

页面发送请求给控制器,控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据。

1-4 图解

在这里插入图片描述

2 Bean(描述Java的软件组件模型)

2-1 Bean定义

  • EJB 是Enterprise Java Bean的缩写,一个Bean扮演着应用程序素材的角色。
  • 它包含有一个functional interface(方法接口),一个life-cycle interface(生命周期接口),以及一个实现它所支援的商业方法的类别。
    Enterprise : 企业
  • 在Java模型中,通过JavaBean可以无限扩充Java程序的功能,通过JavaBean的组合可以快速的生成新的应用程序。对于程序员来说,最好的一点就是JavaBean可以实现代码的重复利用,另外对于程序的易维护性等等也有很重大的意义
  • 比如说一个购物车程序,要实现购物车中添加一件商品这样的功能,就可以写一个购物车操作的JavaBean,建立一个public的AddItem成员方法,前台Jsp文件里面直接调用这个方法来实现。如果后来又考虑添加商品的时候需要判断库存是否有货物,没有货物不得购买,在这个时候我们就可以直接修改JavaBean的AddItem方法,加入处理语句来实现,这样就完全不用修改前台jsp程序了。
文件名:FirstJavaBean.java

import java.io.*; // 导入包

public class FirstJavaBean {

	private String FirstProperty = new String(""); // 1属性
	
	public FirstJavaBean() {} // 无参构造
	
	public String getFirstProperty() { // get函数
		return FirstProperty;
	}
	public void setFirstProperty(String value) { // set函数
		FirstProperty = value;
	}
	
	public static void main(String[] args) { // 主函数
		System.out.println("My First JavaBean!");  // 输
	}
	
}

如果运行这个程序,就会出现下面的结果:
My First JavaBean!
  • 这是一个很典型的JavaBean的代表,简单地解释一下,FirstProperty是其中的一个属性(Property),外部通过get/set方法可以对这个属性进行操作,如果您写过VB的class的话,对这个就再也熟悉不过了。Main方法是为了测试程序用的,写JavaBean可以先不必加入到Jsp程序中调用,而直接用main方法来进行调试,调试好以后就可以在Jsp程序中调用了。

2-2 Bean应用

用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。

2-3 Bean发展

最初,JavaBean的目的是为了将可以重复使用的软件代码打包标准。特别是用于帮助厂家开发在综合开发环境(IDE)下使用的java软件部件。这些包括如Grid控件,用户可以将该部件拖放到开发环境中。从此,JavaBean就可以扩展为一个java web 应用的标准部件,并且JavaBean部件框架已经扩展为企业版的 Bean(EJB)

2-4 Bean需求

JavaBean是java类,属于某些特定的译码指导方针,并且扩展了适应性和范围,允许用户访问内部的属性和方法。通过这些,JavaBean类可以用于下列方法:
1. 在IDE中,JavaBean的功能允许应用开发者浏览其中的方法,即使JavaBean是被编译的,并且无法利用原始的源文件。
2. 在 Remote Method Invocation(RMI) 的分布式风格中,这项功能听起来并不让人兴奋,但是在未来的包含企业版的JavaBean后,将改变这种情况。
3. 为了JavaBean的属性值和状态可以保存到磁盘上

2-5 Bean注意事项

实际应用中,在表现对象或者处理前扩展JavaBean的设计非常有用。通常认为如果提供信息,web开发者将在功能上满足用户对JavaBean的需求。例如: HTML中显示敏感的数据时,用户可以屏蔽的条目,如密码、电话号码等。

  • 良好规划设计的JavaBean是值得信赖的。
  • Java 中的 null 不同于 SQL 中的 null。
public class NullTest { // Java 中的 null 不同于 SQL 中的 null测试程序。

	public static void main(String[] args) { // 主函数
	
		int I = 0;        // int I = null; // not a valid initialization
		
		String str = null; // null
		
		String strZeroOutValue = “”; // 
		
		StringBuffer sb = new StringBuffer(Null test: String initialized as null =);
		sb.append(str);  // null
		sb.append(“\n String representing a Zero Out Value:);
		sb.append(strZeroOutValue);
		
		System.out.println(sb.toString());
	}
}

这个程序将产生下面的结果:
Null test: String initialized as null = null
String representing a Zero Out Value:

  • 在JavaBean中, 我们将 I 变量 声明为一个 int, 我们必须处理与该变量相关的值,因为 I 默认的没有值,int 类型无法初始化为 null, 如果int 值没有进行明确的初始化,编译器将提示错误。
  • 执行 NullTest程序,将验证在文本中空字符串是空值的替代,用于显示 SQL 的插入和更新。如果我们需要删除一些信息,通过删除表单区域的文本,需要将数据库发送长度为0的字符串。
  • 尽管大多数数据库将空字符串作为空值进行操作,如果我们使用的数据库不支持处理空字符串的话,我们必须写入附加的java代码,来创建自己的SQL插入声明。
    例如:
if ( test.length == 0) {
    sb.append(null);
} else {
    sb.append(test);
}

2-6 Bean的范围

  • Scope 是一个具有生命时间的变量。JavaBean的范围在<jsp:useBean scope=”….>标志中右边进行表示。将产生一个JavaBean的快捷参考。
    说明:jsp服务器引擎将剥离<jsp。。。。标记。并且在最终用户的浏览器上无法显示实际代码。
    存在下面四种范围: 页面、 请求、 对话、 应用。

  • 页面、请求 范围:

    页面和请求范围的JavaBean有时类似表单的bean , 这是因为他们大都用于处理表单。表单需要很长的时间来处理用户的输入,通常情况下用于页面接受HTTP/POST或者GET请求。另外页面和请求范围的bean可以用于减少大型站点服务器上的负载,如果使用对话Bean,耽搁的处理就可能会消耗掉很多资源。

  • 对话 范围:

    对话范围的JavaBean 主要应用于跨多个页面和时间段: 例如填充用户信息。 添加信息并且接受回馈,保存用户执行页面的轨迹。对话范围JavaBean保留一些和用户对话 ID 相关的信息。这些信息来自临时的对话cookie ,并在当用户关闭浏览器时,这个cookie将从客户端和服务器删除。

  • 应用 范围:

    应用范围通常应用于服务器的部件,例如 JDBC连接池应用监视拥护计数其他参与用户行为的类。在Bean中限制HTML的产生:理论上,JavaBean 将不会产生任何HTML,因为这是jsp层负责的工作;然而,为了动态消息提供一些预先准备的格式是非常有用的。产生的HTML将被标注的 JavaBean方法返回。


!!!这里有一些非常重要的事情:
  1. 不要试图在JavaBean返回的HTML中放置任何字体尺寸。并不是所有的浏览器都相同。很多浏览器无法处理完整的字体尺寸。
  2. 不要试图在JavaBean返回的HTML中放置任何脚本或者DHTML。向页面直接输出脚本或者DHTML相当于自我毁灭,因为某些浏览器版本在处理不正确的脚本时会崩溃(非常少但是有)。如果用户的JavaBean在运行时是动态的推出复杂的HTML语言,用户将陷入调试的噩梦。另外,复杂的HTML将限制JavaBean的寿命和灵活性。
  3. 不要提供任何的选择。如果用户使用不同的系统浏览页面,可以提供一种可以替换的方法。

2-7 Bean主要区别

Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被部署在诸如Websphere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问EJB容器 是EJB组件的代理,EJB组件由容器所创建和管理

3 EJB容器

企业 Bean(EJB 组件)是包含商业逻辑的 Java 编程语言服务器组件。EJB 容器提供对企业 Bean 的本地访问和远程访问。

企业 Bean 分为三种类型:会话 Bean、实体 Bean 和消息驱动 Bean。
会话 Bean 表示瞬态对象和进程,并且通常由单个客户机使用。
实体 Bean 表示持久性数据,通常保留在数据库中。
消息驱动 Bean 用于将消息异步传送到应用程序模块和服务中。

容器负责创建企业 Bean、将企业 Bean 绑定到命名服务以使其他应用程序组件可以访问企业 Bean、确保仅授权的客户机有权访问企业 Bean 的方法、将 Bean 的状态保存到持久性存储、高速缓存 Bean 的状态,以及在必要时激活或钝化 Bean。


J2EE中容器充当中间件 的角色。主要容器包括:

  • WEB容器:
    给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要由WEB服务器来实现,例如:tomcat ,weblogic ,websphere等。该容器提供的接口严格遵守J2EE规范中的web application 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器
  • EJB容器:
    Enterprise java bean容器 更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。

WEB容器和EJB容器在原理上是大体相同的,更多的区别是被隔离的外界环境
WEB容器更多的是跟基于HTTP的请求打交道,而EJB容器不是。它是更多的跟数据库、其它服务打交道。
但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节,直接引用环境变量session ,request,response就行、EJB不用关心数据库连接速度、各种事务控制,直接由容器来完成。


4 我的理解Bean

4-1 Java和Bean

  • Java和性能类库的Beans,产生了Bean,这个类提供了一些通用的Bean控制方法。
    在这里插入图片描述
  • Java中管理Bean容器:Web容器 和 EJB容器。

4-2 Spring和Bean

Spring就像是整个项目中装配Bean的大工厂。

5 对象,类,包,模块,组件,容器,框架 的理解

5-1 对象(Object)——世界上的 小明

在java的世界里,对象是通过属性方法来分别对应事物所具有的静态属性和动态属性。

5-2 类(Class)——世界上的 人类

用于描述同一类型的对象的一个抽象的概念。

  • 对象和类的关系:
    类是具有共同的属性名称和行为的一组对象的抽象,而对象则是一个类的真实的例子。

5-3 组件(component):

组件也是抽象的概念,可以理解为一些符合某种规范的类组合在一起就构成了组件。
他可以提供某些特定的功能。J2EE来说,有什么servletjspjavabeanejb都是组件。但实际他们都是类,只不过有他们特殊的规定

  • 组件和类的关系:
    符合某种规范的类的组合构成组件。

5-4 容器(Container):

容器也叫做组件容器,组件容器是一种比较特殊的组件,它可以包含其他的组件。我们可以把组件放在组件容器中。反之,如果一个组件不是组件容器,则其中不能包含其他的组件。

组件容器也是一种组件,所以一个组件容器可以放在另一个组件容器中。 组件容器的出现使得事情变得复杂了起来。我们可以把组件放在组件容器里,也可以把组件容器放在另一个组件容器里,这样就形成了有层次的组件结构。

  • 容器和组件的关系:
    容器是特殊的组件,可以包含其他组件的组件。

5-5 框架(framework):

就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。java框架就是一些类和接口的集合,通过这些类和接口协调来完成一系列的程序实现。框架又叫做开发中的半成品,它不能提供整个WEB应用程序的所有东西,但是有了框架,我们就可以集中精力进行业务逻辑的开发而不用去关心它的技术实现以及一些辅助的业务逻辑。我们熟知的Structs和Spring就是表示层和业务层框架的代表。

  • 框架和组件的关系:
    框架是一组组组件构成的。

5-6 架构:

软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口()来实现。

  • 架构和框架的关系:
    框架不是构架。架构确定了系统整体结构、层次划分,不同部分之间的协作等设计考虑。框架比架构更具体,更偏重于技术涉嫌。对于同一架构(比如Web开发中的MVC),可以通过多种框架来实现
    在这里插入图片描述

6 SpringBoot

Spring Boot是由Pivotal团队提供的全新框架。
设计目的:是用来简化新Spring应用的初始搭建以及开发过程。
该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置 。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

6-1 发展改革

2013年,Pivotal团队开始研发SpringBoot。
2014年4月,发布全新开源轻量级框架的第一个SpringBoot版本。

6-2 发展改革

6-2-1 Spring框架:

Spring框架是Java平台上的一种开源应用框架,提供具有控制反转(IoC)特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。

Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化。利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。


  • 控制反转(IOC)——实现 Java对象管理

Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法

Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件类上特定Java注解来配置对象,开发者可以通过依赖查找依赖注入来获得对象。


  • 面向切面编程(AOP)——实现 事务管理、远程访问;基于代理模式;

Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,同时运行时可配置;

AOP框架主要针对模块之间的交叉关注点进行模块化Spring框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。

Spring框架下的事务管理远程访问等功能均可以通过使用SpringAOP技术实现。Spring的事务管理框架为Java平台带来了一种抽象机制,使本地和全局事务以及嵌套事务能够与保存点一起工作,并且几乎可以在Java平台的任何环境中工作。

Spring集成多种事务模板,系统可以通过事务模板XMLJava注解进行事务配置,并且事务框架集成了消息传递缓存等功能。

Spring的数据访问框架解决了开发人员在应用程序中使用数据库时遇到的常见困难。它不仅对Java:JDBC、iBATS/MyBatis、Hibernate、Java数据对象(JDO)、ApacheOJB和ApacheCayne等所有流行的数据访问框架中提供支持,同时还可以与Spring的事务管理一起使用,为数据访问提供了灵活的抽象。

Spring框架最初是没有打算构建一个自己的WebMVC框架其开发人员在开发过程中认为现有的StrutsWeb框架的呈现层和请求处理层之间以及请求处理层和模型之间的分离不够,于是创建了SpringMVC


6-3 特点

好处:
SpringBoot基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。

另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。

SpringBoot所具备的特征有:
(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARsWARs
(2)内嵌 Tomca t或 Jetty 等 Servlet容器
(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
(4)尽可能自动配置Spring容器;
(5)提供准备好的特性,如指标、健康检查外部化配置
(6)绝对没有代码生成,不需要XML配置。

6-4 重要策略

SpringBoot框架中还有两个非常重要的策略:开箱即用约定优于配置

  • 开箱即用,Outofbox
    是指在开发过程中,通过在MAVEN项目的pom文件中添加相关依赖包,然后使用对应注解代替繁琐的XML配置文件以管理对象的生命周期。这个特点使得开发人员摆脱了复杂的配置工作以及依赖的管理工作,更加专注于业务逻辑。
  • 约定优于配置,Convention over configuration
    是一种由SpringBoot本身来配置目标结构,由开发者在结构中添加信息的软件设计范式。这一特点虽降低了部分灵活性,增加了BUG定位的复杂性,但减少了开发人员需要做出决定的数量,同时减少了大量的XML配置,并且可以将代码编译、测试和打包等工作自动化。

SpringBoot应用系统开发模板的基本架构设计 从 前端 到 后台 进行说明:

  • 前端常使用模板引擎,主要有FreeMarkerThymeleaf,它们都是用Java语言编写的,渲染模板并输出相应文本,使得界面的设计与应用的逻辑分离,同时前端开发还会使用到BootstrapAngularJSJQuery等;在浏览器的数据传输格式上采用Json,非xml,同时提供RESTfulAPI
  • SpringMVC框架用于数据到达服务器后处理请求;到数据访问层主要有HibernateMyBatisJPA等持久层框架;数据库常用MySQL;开发工具推荐IntelliJIDEA

6-5 安装步骤

从最根本上来讲,Spring Boot就是一些库的集合,它能够被任意项目的构建系统所使用。简便起见,该框架也提供了命令行界面,它可以用来运行和测试Boot应用。

框架的发布版本,包括集成的CLI(命令行界面),可以在Spring仓库中手动下载和安装。一种更为简便的方式是使用Groovy环境管理器(Groovy enVironment Manager,GVM),它会处理Boot版本的安装和管理。Boot及其CLI可以通过GVM的命令行gvm install springboot进行安装。在OS X上安装Boot可以使用Homebrew包管理器。为了完成安装,首先要使用brew tap pivotal/tap切换到Pivotal仓库中,然后执行brew install springboot命令。

要进行打包分发的工程会依赖于像Maven或Gradle这样的构建系统。为了简化依赖图,Boot的功能是模块化的,通过导入Boot所谓的“starter”模块,可以将许多的依赖添加到工程之中。为了更容易地管理依赖版本和使用默认配置,框架提供了一个parent POM,工程可以继承它。

参考文章

CSDN:
EJB容器:https://blog.csdn.net/ReyzeLamp/article/details/81003900
百科:
SSM:https://baike.baidu.com/item/SSM/18801167?fr=aladdin
Bean:https://baike.baidu.com/item/Bean/3792612?fr=aladdin
SpringBoot:https://baike.baidu.com/item/Spring%20Boot/20249767?fr=aladdin

开心一刻

CSDN高亮 怎么展示?
语法:

<mark style="background-color:yellow">Scope</mark> 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐