JavaWeb学习-基础知识


前言

本博客仅做学习笔记,如有侵权,联系后即刻更改

科普:


参考文章

相关概念

JavaEE

  1. 对JavaSE的扩展

加入了面向企业开发(网络和Web开发)的支持
包括Servlet,WebSocket,EL,EJB

  1. 和JavaSE比

更多jar包,以javax开头
javax.servlet,javax.websocket

Servlet和Container

  1. Servlet

Servlet 是一套用于处理 HTTP 请求的 API 标准

  1. Container

JavaEE只提供了Servlet的标准
真正运行servlet,需要Container

EJB和Spring框架

  1. EJB( Enterprise JavaBean)

JavaEE的一个组件,面对更复杂的企业业务开发(可选)

  1. Spring框架
    可视为EJB的替代品

包括很多web开发工具

  • SpringMVC,SpringBoot 以及 SpringCloud等

JavaEE开发

相关框架

仅通过Servlet和JSP技术也可以开发

SSH三大web开发框架

Struts,Spring,Hibernate

SpringMVC

初步实现

MVC是什么?
一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)
在这里插入图片描述

  1. Servlet配置
    对外提供了一个名为 DispatcherServlet 的类
  • 相当于是 SpringMVC 和 Servlet API 的一个交界点
  • SpringMVC 当中对于请求处理的一个分发器
  1. Controller实现
    实现网络收发请求
  2. SpringMVC配置
    将Controller加入beans列表

相关概念

  1. Annotation(注解)
    对源代码的一种标注

常见注解举例

  • @Override
    重写
  • @Deprecated
    标识为废弃代码
  • @Target
    指明这个注解可以用在哪些语言元素上,例如方法,类型,函数参数等。
  • @Retention:指明注解的存储方式,默认的存储方式是 CLASS
    SOURCE(只存在于代码中,编译完成后被丢弃)
    CLASS(存储在生成的 class 文件中,但是会被 VM 在运行期丢弃)
    RUNTIME(存储在 class 文件中,并且 VM 在运行期间也会保留,因此可以使用反射获得)
  • @Documented
    指明使用了这个注解的代码,其生成的 Javadoc 中会把此注解展示出来
  • @Inherited
    它标记对于父类的注解,会被子类做继承,默认行为是不继承。
  1. JavaBean
    编写数据 Model 时的一种编程惯例

实现要求

  • 有无参的构造器
  • 所有的成员都是 private,对外暴露 getter 和 setter
  • 实现 Serializable
Spring 把很多东西包括自己的一些组件也都称为 Bean,是对 JavaBean 的进一步泛化

工作流程

 配置SpringMVC的Controller

在 Controller 类中

  1. 对于请求的分发处理,@RequestMapping 的作用很明显
  • 在初始化 Controller 的时候,SpringMVC 把 @RequestMapping 注解当中的信息进行处理
    之后就可以根据这些信息,把请求分发到对应的 Controller 当中的对应方法里
  1. @ResponseBody 表明函数的返回值应该被用作 HTTP 返回的 body 处理

SpringMVC 用我们返回的字符串生成 HTTP 响应,返回给了客户端。

Spring loC

Spring最基础部分是 loC Container,也是Spring MVC的基础

相关概念

  1. loC:控制反转
    面对对象编程的一种设计原则,降低计算机代码的耦合度
    实现方式:依赖注入和依赖查找

依赖注入

  • 基于接口
    实现特定接口以供外部容器注入所依赖类型的对象
  • 基于set方法
    实现特定属性的public set方法,来让外部容器调用传入所依赖类型的对象
  • 基于构造函数
    实现特定参数的构造函数,在新建对象时传入所依赖类型的对象
  • 基于注解

在私有变量前加“@Autowired”等注解

  • 相当于定义了public的set方法,但是因为没有真正的set方法
    从而不会为了实现依赖注入导致暴露了不该暴露的接口
    因为set方法只想让容器访问来注入而并不希望其他依赖此类的对象访问

依赖查找

  • 通过调用框架提供的方法来获取对象
    获取时需要提供相关的配置文件路径、key等信息来确定获取对象的状态
  1. Context、Bean

loC Container:被称为Context

  • 主要工作就是使用对象的定义,加上 Configuration,生成 Bean
    代码上体现为 ApplicationContext 接口
  • Container 依赖于 Configuration metadata(配置元数据)去初始化对象

Bean

  • 由 Container 管理的对象

相关配置修改

Spring Bean

  • 对象依赖

依赖注入

  • Constructor 注入
  • Setter 注入
  • Annotation-Based 配置
    本质上 @Autowired 就是把原先在 XML 中对于对象的引用配置,转移到了 Java 代码当中
  • 直接在代码中创建出 Bean

被称为Component-Scan

  1. 修改 XML 配置,打开 Component-Scan 功能
  2. 使用@Service 和 @Component 标示逻辑和服务层的组件,使用 @Repository 标示持久层的组件
    Spring 中定义了若干用于注册 Bean 的 Annotation
    component-scan 也就是告诉 Spring 去扫描标示了这些 Annotation 的类,将它们用于 Bean 的注册

Java-Config

彻底去掉对于 XML 文件的依赖,完全使用 Java 代码进行配置
  1. 创建一个配置类

@Configuration 是指示该类为 Bean 配置的源头

  1. 修改我们使用的 Context

使用 AnnotationConfigApplicationContext 代替了之前的 ClassPathXmlApplicationContext
然后把 AppConfig.class 作为参数传给了 Context

XML文件 和 Bean 的配置方法比较

  1. XML文件配置

优点

  • 使用 XML 的好处在于更新 Bean 之后不需要重新编译代码
  • 同时有利于将若干 Bean 组织在一个文件里,方便集中管理

缺点

  • 在于 XML 语法的“噪声”太大,没有工具帮助的情况下书写很繁琐
  • 同时 XML 本身没有很好的类型检查和语法检查机制,使得 XML 也很容易写错
  1. 使用代码配置

好处

  • 在于更加简洁清晰,同时不容易出错

缺点

  • 在于 Bean 的配置会分散在各个文件当中,以及需要重新编译代码才能更新配置。

Bean

创建是完全由 Spring Container 进行控制的

生命周期和作用域

Bean 在 Container 的控制下,有自己的生命周期和作用域

  • 默认的作用域是 Singleton
    在 Container 内该 Bean 只会被创建一次,后续的所有对于该 Bean 的请求都会返回同一个对象
  • Prototype
    每次对于 Bean 的请求,都会创建一个新的对象

Lifecycle Callback

Spring 允许 Bean 在创建和销毁的时候注册回调:
initMethod、destroyMethod

同类名Bean处理

使用 @Primary

  • 有多个 candidate 可以选择的时候,Spring 会使用标注了 @Primary 的

@Qualifier

  • 需要用到 Person 的地方进行标记:@Qualifier(“id”)

Servlet3

Servlet API 从 3.0 也支持基于 Annotation 的配置
  1. 继承 ServletContainerInitializer 来实现替代 web.xml 的作用
  2. 要求在 deploy 目录中加入
    META-INF/services/javax.servlet.ServletContainerInitializer 文件
    来指示 ServletContainerInitializer 的实现者,用于 Servlet 的初始化
  3. SpringMVC 已经完成了这件事情
    通过接口WebApplicationInitializer,可以进行类似 web.xml 的配置
    注意这一层封装,实际上是想把 Servlet API 和 Spring API 隔离开

纯 Java SpringMVC 配置

  1. 使用 AnnotationConfigWebApplicationContext 去初始化 DispatcherServlet
  2. 修改 AppConfig
    进一步简化 Java 配置的过程,Spring 还提供了一个名为 AbstractAnnotationConfigDispatcherServletInitializer 的类

Maven

构建和包管理:Java生态系统的重要组成部分,以Gradle 和 Maven 两大工具为主

定义

Java 构建工具,包含了依赖管理,版本维护,自动化构建等功能

@RestController

实际上就是在 @Controller 的基础上,给所有的函数返回值增加了 @ResponseBody

  • Spring 本身是不带 JSON 功能的,通过 Maven 引入一个很常用的 JSON 库 Jackson
    @EnableWebMvc 会帮我们配置好 JSON 有关的响应 Handler。如果没有,是不能返回 JSON 响应的

SpringBoot

构建在 SpringMVC 基础上的新一代 Web 开发框架

优越性

  1. @SpringBootApplication 这个 Annotation
    它会帮我们打开 @EnableWebMvc,以及 @ComponentScan 功能,自动配置
  2. 继承 SpringBootServletInitializer
    整个应用就具备了部署到 Servlet Container 的能力

"${...}" 写法
是 Spring 独有的 SpEL(Spring Expression Language)语法,等同于 JSP 的 EL 表达式

配置外部化

通过外部环境(文件)来进行配置
将配置和代码隔离开来,有助于降低配置的耦合性

@ConditionalOnBean(name = “dataSource”)

这样配置,当已经存在一个名为 dataSource 的 Bean 时,thisBean 才会生效

  • 还有 @ConditionalOnMissingBean,@ConditionalOnClass的自动配置可以实现

Spring Data REST

简化 REST 服务的开发

ORM:对象关系映射

是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的资料之间的转换
创建了一个可在编程语言里使用的“虚拟对象数据库

ORM相当于中继资料

面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的
而关系数据库则是从数学理论发展而来的

相关概念

  1. JPA

Sun 官方提出的一套 Java 持久化规范,也可以简单理解为 ORM 的规范

  1. Hibernate

Java 持久化框架,它实现了 JPA 规范,可以被用作 JPA Provider

  1. Spring Data JPA

Spring 的 JPA 组件
它提供了将 JPA 融入 Spring 框架的支持,它默认使用 Hibernate 作为 JPA Provider

总结

小小励志

有些事你现在不做,一辈子都不会做了。
如果你想做一件事,全世界都会为你让路。
《搭车去柏林》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值