/ 学习笔记  

Java Web开发入门总结篇

Java Web 相关概念

在Java开发中很多概念性的名词,对于一个开发人员来说,是有必要了解它们的基本概念和含义的,要不然在看一些技术文章时会很懵,或者会混淆一些基础概念性的东西。就此,我对自己所理解的一些概念性的东西进行简单的梳理。

Java EE:(Java Platform Enterprise Edition)是Java面向企业应用的一个平台,类似于一种标准规范,就目前的各种表达如J2EE,JavaEE,JEE其实说的都是同一个东西。JavaEE 比JavaSE (Java Platform, Standard Edition)增加面向企业的开发支持,包括Servlet,WebSocket,EL,EJB 等。

Servlet:是Web开发离不开的组件,Servlet 是一套用于处理 HTTP 请求的 API 标准,也可以理解为运行在Server端的小程序,用于响应客户端的HTTP请求。和Servlet对应的有一个Applet,这是运行于客户端的一种小程序组件,主要应用于web浏览器端。

另外,不得不提的是JSP(Java Server Pages),它是一种高度抽象的Servlet,JSP在运行期间会被编译成Servlet,其实本质上Servlet和JSP没啥区别,但JSP写起来要方便的多。

EJB: (Enterprise JavaBean)也是JavaEE的一个组件,面向更加复杂的企业业务,对于Web开发来说,EJB不是必须的。对于上面提到的Servlet,如果要运行的话需要Servlet Container,而常用的Container包括Tomcat,JBoss,Jetty等。对于EJB而言,同一样也需要EJB Container,JBoss提供了EJB的支持,但Tomcat并不支持EJB。

SSH:(Struts+Spring +Hibernate)是一个Java Web开发的合成框架。Struts进行流程控制,Spring进行业务流转,Hibernate进行数据库操作的封装。事实上JavaEE开发可以仅使用Servlet和JSP技术,在JSP上构建View,实现业务逻辑。但随着技术的进步和发展,纯JSP技术可能并不能满足业务需求和开发效率的要求,所以衍生了一些列如SSH的结合框架。

Struts更多的是面向JSP和View,而Spring则是一个非常庞大的框架,其中包括了SpringMVC,SpringBoot 以及 SpringCloud 等用于 Web 开发的工具。而Hibernate则是一种ORM框架,是一种对象关系映射关系,简化了数据的处理和访问。

SSM:(Spring+SpringMVC+MyBatis)同样是一个Java Web开发的合成框架,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,dao层四层。Spring实现业务对象管理,Spring MVC负责请求的转发和视图管理,MyBatis作为数据对象的持久化引擎。

至此,关于Java Web开发的一些概念词汇大致梳理了一遍,但都没有详细讲解它们的基本原理和架构,这需要在具体的实践中去体验。另外需要注意的是区分JavaEE,Java Web,Spring它们的关系,JavaEE可以理解为是一种Java的标准,而Java Web则是指Java的应用开发方向,而Spring则是Java Web开发的框架。

Spring 框架模块

Spring有七大功能模块,分别是Spring Core,AOP,ORM,DAO,WEB,Context,MVC。

spring

每个模块的作用如下:

  • 核心容器(Spring Core):核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IoC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

  • Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

  • Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

  • Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

  • Spring Context:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。

  • Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

  • Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

Ioc Container:反转控制模式它是Spring的一个基础,也是最重要的。它不创建对象,但是描述创建对象的方式,在代码中也不直接与对象和服务连接,但在配置文件中描述了哪一个组件需要哪一项服务。在Spring框架中,IoC容器的实现模式主要有两种是:

  1. 通过JavaBean属性(例如 setter 方法)分配依赖性。
  2. 依赖性以构造函数的形式提供,不以JavaBean 属性的形式公开。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**IoC容器创建 HelloWorldService 对象,是通过 setter 方法传递 HelloWorld 对象到HelloWorldService。**/

public class HelloWorldService {

private HelloWorld helloWorld;

public HelloWorldService() {

}
// 依赖注入
public void setHelloWorld(HelloWorld helloWorld) {
this.helloWorld = helloWorld;
}

public HelloWorld getHelloWorld() {
return this.helloWorld;
}
}

Spring MVC

Spring web MVC框架提供了MVC(模型 - 视图 - 控制器)架构和用于开发灵活和松散耦合的Web应用程序的组件。 MVC模式导致应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑)分离,同时提供这些元素之间的松散耦合。

  • 模型(Model)封装了应用程序数据,通常它们将由POJO类组成。
  • 视图(View)负责渲染模型数据,一般来说它生成客户端浏览器可以解释HTML输出。
  • 控制器(Controller)负责处理用户请求并构建适当的模型,并将其传递给视图进行渲染。

模型 - 视图 - 控制器(MVC)框架是围绕DispatcherServlet设计的,它处理所有的HTTP请求和响应。

DispatcherServlet

DispatcherServlet的请求处理工作流:

  1. 在接收到HTTP请求后,DispatcherServlet会查询HandlerMapping以调用相应的Controller。

  2. Controlle接受请求并根据使用的GETPOST方法调用相应的服务方法。 服务方法将基于定义的业务逻辑设置模型数据,并将视图名称返回给DispatcherServlet。

  3. DispatcherServlet将从ViewResolver获取请求的定义视图。
  4. 当视图完成,DispatcherServlet将模型数据传递到最终的视图,并在浏览器上呈现。

Spring Boot

SpringBoot 是构建在 SpringMVC 基础上的新一代 Web 开发框架。相比 SpringMVC,SpringBoot 的配置更简单,上手更容易。在纯的Spring MVC配置中,要启动一个web程序demo,需要进行很多配置,包括一些复杂的Annotation,Controller是需要理解和明白的。但是在Spring Boot中,减少了大量的配置,提供了一种简单应用程序入门的方式。

Spring Boot会根据使用@EnableAutoConfiguration批注添加到项目中的依赖项自动配置应用程序。spring boot应用程序的入口点是包含@SpringBootApplication注释和main方法的类。
Spring Boot使用@ComponentScan注释自动扫描项目中包含的所有组件。为了更好的适应包扫描机制,避免一些特殊的配置工作,可以参考下面的工程结构。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
com
+- example
+- myproject
+- Application.java
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- web
| +- CustomerController.java
|
  • root packagecom.example.myproject,所有的类和其他package都在root package之下。

  • 应用主类:Application.java,该类直接位于root package下。通常我们会在应用主类中做一些框架配置扫描等配置,我们放在root package下可以帮助程序减少手工配置来加载到我们希望被Spring加载的内容

  • com.example.myproject.domain包:用于定义实体映射关系与数据访问相关的接口和实现

  • com.example.myproject.service包:用于编写业务逻辑相关的接口与实现

  • com.example.myproject.web:用于编写Web层相关的实现,比如:Spring MVC的Controller等

使用IDEA Spring Boot工程的两种方法

  1. 使用Maven构建项目:通过访问https://start.spring.io/ 生成一个基础项目下载解压,用IDE 以Maven项目导入。

  2. 使用Intellij IDEA中的Spring Initializr工具,直接创建生成。

简单总结

以上就是我关于Java Web,以及Spring框架的了解,至于Spring Cloud还没来得及去仔细学习,最开始自己是使用Eclipse构建项目,觉得Eclipse是世界上最好的IDE,但自从入坑Java web项目后,需要配置Tomcat,编写Servlet和JSP,进行各种Annotation以及SSH和SSM环境的搭建,真的是太麻烦了,常常在深夜红着眼睛和各种配置BUG做斗争,也时常因为环境配置问题而导致心态奔溃选择了放弃。但自从使用了IDEA,使用了Spring Boot,搭建应用分分钟搞定,再也不会因为环境配置的问题而烦恼,终于可以快乐地写代码了,于是我就已经知道我再也回不到Eclipse时代了。