背景:觉得在学习JavaWeb方面 简单的了解一下 相关的发展历程,有助于自己把握和联系所要掌握的知识发展脉络。加深自己的理解。看了不少的文章,简单做了些整理。
大致的时间线
事件 | 说明 | 时间 |
---|---|---|
b浏览器诞生 | 伯纳斯 李(berners-lee) | 1990年 |
www诞生 | 伯纳斯 李(berners-lee) | 1991年8月 |
可以后端生成动态页面 | CGI(common gateway interface) | 1993年 |
java诞生 | Sun公司在Sun world会议上正式发布Java | 1993年5月 |
发布 JDK 1.0 | 1996年1月 | |
JavaBean 出现 | 发布JDK 1.1 增加了 JIT (即时编译) | 1997年2月 |
Servlet 出现 | 是采用java技术的CGI程序 | 1997年7月 |
EJB 1.0 出现 | 企业级JavaBean | 1998年3月 |
JDK1.2 发布 | 出现 J2ME, J2SE, J2EE | 1998年12月 |
JSP 出现 | 是基于Java servlet的web开发技术 | 1999年6月 |
tomcat 3.x 出现 | 实现了servlet2.3 和 jsp1.1的规范 | 1999年 |
POJO 提出 | Rebecca Parsons and Josh MacKenzie 提出POJO | 2000年9月 |
struts 1.0 发布 | 2001年6月 | |
Hibernate1.0 发布 | 一位澳大利亚27程序员 觉得很多Bean实体实在太麻烦,之后开发了一个符合ORM的Hibernate | 2001年11月 |
Spring1.0 发布 | 一个开源框架 IOC AOP xml配置 | 2004年3月 |
JDK1.5 发布 | 更名 jdk5;出现注解 ,泛型 …J2EE–> Java EE | 2004年10月 |
Spring MVC 1.0 发布 | ||
struts 2 发布 | 2006年 | |
Spring 2.5 发布 | 支持注解 | 2007年11月 |
sun公司被收购 | 2009年4月 | |
Spring 4.0 | 完全支持 Java 8 | 2013年11月 |
Spring boot 1.0 | 2014年1月 | |
Spring cloud 1.0 | 2015年3月 | |
Spring 5.0 | 2017年 | |
Spring boot 2.4 | 2021年 | |
Spring cloud 3.0 | 2021年 |
各个发展时期
1, CGI
-
CGI 全称叫 common gateway interface 是http服务器与机器上其他程序进行通信的一个接口。(很古老了 可以说是)
-
作用
最初为了使得 静态页面 向动态的页面的转变。开发了CGI,实现了可以交互的web应用程序
也就是动态网页
-
大致的工作流程:要动态的生成一个页面 就要启动一个新的进程运行CGI程序。
-
不足:十分的消耗时间 和 资源。
2、Servlet
- servlet 最初是由sun公司(于2009年4月20日被甲骨文将其收购)开发出来的。
作用
:主要就是用于 接受来自浏览器的请求 然后 在服务器上处理相应的业务 生成相应的页面 返回浏览器。优点
:比之前的CGI 更加快了。解决了CGI的不不足。不足
:对于页面的处理还是十分的低效。因为输出HTML标签使用的还是CGI 是一句一句输出的 十分的不方便。
//页面标签输出。
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write(" <meta charset=\"utf-8\">\r\n");
out.write(" <meta name=">\r\n");
out.write(" <title> </title>\r\n");
out.write("</head>\r\n");
out.write("<body ");
out.write("</body>\r\n");
out.write("</html>\r\n");
3、JSP(Java server pages)
3.1 网络的基本架构:
数据层,业务层,表现层(data layer,business layer, presentation layer)。Servlet用来写业务层 是比较强大的 但是用来些表现层 那就显得比较臭了。
3.2 JSP的诞生
- jsp也是sun公司推出的。是借鉴了 微软的ASP推出的。使用 <%= %>,<%! %>…等一系列的标签 是的在jsp中可以 嵌入java代码。
- 目的:
html标签解耦
- JSP本质上还是Servlet,内部还是使用Servlet类进行编译解析的。
优势和不足
:虽然 处理在Servlet在表示层的开发噩梦,但是对于,嵌入了大量的java代码 维护起来十分不方便。
3.3 Tomcat
- 最初是Jakarta(Apache发起的)下的一个子项目,是为了JavaServlet技术而开发的。把Servlet嵌入到特定的webServer中就是
Servlet容器
。 - sun公司创建的一个Servlet容器是 JavawebServer
- Apache创建了JServ 一个与Apache服务器集成的Servlet引擎。
- 在1999年 sun公司把JavaWebServer的源码贡献给ASF,和ASF(apache基金会)的Jserv合并 出现了tomcat。第一个版本就是tomcat 3.x, 在1999年发布。实现了Servlet2.2 和 jsp1.1的标准
- 2001年发布了 tomcat4.x 名为Catalina。 这是里程碑的版本。
4、JSP+JavaBean(EJB) (Model1时代)
4.1 JavaBean 是什么
-
JDK1.1发布之后 就出现了JavaBean。也可以叫
实体类
-
首先:可以说JavaBean 是一种编写Java类的一种
规范
一种描述实体的规范,便于封装和重用。所以官方说是可重用组件
-
JavaBean类 必须为公共类 public修饰。
-
得有public修饰的 无参构造函数。
-
所有的属性 得使用private 修饰。
-
为所有属性 编写 set 和 get方法。
-
这个类需要序列化。
import java.io.Serializable; //1,类是 public的 //5,实现序列化接口 public class Person implements Serializable { //2,属性私有 private String name; //3,无参构造 public Person() { } //4 get方法 public String getName() { return name; } //4 get方法 public void setName(String name) { this.name = name; } }
-
4.2 目的:解耦页面数据
4.3 具体流程:
- 其中 JSP分别处理了 表现层 控制层的事情。JavaBean处理模型层的事情。
4.4 不足
- 其中JSP中高度耦合,是的JSP中代码十分复杂,嵌套了大量的Java代码是的维护也不很方方面。
5、JSP+ServLet+JavaBean(+service) (Model2时代)
5.1 MVC思想的倡导
- M: model 业务模型
- V: view 用户视图
- C: controller 控制器
- 其中:JSP 负责View展示。Servlet 作为控制器 Javabean 负责业务模型及相关操作
5.3 目的:解耦控制层
5.2 流程:
- JSP 以HTML 和 JSP标签为主。用于接收用户的输入 和 服务器的输出
- Servlet 主要是完成控制,接收请求, 调用相应的业务(JavaBean),根据调用得劫夺找到一个 JSP页面进行响应。
- JavaBean 完成所有得处理过程 但是需要由JSP 和 Servlet的调度。
- service 定义了业务的接口 和 相应的实现类。
5.3 不足:
- 主要是由于 JavaBean 过于臃肿 并不能完全作为M层的存在 JavaBean可以在细分:
业务逻辑层
数据持久化层
- 页面一多 servlet也会变得很多。
6、POJO,JavaBean,EJB区别和联系
6.1 EJB
-
全称
叫 Enterprise JavaBean 企业级JavaBean。在JavaBean的基础上增加了业务方法 -
作用
:简单概括:就是把编写的软件中那些需要执行制定的任务的类,不放到客户端软件上,而是打成包放到一个服务器上。
6.2 POJO :
-
Plain Ordinary Java Object (普通的Java对象) 也就是 简单的JavaBean,就是为了和EJB做一个区别。
-
历程:有人(Rebecca Parsons and Josh MacKenzie)觉得EJB比较麻烦 不是每次都用的上 所以整出了这么一个称呼。上面的那个普通是和EJB 所说的。
-
要素
- class共开
- 属性 私有
- set 和 get方法
-
pojo 示例:
public class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
6.3 JavaBean看4.1
7 框架之 JSP+Struts
struts 是基于MVC思想 设计并开发的一款经典的技术产品。
7.1 目的:解决控制层共用问题
7.2 功能:
- struts 针对JSP,推出一套struts的标签,从而使得jsp种没有Java的代码。
- struts 针对servlet 提供了Action类代替了servlet,这个类能够进行一些请求过滤和自动转码的功能。
7.3 不足:漏洞太多 安全性不好
8 框架之 JSP+Struts+Hibernate
8.1 目的:解耦数据库
- Hibernate 是持久层的框架,可以让程序员无需操作数据表,直接操作对象。
- Hibernate 框架最关键的技术是 数据持久化,也就是将数据保存到持久层的过程
- Hibernate 使用数据库 和 配置信息作为应用程序提供持久化服务,从配置文件中读取数据的相关参数,将持久化类和数据库中的数据表对应。
- Hibernate 是利用 反射机制 实现持久化对象操作的。
9 框架之 Jsp+Struts+Spring+Hibernate
目的:解耦控制层 和 数据层
- Rod Johnson在2002 觉得当时的EJB 过于臃肿,不是所有的项目都是要使用到了EJB的这样的大型框架的。他提出了一种基于普通Java类(POJO)和依赖注入的更简单的解决方案。---->这就是Spring的前身
出现的问题: 在Action类中调用
- Spring框架主要是有两个功能。
- IOC:控制反转
- 也就是说 一个类要调用另外一个类的时候 不用 通过new 关键字创建。
- 而是交给 Spring框架 创建 分配 和 管理。这就是所谓的
控制反转
- AOP:面向切面编程
- 可以做一些日志的打印和输出,用于提示程序执行过程中的一些具体的操作等。
- Spring 2.5之后 开始支持注解。
10 框架之 Jsp+Struts2+Spring+Hibernate
目的:页面和控制层解耦
- Struts2 是以 WebWork为核心展开,采用拦截器的机制来处理用户的请求,这样的设计使得业务逻辑控制器 和 Servlet API 完全脱离开。
11 框架之 Jsp+Spring+SpringMVC+Hibernate
目的:Struts的安全问题
- Spring MVC 通过“基于注解”的方式 代替了 Struts 并通过Controller类代替了Action的功能。
- 因为很多配置信息 都是放在Controller类中配置 所以降低了.xml文件的配置的复杂度。
12 框架之 Jsp+Spring+SpringMVC+Mybatis
目的:Mybatis 比 Hibernate 更好的适应业务的复杂性
pring+SpringMVC+Hibernate
目的:Struts的安全问题
- Spring MVC 通过“基于注解”的方式 代替了 Struts 并通过Controller类代替了Action的功能。
- 因为很多配置信息 都是放在Controller类中配置 所以降低了.xml文件的配置的复杂度。
12 框架之 Jsp+Spring+SpringMVC+Mybatis
目的:Mybatis 比 Hibernate 更好的适应业务的复杂性
- Mybatis 很容易上手,开发的速度很快,学习的门槛比较低。最重要的是Mybatis的SQL优化比Hibernate的好,可以减少查询字段。