前言
主要是记录自己在学习JavaEE中遇见的问题以及思考,还有一些知识点。
1.JavaEE与JavaSE的区别
前两次的学习,知道JavaSE和JavaEE就是青春版和专享版(手动狗头),当然,这是开玩笑的,JavaEE就是企业版。但是一直没说这个区别在那,今天简单记录一下。
以下是JavaSE和JavaEE的主要区别:
- 定位:JavaSE是Java技术的核心和基础,适用于各种环境和应用场景;而JavaEE是Java技术面向企业级应用的扩展,专注于解决企业级应用的问题。
- 功能:JavaSE提供了Java语言的基本实现,包括面向对象编程、多线程、IO流等核心功能;而JavaEE则在此基础上增加了Web服务、分布式事务处理、安全性、消息传递等面向企业级应用的功能。
- 应用场景:JavaSE适用于桌面、服务器、嵌入式设备和实时环境等各种应用场景;而JavaEE则更适用于构建大型、复杂的企业级应用,如电子商务网站、企业管理系统等
JavaEE(Java Platform, Enterprise Edition)是Java平台的企业版,建立在JavaSE之上,为开发大型、分布式、可扩展的企业级应用提供支持。它包含了JavaSE的所有功能,并且还提供了一系列的API和服务,如Servlet、JSP、EJB、JMS等,用于开发Web应用、企业级应用服务器等。
说人话就是针对企业做了相对应的功能添加与优化。
2.MVC
2.1什么是MVC?
很久之前听过MVC架构,但当时并没有深入去了解其原理,这次学习完了总结一下。上期的Javaweb其实较远古版本是较为优秀的,但是发展下来需求功能越来越多,就造成了开发复杂 ,代码耦合性过高,维护起来成本太高了。因此就有了 新的开发思想,来个地基(架构),上面盖房子(开发)。速度快了,维护起来也方便。
接下来简单介绍下。
MVC架构,即Model(模型)-View(视图)-Controller(控制器)架构,是一种软件设计规范,主要用于组织代码,实现业务逻辑、数据和显示的分离。这种架构模式通过将应用程序的不同部分划分为三个主要组件,使得代码更加模块化、可维护,并且提高了代码的可重用性和可扩展性。
在MVC架构中,每个组件都有其特定的职责:
- 模型(Model):负责处理数据和业务逻辑。它包含数据和状态信息,以及处理这些数据的方法。模型不关心视图或控制器的具体实现,它只关注数据的处理。
- 视图(View):负责数据的展示,即用户界面。视图从模型获取数据,并将其以可视化的方式呈现给用户。视图不直接处理业务逻辑或数据,它只是将数据展示给用户。
- 控制器(Controller):作为模型和视图之间的协调者,负责接收用户的输入,根据输入调用相应的模型进行处理,并将处理后的数据传递给视图进行展示。控制器不处理数据或业务逻辑,它只是根据用户的输入和模型的状态来调度视图和模型之间的交互。
MVC架构的优点在于其低耦合性、高重用性、快速部署以及高可维护性。通过将应用程序的不同部分分离,MVC架构使得每个组件都可以独立开发和测试,降低了代码的复杂度,提高了开发效率。同时,由于模型、视图和控制器之间的松耦合,使得在需要修改或添加新功能时,只需关注特定的组件,而不会影响到其他部分的代码。
总之,MVC架构是一种有效的软件设计模式,它通过将应用程序划分为模型、视图和控制器三个组件,实现了业务逻辑、数据和显示的分离,提高了代码的可维护性、可重用性和可扩展性。
举个例子,还是过红灯吧,红灯信号变绿(view),大脑(controller)匹配过红灯的行为模式,绿灯了(model),大脑(controller)控制我们完成过马路。如果大脑(controller)发现是红灯(view),则会原地等待(model)。为了更好理解这个,简单举例,有不对的地方或者理解偏差的地方,欢迎大家指正哈!谢谢了。
2.2Model
在MVC(Model-View-Controller)模式中,Model(模型)是应用程序的核心部分,它代表业务数据和业务逻辑。模型通常包括数据访问对象、实体类和业务逻辑类等,它处理数据并提供业务规则。模型的主要职责是管理应用程序的数据状态和业务逻辑,但它并不直接处理用户界面或用户输入。模型可以为多个视图提供数据,提高代码的可重用性。
MVC模式将应用程序的业务逻辑、用户界面和用户输入分离开来,使得代码更易于维护、测试和扩展。通过Model,我们可以更专注于业务逻辑和数据处理,而将视图和控制器分别用于用户界面显示和用户交互处理,从而实现模块化的开发方式。
总的来说,MVC中的Model是应用程序数据处理和业务逻辑的核心,它与其他两个组件(视图和控制器)协同工作,共同实现应用程序的功能。
简单来说Model就是一种处理模型,我个人觉得它最最主要的作用还是对数据库数据的具体操作逻辑。数据的DAO层,就是负责底层数据库链接的那层。
2.3View
在MVC(Model-View-Controller)模式中,View(视图)主要负责显示应用程序的用户界面,是用户与之交互的界面层。它呈现从模型获取的数据,并根据控制器的指示来更新显示。
视图通常是由HTML、CSS和JavaScript等前端技术构建的网页或用户界面组件。它根据模型提供的数据来生成相应的输出,如文本、图像、图表等。视图不仅显示数据,还可以响应用户的交互事件,例如按钮点击、表单提交等,并将这些事件传递给控制器处理。
在MVC模式中,视图与模型和控制器保持松耦合的关系。视图不直接访问或修改模型中的数据,而是通过控制器来获取数据和发送更新请求。这种分离使得视图可以更加专注于用户界面的呈现和交互逻辑,而不需要关心数据处理和业务逻辑的实现细节。
总结来说,MVC中的View是应用程序的用户界面层,负责显示数据和响应用户交互,与模型和控制器协同工作,实现应用程序的整体功能。
个人理解就像一个人的外在体现,经常看的web界面就是我们常说的View,主要就是我们在使用程序作为程序使用者接触的这些东西。
2.3Controller
在MVC(Model-View-Controller)模式中,Controller(控制器)担任着协调模型和视图之间交互的关键角色。它接收用户的输入,如点击按钮或提交表单,并基于这些输入来决定如何更新模型和视图。
控制器的工作流程通常如下:
- 接收用户输入:控制器首先接收来自视图的用户输入或请求。
- 与模型交互:基于用户输入,控制器会与模型进行交互。这可能包括从模型中检索数据、更新模型的状态或调用模型的业务逻辑方法。
- 选择视图:控制器根据模型的状态和用户的请求,决定使用哪个视图来展示数据。
- 发送数据给视图:控制器将模型中的数据传递给视图,以便视图能够正确地呈现这些信息。
- 更新视图:视图基于从控制器接收到的数据和指令进行更新。这可以是简单的数据渲染,也可以是复杂的用户界面的变换。
控制器在MVC架构中起到了桥梁的作用,它确保模型和视图之间的通信是解耦的。这意味着模型和视图可以独立地进行修改和扩展,而不需要对彼此的代码进行大量的更改。
通过这种方式,MVC模式促进了应用程序的可维护性、可测试性和可扩展性。控制器专注于处理用户请求和协调模型与视图之间的交互,从而使得应用程序的逻辑更加清晰和模块化。
简单理解就是,我们常常说的“逻辑”,这个就是程序运行的逻辑。
3.Spring
3.1什么是Spring
Spring是一个轻量级的开源框架,主要用于简化Java开发。它提供了IoC(控制反转)容器和AOP(面向切面编程)框架,使得企业级应用的组件化开发变得更加简单、灵活、可维护。Spring框架的主要用途包括Web开发、数据持久化、事务管理以及整合其他技术等。
具体来说,IoC容器是Spring框架的核心功能之一,它负责对象的生命周期管理并自动注入依赖项,减少了手动编码的需求。AOP支持则允许开发者在不修改原有代码的情况下实现横切关注点,如数据验证、安全性等。Spring还提供了一系列的Web开发功能,如Spring MVC,用于简化Web应用程序的开发工作。同时,Spring支持多种持久化技术,如JPA、Hibernate、MyBatis等,可以轻松地实现数据持久化。
此外,Spring框架的轻量级特性使其仅依赖于少数几个第三方库,可以轻松地集成到现有的Java应用程序中。同时,Spring还支持模块化开发,可以按需选择需要的功能模块进行集成。
综上,Spring是一个功能强大且灵活的框架,它通过简化Java开发过程,提高了应用程序的可维护性和可扩展性。说人话就是我们说的程序的“地基”。在“地基”上面“盖房子”(开发)。
3.2IoC
单独写IoC是因为这个概念挺有意思的。
IoC,即控制反转(Inversion of Control),是一种设计思想,而不是具体的技术。它主张将对象的创建、初始化、销毁等控制权交由专门的容器(如Spring的IoC容器)来管理,而不是由开发者在代码内部直接控制。这种设计思想的核心目的是降低代码的耦合度,提高系统的灵活性和可维护性。
具体来说,IoC通过依赖注入(Dependency Injection)和依赖查找(Dependency Lookup)的方式来实现控制反转。依赖注入是指由IoC容器来负责将依赖的对象注入到需要它们的对象中,而不是由对象自己通过new或其他方式创建。依赖查找则是指IoC容器可以根据需要来查找和装配对象之间的依赖关系。
在Java开发中,IoC意味着将开发者设计好的对象交给容器控制,而不是在对象内部直接控制。这使得对象与对象之间是松散耦合的,利于功能复用,也使得整个程序的体系结构变得非常灵活。
Spring框架是一个很好的IoC容器实现,它提供了多种方式来管理对象及其依赖关系,如构造方法注入、属性注入等。通过使用Spring框架,开发者可以更加专注于业务逻辑的实现,而不需要过多关注对象的创建和管理。
简单说就是将一些功能由代码控制交给容器来控制,不需要进行具体代码编写了,只需要写好标记,容器会进行管理。
3.3Bean
之前一直搞不清什么是Bean对象,趁着现在记忆还热乎,感觉记录下来。
在Java开发中,Bean对象主要是指JavaBean。JavaBean是一种特殊的Java类,它遵循特定的规则,包括执行java.io.Serializable接口、提供无参数的构造器以及提供getter和setter方法访问它的属性。简而言之,JavaBean是用Java语言描述的软件组件模型,其实际上是一个类,这些类遵循一个接口格式,以便于使函数命名、底层行为以及继承或实现的行为标准化。
JavaBean的主要作用是封装数据,并提供对这些数据的访问和操作方法。通过使用JavaBean,我们可以将相关的属性和方法组织在一起,使代码更加清晰和易于维护。
在Spring框架中,Bean对象的概念得到了进一步的扩展和应用。Spring框架中的Bean是由IoC容器实例化、配置和管理的对象。Spring使用Bean来组织和管理应用程序中的各个组件,并通过依赖注入的方式将这些组件关联起来。Spring Bean可以是任何普通的Java对象,只要它们符合Spring Bean的规范,就可以被Spring容器管理和使用。
简单来说就是,IoC对象实例,具体来管理一些对象的“管理员”。
4.Struct2
刚才说的Spring是MVC框架,偏向于开发,也就是MVC中的MC,而Struct2则是偏向MV。
Struts2相较于传统的MVC模式,具有一些显著的优势。这些优势使得Struts2成为Web应用开发中一种受欢迎的选择。
- 首先,Struts2框架基于MVC设计模式,但它在MVC的基础上进行了扩展和优化。Struts2将模型、视图和控制器三者更紧密地结合在一起,提供了一种更为整洁和高效的MVC实现方式。这使得开发者能够更轻松地组织和管理代码,提高开发效率。
- 其次,Struts2框架具有灵活的配置和定制化开发能力。它允许开发人员通过配置文件来定义各个组件之间的关系和行为,实现灵活的配置和定制化开发。这使得开发者能够根据自己的需求快速搭建和修改应用程序,满足不同的业务需求。
- 此外,Struts2框架提供了丰富的标签库和工具类,使得页面开发更为简单和高效。开发人员可以使用这些标签和工具类来生成HTML表单、处理数据验证、显示数据等,简化了页面开发的过程。
- 另外,Struts2框架还内置了国际化支持,可以方便地实现多语言环境的切换。在配置文件中,可以定义多个语言的资源文件,根据用户的语言环境自动切换显示相应的资源。
- 此外,Struts2框架还支持与多种其他框架(如Spring、Hibernate等)的整合使用。这使得开发者能够利用这些框架的优势,实现更为复杂和强大的Web应用程序。
- 最后,Struts2框架还具有较好的性能和可扩展性。它使用值栈等技术来管理数据,避免了过多的性能损耗。同时,Struts2框架的模块化设计使得开发者能够按需选择所需的功能模块,实现灵活的功能扩展。
综上所述,Struts2相较于传统的MVC模式,在灵活性、配置定制化、页面开发、国际化支持、与其他框架的整合以及性能和可扩展性等方面具有优势。这使得Struts2成为Web应用开发中一种高效、可靠且灵活的选择。
我个人觉得这玩意更加偏向View,可能是整合的原因,更加侧重于这块。但是不是说不能单独用啊,Spring和Struct2都可单独使用,各有各的优点,结合起来会更加强大。
5.Hibernate和MyBatis
Hibernate和MyBatis都是Java中流行的ORM(对象关系映射)框架,它们各有优势和劣势,适用于不同的场景和需求。下面将对这两个框架的优缺点进行详细对比:
Hibernate的优缺点
优点:
- 透明性:Hibernate通过自动映射Java对象到数据库表,使开发者无需关心底层SQL细节,可以专注于业务逻辑的开发。
- 全自动:Hibernate提供了全自动化的持久化服务,如对象状态管理、事务处理等,降低了开发的复杂度。
- 强大的查询能力:Hibernate支持HQL(Hibernate Query Language)和Criteria查询,提供了丰富的查询功能。
- 移植性好:Hibernate支持多种数据库,通过修改配置文件即可轻松切换数据库。
缺点:
- 性能损耗:由于Hibernate提供了全自动化的服务,这可能会导致在某些情况下性能不如手动编写的SQL。
- 学习成本高:Hibernate的API和功能较多,对于初学者来说可能需要一定的时间来学习和掌握。
- 灵活度不足:在某些复杂的SQL查询或特定数据库操作上,Hibernate可能不如直接使用SQL灵活。
MyBatis的优缺点
优点:
- 灵活性强:MyBatis允许开发者直接编写SQL,对于复杂的SQL查询或特定的数据库操作,可以提供更高的灵活性。
- 易于优化:由于MyBatis直接操作SQL,开发者可以更容易地针对性能问题进行优化。
- 轻量级:MyBatis的架构相对简单,没有Hibernate那样复杂的内部机制,因此更轻量级。
- 集成性好:MyBatis可以很好地与Spring等框架集成,提供了良好的开发体验。
缺点:
- SQL维护:由于MyBatis直接编写SQL,当数据库结构发生变化时,可能需要修改大量的SQL映射文件,维护成本较高。
- 易错性:直接编写SQL可能导致SQL注入等安全问题,需要开发者注意SQL的安全性。
- 自动化程度低:相对于Hibernate,MyBatis的自动化程度较低,需要手动管理对象的生命周期和事务。
总结:
Hibernate和MyBatis各有其优劣势,Hibernate更适合那些需要快速开发、高度自动化和良好移植性的项目;而MyBatis则更适合那些需要高度灵活性和自定义SQL的项目。
ORM,全称Object-Relational Mapping(对象关系映射),是一种编程技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。简而言之,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。上述说的Hibernate是全ORM,Mybaits是半ORM。
6.Shiro框架
6.1什么是Shiro
Shiro框架是一款轻量级的Java安全框架,提供了身份认证、授权、加密和会话管理等功能。它可以集成到任何Java Web应用程序中,并且易于使用和扩展。Shiro的设计理念是简洁而灵活,不仅可以应用于Web应用程序,还可以应用于命令行、移动设备和分布式系统等各种应用场景。
Shiro支持多种认证和授权方式,可以通过插件机制轻松集成到其他框架中,满足不同应用场景的需求。同时,Shiro还提供了丰富的扩展点和事件机制,可以进行各种自定义功能扩展,实现更灵活的应用。
在安全性方面,Shiro自带多种加密和安全算法,如密码散列、数字摘要等,可以保护应用程序中数据、身份、角色等信息的安全性和完整性。同时,Shiro还提供了防止XSS、CSRF等攻击的防御机制,保证了应用系统的安全可靠。
此外,Shiro还提供了易于理解的API,使开发人员能够快速、轻松地集成到任何应用程序中,实现用户的认证和授权功能。它支持细粒度的授权控制,可以对用户进行角色和权限的管理,确保用户只能访问他们有权限的资源。
总的来说,Shiro框架是一个功能强大、灵活可扩展且安全可靠的Java安全框架,适用于各种应用场景,为开发人员提供了简便易用的工具来保障应用程序的安全性。
简单概括下,就是一个安全类框架,功能偏安全侧,认证机制做的比较好。具体其实挺复杂的,大家可以自己去了解。
6.2权限五张表
我觉得比较重要的关于权限这块的知识,就是这五张表了。
认证的五张表通常指的是在权限管理系统中用于记录用户、角色、权限以及它们之间关系的数据库表。这五张表分别是:用户表、角色表、权限表、用户角色关系表以及角色权限关系表。
- 用户表:用于存储用户的基本信息,如用户名、密码、联系方式等。
- 角色表:用于定义系统中不同的角色,每个角色可能对应着不同的职责和权限。
- 权限表:用于存储系统中的各种权限信息,例如对某个模块的读取、写入、删除等权限。
- 用户角色关系表:用于记录用户与角色之间的关联关系,即哪个用户拥有哪个角色。
- 角色权限关系表:用于记录角色与权限之间的关联关系,即哪个角色拥有哪些权限。
通过这五张表,可以方便地实现基于角色的访问控制(RBAC)模型,对用户进行细粒度的权限管理。在实际应用中,根据具体需求,可能还需要对表结构进行一定的调整和扩展。
请注意,不同的系统或框架可能会有不同的表设计和命名方式,上述五张表只是一个常见的示例。在实际项目中,应根据项目的具体需求和使用的技术栈来设计适合的数据库表结构。
这个是比较常见的权限结构了,做的不到位就会产生各种越权漏洞。
欧克,到这,再会。