首页 > 编程语言 >JavaFrame

JavaFrame

时间:2023-10-28 19:11:26浏览次数:38  
标签:Java JavaFrame 对象 Spring Maven Servlet 客户端

1. 课程回顾

在本人大三时修了JavaWeb编程和Java框架编程,这两门的课程结构大致是这样:

JavaWeb: Java框架:
Web开发基础 Maven工具
Servlet基础 Spring框架
ServletAPI核心接口 SpringMVC
会话跟踪 数据持久化技术
数据访问与JavaBean Bootstrap,Javascript,Iframe,Ajax
JSP AOP和拦截器
EL和JSTL SpringBoot
过滤与监听 SpringSecurity
其他框架(日志与测试框架)

1.1 JavaWeb

1.1.1 Web基础

  • Web(world wide web)全球广域网,万维网。
  • HTTP协议又称为超文本传输协议,基于请求/响应模式。
  • URI:Uniform Resource Identifier,统一资源标识符,标识web资源的字符串。
  • URL: Uniform Resource Locator,统一资源定位符,指明传输协议的字符串,用于指定客户端连接到服务器端所需要的信息。

1.1.2 Servlet

  • Servlet(Java服务器小程序)是用Java语言编写的服务器端程序,用于处理和响应客户端的请求。

1.1.3 JDBC

JDBC(Java DataBase Connectivity,Java数据库连接):是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,由一组用Java语言编写的类和接口组成。

JDBC API主要做三件事

与数据源建立连接。
发送SQL语句(查询与更新)到数据源。
处理结果。

JavaBean: Sun公司将JavaBean定义为可以复用的软件组件。JavaBean是Java中的一个组件技术,类似于微软的COM组件,其本质是一个封装了一系列属性和方法的类。

  • 作为JavaBean的类中所有属性都应定义为private,以实现封装。
  • JavaBean类必须有一个无参公共构造器,以便JSP引擎调用来实例化类对象。
  • JavaBean组件应实现序列化。

序列化:是将对象数据分解成字节流,写入字节流,以便存储在文件中。
反序列化:是打开字节流,从字节流中读取对象并重构对象.

将数据库中的表与JavaBean组件形成映射关系可以实现JavaBean组件的持久化。但由于关系型数据库与面向对象机制不同,为了方便存储JavaBean的某时状态,JavaBean规范提供了序列化机制来通过文件系统存储JavaBean快照。JavaBean组件序列化只需实现java.io.Serializable接口即可。

MVC:Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码。

image-20231028162543748

1.1.4 会话跟踪

通过会话,可以实现对客户端和服务器端交互的连续性进行跟踪。
一个会话就是一个连续不断地在客户端和服务器端进行请求响应的一系列交互。

每个请求就是该会话的一个组成部分。
服务器应该有能力识别来自同一客户端的请求。

会话开始:

当一个未知的客户端首次发 送请求给服务器时,就意味着一个会话的开始。

会话结束:

当客户端明确结束会话或者在指定的时间期限内服务器未接收到任何来自该客户端的请求时,就意味着会话结束。

  1. 服务器端接收到客户端的首次请求时,初始化一个会话,并分配给该会话一个惟一的标识符。
  2. 服务器端将该标识符作为响应的一部分返回给客户端。
  3. 客户端的后续请求中需将该标识符包括进请求中。
  4. 服务器通过该标识符将请求与对应的会话联系起来。

会话跟踪技术主要有以下几种:
1)Session技术

  • 当一个Session开始时,Servlet容器会创建一个HttpSession对象,并同时在内存中为其开辟一个空间,用来存放此Session对应的状态信息(比如SessionID,会话创建时间,最后一次请求时间等)。
  • Servlet容器为每一个HttpSession对象分配一个唯一的标识符,即SessionID,同时将SessionID发送到客户端,由浏览器负责保存此SessionID。
  • 当客户端再次发送请求时,将此SessionID同时发送给服务器端。Servlet容器从请求对象中读取SessionID,再根据SessionID的值找到相应的HttpSession对象。每个客户端对应于服务器端的一个HttpSession对象。

2)Cookie技术

  • Cookie是服务器端发送给客户端的一小段文本,保存在客户端的内存或磁盘上。
  • Cookie是一种可以让服务器对客户端信息进行保存和获取的机制。
  • 默认情况下,Cookie是保存在内存中的,如果用户关闭浏览器,则Cookie也就失效了。如果想让Cookie长久地保存在磁盘上,可以通过setMaxAge()方法设置其过期时间即可。
  • 建议在web开发中不要使程序过度依赖Cookie,因为用户可以选择关闭浏览器的Cookie功能,这样就有可能会造成程序无法正常运行。

3)URL重写技术

  • Servlet规范中有一种补充的会话管理机制,它允许不支持Cookie的浏览器也可以与服务器保持连续的会话。这种补充机制要求在同一会话的每个URL后附加一个特殊参数,这个参数值即为SessionID。这种把SessionID以参数形式附加在URL地址后的技术就是URL重写。
  • 如果用户发送的请求消息中没有Cookie头字段,Servlet容器就认为浏览器不支持Cookie,它将根据请求URL参数中的SessionID来实施会话跟踪。
  • 采用URL重写技术实现会话比采用Cookie对象实现会话要安全可靠。
  • 但是使用URL重写时需要注意:应该对所有的URL地址进行编码,包括web应用中的所有超链接。

1.1.5 JSP

JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。该技术为创建显示动态生成内容的Web页面提供了一个简捷而快速的方法。

  • JSP是嵌入了Java代码的HTML代码,而Servlet则是嵌入了HTML代码的Java代码。
  • 尽管JSP从结构上来说不同于Servlet,但实际运行时,JSP是转换为Servlet来运行的。
  • JSP容器将JSP页面解析为一个对应的Servlet类,然后编译、装载、执行该Servlet类。此Servlet类的输出流发送至客户端。

JSP页面生命周期

image-20231028164139692

JSP页面元素

image-20231028164207072

1.1.6 EL和JSTL

EL(Expression Language,表达式语言), 一个完全独立的拥有操作符、语法和保留字的简单语言,而非Java类库

EL的语法形式:${ EL表达式 }, 在JSP页面中可以通过page指令配置EL的启用状态。<%@ page isELIgored="true|false" %>
EL写出的是表达式

可以使用常量、变量(属性attribute)、隐含对象
但不能声明变量,不能构造对象实例,不能调用方法
可以进行算术、关系、逻辑、条件、属性等运算

EL能够减少JSP页面中的脚本和表达式的使用。

EL运算符优先级

image-20231028164619728

EL运算符:属性和集合运算符

属性访问运算符.
常用于访问Javabean对象中的属性
如:a.b表示a对象的b属性

集合访问运算符[ ]
既可以访问某个对象的属性,也可以访问集合、数组、Map中的某个元素。
属性需要用双引号括起来。
如:a[b]表示集合a中的关键字b所指向的元素。

image-20231028164824485

JSTL: JSTL is the Java Server Pages Standard Tag Library. 即 JSP标准标签库。

以下是常用的核心标签库和函数标签库:

Core http://java.sun.com/jsp/jstl/core c <c:tagname ...>
Functions http://java.sun.com/jsp/jstl/functions fn fn:functionName(...)

image-20231028165229375

使用核心标签库中的标签时,必须在jsp文件头加入以下代码:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

JSTL核心标签库标签共有13个,功能上分为4类:
1)表达式控制标签:out、set、remove、catch
2)流程控制标签:if、choose、when、otherwise
3)循环标签:forEach、forTokens
4)URL操作标签:import、url、redirect

1.1.7 过滤和监听

过滤: 过滤器提供了一种面向对象的模块化机制,用以将公共任务封装到可插入的组件中,这些组件通过web.xml文件或@WebFilter注解来声明,并动态地处理。

image-20231028165723131

image-20231028165751365

监听:

事件监听器机制是观察者模式的一种。通过把事件源和事件处理流程以监听器的方法隔离开来,减小了主流程与被触发事件的执行流程间的耦合,便于代码的维护和对事件处理流程的扩展。

image-20231028170105548

事件源首先需注册事件监听器对象。
事件发生后,事件源将事件对象发送给已经注册的所有事件监听器。监听器对象随后会根据相应的事件处理方法响应该事件。

在Java Web应用程序中,ServletContext对象、HttpSession对象、ServletHttpRequest对象,以及对应作用范围中的属性就是事件源。
可能发生的事件主要是这三个对象或其中的属性的创建、销毁、属性变化等。

1.2 Java框架

1.2.1 Maven

Maven是一个项目管理工具。它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
Maven可以通过一小段描述信息来管理项目的构建,报告和文档。

pom全称为Project Object Model, 简单说就是要对构建的项目进行建模,将要构建的项目看成是一个对象Object

在maven中一个项目使用唯一的坐标来表示,它包括groupId, artifactId, version, classifier, type(也叫packaging)这五部分。一个项目肯定不是孤立存在的,可能会依赖其他项目,所以这个项目对象还应该有dependencies属性。项目在构建的时候需要什么工具,用什么名字来命名最后的生成项,这就需要build属性来描述。

在Maven中,项目依赖的第三方库所在的位置就叫做仓库。在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。

Maven 仓库有三种类型:
本地(local)
中央(central)
远程(remote)

Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。
运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。

Maven 本地仓库默认为 %USER_HOME%.m2\repository目录。

可以通过修改配置文件 settings.xml 文件中节点来更改本地仓库的位置。

Maven 中央仓库是由 Maven 社区提供和管理的仓库。中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。可通过配置镜像仓库来方便使用。推荐阿里云中央仓库。
https://maven.aliyun.com/mvn/view

image-20231028171827195

image-20231028171843402

image-20231028171903874

1.2.2 Spring 和Bean

1.2.2.1 Spring

广义的Spring:image-20231028172157508

通常我们说的Spring指的是SpringFramework

核心容器的模块是核心,包括配置模型和依赖项注入机制。
除此之外,Spring 框架为不同的应用程序体系结构提供了基础支持,包括消息传递,事务性数据和持久性以及 Web。
它还包括基于 Servlet 的 Spring MVC Web 框架,以及并行的 Spring WebFlux 反应式 Web 框架

image-20231028172402599

IoC,Inversion of Control,控制反转
面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。
IoC意味着不再由我们主动通过new进行创建对象,而是由Ioc容器来控制对象的创建。
IoC中最基本的Java技术就是“反射”编程。反射就是根据给出的类名(字符串)来生成对象。这种编程方式可以让应用在运行时才动态决定生成哪一种对象。
反转是指由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象。

DI,Dependency Injection, 依赖注入
组件之间依赖关系由容器在运行期决定,即由容器动态的将某个依赖关系注入到组件之中。
通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。
“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。

IoC和DI其实是同一个概念的不同角度描述

  • 控制反转强调的是:获得依赖对象的方式反转了。
  • 依赖注入DI更明确描述了“被注入对象依赖IoC容器配置依赖对象”。

BeanFactory接口提供了配置框架和基本功能,能够管理任何类型的对象。
org.springframework.beans.factory.BeanFactory接口
ApplicationContext是BeanFactory的子接口,添加了更多企业特定的功能。
org.springframework.context.ApplicationContext接口

ApplicationContext代表 Spring IoC 容器,并负责实例化,配置和组装 Bean。

1.2.2.2 Bean

在 Spring 中,构成应用程序主干并由 Spring IoC 容器管理的对象称为 Bean。 Bean 是由 Spring IoC 容器实例化、组装和管理的对象。

Bean由Spring IoC 容器来管理,常采用xml配置文件或注解的方式来进行配置。
在xml文件中使用配置bean
在java代码中使用@Component,@Controller,@Service等注解配置bean

Bean的定义主要包含以下元数据:

  • 包限定的类名:通常,定义了 Bean 的实际实现类。
  • Bean 行为配置元素,用于声明 Bean 在容器中的行为(作用域,生命周期回调等)。
  • 引用其他 bean 进行其工作所需的 bean,即依赖项。
  • 要在新创建的对象中设置的其他配置设置,例如,池的大小限制或在 Management 连接池的 bean 中使用的连接数。

image-20231028173127076

每个 bean 具有一个或多个标识符。这些标识符在承载 Bean 的容器内必须唯一。

  • 一个 bean 通常只有一个标识符。但是,如果需要多个,则其他标识符视为别名。

在Spring的 XML文件中配置bean时

  • 可以使用id属性为bean精确指定一个标识符,例如"myBean","userDao"等
  • 还可以使用name属性为bean引入其他别名,多个别名使用逗号(,),分号(;)或空格分隔
  • 也可以不指定id和name,此时由容器为该bean生成一个唯一的名称

Bean 命名约定

  • 在命名 bean 时约定将标准 Java 约定应用于实例字段名称。也就是说,bean 名称以小写字母开头,使用驼峰式大小写。例如accountManager,accountService,userDao,loginController等。
  • 命名的一致性使配置更易于阅读和理解。

1.2.2.3 依赖注入

依赖注入分为属性注入(设值注入)和构造器注入以及自动装配。

自动装配Autowire,自动装配无法注入简单值类型。

1.2.3 SpringMVC

1.2.3.1MVC模式

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

image-20231028173937167

image-20231028174018670

image-20231028174129648

image-20231028174319742

SpringMVC 是一种基于 Java 的实现 MVC模式的请求驱动类型的轻量级 Web 框架。
属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面。

Spring Framework 5.0开始引入了新的响应式Web框架(reactive-stack web framework),名为“Spring WebFlux”

image-20231028174446728

image-20231028174516579

image-20231028174557053

image-20231028174628281

image-20231028174642943

image-20231028174657015

1.2.4 SpringBoot

image-20231028180350034

2. Sevlet和SpringMVC与SpringBoot以及Spring

Servlet是服务器端小程序,本质上是属于Controller层的,举个例子,LoginServlet和LoginController是划等号的。

Spring MVC是Spring的一个模块,是一个web框架。通过Dispatcher Servlet, ModelAndView 和 View Resolver,开发web应用变得很容易。它是对Servlet进行深层次的封装,底层就是Servlet。

Spring Boot实现了自动配置,降低了项目搭建的复杂度。
因为Spring框架需要进行大量的配置,Spring Boot可以自动配置,让项目设置变得很容易。

Spring是开源框架,需要大量配置

1)Spring JDBC === 对JDBC的简单封装
2)Spring MVC === Spring MVC框架的实现
3)Spring Security === 安全管理框架
4)Spring AOP === 面向切面编程
5)Spring ORM === 对象关系映射,集成orm框架(Mybatis,Hibernate)
6)Spring Test === Spring测试,提供junit 和 mock测试功能

可以说SpringBoot是Spring的集成或者扩展,让开发测试以及部署更加方便了。

3. 各种术语

image-20231028152716477

  • DTO:Data Transfer Object,即数据传输对象。一般用于向数据层外围提供仅需的数据,如查询一个表有50个字段,界面或服务只需要用到其中的某些字段,DTO就包装出去的对象。可用于隐藏数据层字段定义,也可以提高系统性能,减少不必要字段的传输损耗。

  • BO:Business Object,即业务对象。一般用于web层向view层封装并提供需要展现的数据。

  • VO:Value Object,有的也称为View Object,即值对象或页面对象。。一般用于web层向view层封装并提供需要展现的数据。

  • PO:Persistant Object,即持久化对象。可以理解为数据库中的一条数据即一个BO对象,也可以理解为POJO经过持久化后的对象。

  • DAO:Data Access Object,即数据访问对象。就是一般所说的DAO层,用于连接数据库与外层之间的桥梁,并且持久化数据层对象。

3.1一些其他的术语:

JavaBean:Bean的原本意思是豆,在Java中指的是类,JavaBean <=> Java类,而在Spring里,被Spring管理的对象可以称为Bean,例如EntityBean。

Entity:其特点是:数据表对应到实体类的映射。

POJO:Plain Ordinary Java Object,即简单普通的java对象。一般用在数据层映射到数据库表的类,类的属性与表字段一一对应。

标签:Java,JavaFrame,对象,Spring,Maven,Servlet,客户端
From: https://www.cnblogs.com/wansuns/p/17794483.html

相关文章