9.java web的发展 javaweb是什么 J2EE发展历史 规范 J2EE是什么 发展背景 组件标准 J2EE好处作用 Servlet 含义 本质 发展 java在web中的发展 servl

javaweb 本质上来说就是使用java 语言来解决企业web应用中一系列技术体系与规范;

jdk1.2  playground 

此版本中把java技术体系拆分为三个方向

J2SE J2EE J2ME

这个大家都知道

其中之一的J2EE,就是面向企业级开发的,但是具体的到底是什么?

举一个例子

你肯定在你的手机上使用过耳机,基本上绝大多数的耳机和你的手机都是通用的,你有想过为什么吗?

这就是因为他们有统一的规范接口标准

目前国际上通用的手机耳机接口标准有两个,一个是OMTP的标准,一个是CTIA的标准,都是3.5毫米接口

古人云:"无规矩不成方圆",也是类似的道理

试想一下,如果每个厂家生产的耳机插头粗细不同,每个手机厂家生产的手机耳机孔粗细不同,会发生什么情况?

所以想要通用,就需要达成一致,在共同的规范下

J2EE的发展背景

在许多企业级应用中

例如数据库连接、邮件服务、事务处理等都是一些通用企业需求模块

这些是通用并且是可复用的模块

如果每次在开发中都由开发人员来完成的话,将会造成开发周期长和代码可靠性差等问题。

于是许多大公司开发了自己的通用模块服务。这些服务性的软件系列统称为中间件

如果每个公司对于这些需求都自己开发一套中间件,势必这些中间件是不兼容的,也不可能对用户提供一致的接口

所以自然要有牛逼的话事人来协调这个事情

J2EE就是基于JAVA技术解决上述需求的一系列标准

其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格

也即是说,你只要遵守了规范,那么产品就可以直接应用其中,具备良好的兼容性

一定要注意到的是,

J2EE核心是一组技术规范与指南,这组规范提供了企业级应用的完善的解决方案

他是规范与指南,是一整套的解决方案,并不是某个工具或者某个代码块

J2EE这个概念并不是某种技术,而是一堆规范(实现意义上可以说是一堆技术)组成的

组件标准规范

J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成

它对开发基于Web的多层应用提供了功能支持

1:JDBC(Java Database Connectivity)

2:JNDI(Java Naming and Directory Interface)

3:EJB(Enterprise JavaBean)

4:RMI(Remote Method Invoke)

5:Java IDL/CORBA(通用对象请求代理架构是软件构建的一个标准 )

6:JSP

7:Java Servlet

8:XML

9:JMS

10:JTA

11:JTS

12:JavaMail

13:JAF(JavaBeans Activation Framework)

这一整套的解决方案,是基于组件的,具有平台无关性的

J2EE使用多层的分布式应用模型

应用逻辑按功能划分为组件,各个应用组件根据他们所在的层分布在不同的机器上。

一个完整的“多层企业开发架构”、

以“容器”和“组件”的形式提供服务、

一套“厂商中立的开放技术规范”、

对开发者隐藏了不同平台和“中间件”的技术细节、实现了企业级应用间的“无缝集成”等等。

这是一段经常用来描述J2EE

现在可以不用纠结上面这些到底是什么,到底怎么用

你只需要知道,它定义了一整套的技术规范

对于厂商,J2EE意味着一套开放标准,加入这个标准,

他们的产品就可以运行在各种不同的操作系统和工作环境下,成为一个成熟的企业运算体系中可替换的部件;

对于开发者,J2EE是一套现成的解决方案,采用这个方案,企业应用开发中的很多技术难题(包括跨平台移植、事务处理、安全性等等)就会迎刃而解

J2EE也是被动出现的,诞生之前,市面上已经存在着很多程度不一的“准J2EE中间件”了

主要用于解决三大类问题:事务处理、分布式对象管理和Web请求处理

97年Sun在发布一款“Java Web Server”的同时第一次公布了Servlet API,1998年问世的JSP正好迎合了各大厂商的需要

所以基于Java的Web引擎,也在此时成了企业级Java解决方案的一个必不可少的部分。

正是由于java解决方案的大热,才催生了J2EE

说白了,java出现了之后,提供了针对web基于java语言解决方案实现,然后各大厂家发现很好,所以一拥而上,大力发展

然后发展的太快了,为了避免走歪了路,所以出台了规范,这就是J2EE

就是提供了java应用于web 的一个技术标准  或者说 限制 或者说 规范

Servlet 是 Java Web 技术的核心基础

servlet定义的是一套处理网络请求的规范

web发展史中提到

1997年,Servlet技术问世,1998年,JSP技术诞生。紧接着EJB问世

Java Servlet、Java Server Pages (JSP)和Enterprise Java Bean (EJB )是Java EE中的核心规范.

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器

用Java编写的服务器端程序,运行在 Web 服务器或应用服务器上的程序,

主要功能在于交互式地浏览和修改数据,生成动态Web内容,

作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

Servlet是Java为了支持动态web 的"一个CGI的实现" (加引号了)

他的目的和CGI是相同的-根据用户请求的不同动态的处理并返回资源

如果说为什么出现,其实想想也很简单,市场需求那么大

sun作为一个科技公司,java作为一种跨平台的语言,也是一种网络语言,Java语言也在迅速发展

涉足web是必然的事情

servlet的出现其实比J2EE标准的出台要早,正是servlet才是java涉足web领域的一个开端

CGI能够让web服务器 根据运行时的具体情况,运行外部程序的能力,动态生成HTML页面

那么, servlet就是让web服务器 根据运行时的具体情况,运行java代码的能力,动态生成HTML页面

也就是说servlet在概念上可以理解为是一种特殊的CGI

但是,他比传统的CGI工作的更好

与传统的 CGI 和许多其他类似 CGI 的技术相比

1).Java Servlet 具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资。在未来的技术发展过程中,Servlet 有可能彻底取代 CGI。

2).在传统的 CGI中,每个请求都要启动一个新的进程,如果 CGI 程序本身的执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间。

而在 Servlet 中,每个请求由一个轻量级的 Java 线程处理(而不是重量级的操作系统进程)。

3).在传统 CGI 中,如果有 N 个并发的对同一 CGI程序的请求,则该CGI程序的代码在内存中重复装载了 N 次;

而对于 Servlet,处理请求的是 N 个线程,只需要一份 Servlet 类代码。在性能优化方面,Servlet 也比 CGI 有着更多的选择。

广义上是:基于Java技术的Web组件,被容器托管,用于生成动态内容。

本质上也仍旧还是java类只是要遵循Servlet的规范,没有main方法,由容器管理调度

工作流程

WEB服务器接收一个用户请求;

WEB服务器将请求转交给WEB服务器关联的Servlet容器;

Servlet容器找到对应的Servlet并执行这个Servlet;

Servlet容器将处理结果返回给WEB服务器;

WEB服务器把结果送回用户;

Servlet运行于支持Java的应用服务器中。

从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

可以看得出来,servlet需要依赖servlet容器

但是他们又是各自发展的,这就是软件行业的经常做的一件事情,制定规范-解耦

他们按照统一的规范标准接口JSR340进行相互协作

Servlet诞生后,SUN公司很快发现了Servlet编程非常繁琐,这是因为你要在servlet中写页面,

每个页面都有很多公共的元素,那自然会有大量的冗余代码

而且,既然是写页面,自然开发Servlet必须精通网页前端和美工,否则怎么写页面?

而且是非常不直观的在Servlet中写前端代码,这使得实现各种页面效果和风格非常困难。

后来,SUN借鉴了Microsoft的ASP,正式提出JSP(Servlet1.1),已期望能代替Servlet。

此时还是属于静态模板的时代,在静态的展示模板中,写入java代码

写好的jsp页面经过一个JSP容器对JSP文件进行自动解析并转换成Servlet类来交给WEB服务器运行.

但是使用jsp就需要java代码与前端页面代码写到一个页面上,完全的耦合在了一起

前端开发人员会看到JSP中大量的令他困惑的后端代码,这跟他却没有关系

同样,Servlet开发人员也得在复杂的前端代码中找到其能写Servlet代码的地方;

javaBean是一种JAVA语言写成的可重用组件,可以理解为一种规范性的java类,一种数据模型

规范性也可以理解为限制性

他有独特的写法

  • 这个Java类必须具有一个无参的构造函数
  • 属性必须私有化。
  • 私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。

javaBean对象有其特别定义的,规范的命名规则

通常用于封装数据,对于遵循以上写法的JavaBean组件,其它程序可以通过反射技术实例化JavaBean对象,并且通过反射那些遵守命名规范的方法,从而获知JavaBean的属性,进而调用其属性保存数据。

所以你也可以认为就是

Javabean 就是可以和 jsp 页面传数据化简交互过程而产生的一种特殊"题材"的java类。

就好像文章中分为议论文记叙文等,还不都是文章?但是你通过摆事实、讲道理、辨是非等方法,来确定其观点正确或错误,树立或否定某种主张,这就叫做议论文,定义了这种题材,大家看到这个文章都会知道这是一篇议论文.

这种组件化的优势简化了代码的书写,而且跟易于维护.

通过要求限制以及命名规范,完成了对数据模型的统一

虽然每个类不一样,但是所有的javaBean格式都是一样的

他们都是属性私有,有公共的默认构造方法,有get/set其一或者都有

这就是组件化,这个要求限制,也限定了大家统一访问的形式方法,所以会更加易于维护

比如有一个属性name,我会知道调用他的getName获取值,如果没有javaBean规范,我就不会知道name的获取方法是什么

所以这句是JSP+JavaBean的模式

JavaBean会把网站中处理过程进行封装

这样的结果就是在JSP文件中仅仅是输入输出功能和控制功能

处理过程放在JavaBean中,然后在JSP中调用JavaBean的功能

解决了jsp页面中包含大量java代码的问题,更进一步的实现了前端展示页面与后端逻辑代码的分离

再后来为了更加彻底的分层,把jsp页面中的控制功能提取出来用servlet实现

所以,Servlet1.2出现了,再加上javaBean

这个版本的Servlet倡导了MVC思想:

JSP(V):将后端代码封装在标签中,使用大量的标签,JSP只用来写前端代码而不要有后台代码;

Servlet(C):Servlet完成Controller的功能再加上部分代码逻辑;

JavaBean(M):Servlet将数据发送给Model---JavaBean,Model也代表着被组织好的用于返回的数据。

最终,Model数据会被显示在JSP上(V)。

基本上到这里Servlet的大方向已经固定了

倡导了MVC思想的jsp+javabean+servlet虽然很强大了,但是并不是一个比较成熟的全栈式的web框架

对于大型项目,servlet过多,转向频繁,流程,配置等不易集中管理等等缺点

随后出现了Struts,提供了Action类来代替了servlet,这个Action类具有servlet的功能,并且能够进行一些请求过滤和自动转码的功能。

但是又有一个问题暴露出来,那就是我们调用DAO、Java bean等对象的时候

都需要在自身代码中构建它们的对象来使用

增加了程序的耦合性,这与我们:“高内聚、松耦合”的思想不符合

因而又出现了全栈式的框架spring

struts和Spring的整合,URL都要在struts配置文件中配置

当bean很多和URL对应的请求很多的时候,配置文件无疑会是很庞大的,这个就会使得配置起来很麻烦的费力

Spring MVC出现了。它通过“基于注解”的方式代替了struts,并且通过Controller类来代替和实现了Action的功能。

由于是基于注解的,所以很多的配置信息放在了Controller类中配置,从而降低了.xml文件的配置复杂度。

Servlet的发展进化史跟web的发展历史几乎一致,这也很好理解,她本就是用来解决web问题的

servlet自己什么都做不了

servlet需要依赖servlet容器,因为servlet根本都没有main方法

利用容器提供的方法

能够更加容易的让servlet和web服务器进行对话

更加专注于自己的业务逻辑,不用为了线程管理,安全性和网络通信编写代码

容器负责servlet生命周期的管理

容器会自动的为他接收的每个servlet请求创建新的java线程

利用容器还能够实现声明的方式部署描述文件来配置和修改安全性,而不是硬编码

而且,是容器把jsp翻译成真正的java,用户点击链接指向的是servlet而不是静态页面

一个常见的servlet调用过程

完整内容点击标题进入

1.计算机发展阶段

2.计算机组成-数字逻辑电路

3.操作系统简单介绍

4.计算机启动过程的简单介绍

5.计算机发展个人理解-电路终究是电路

6.计算机语言的发展

7.计算机网络的发展

8.web的发展

9.java web的发展

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏公众号文章

福利 | 架构师入门实战视频课程汇总(三)附下载地址

链接: https://pan.baidu.com/s/1YVA1HI_LwsICwVQw1KgjPA 

29520
来自专栏Albert陈凯

2018-06-07 小团队的自动化运维实践经验翟志军一些小团队的自动化运维实践经验

39930
来自专栏精讲JAVA

甲骨文称 Java 序列化的存在是个错误,计划删除

甲骨文计划从 Java 中剔除序列化功能,因其在安全方面一直是一个棘手的问题。 Java 序列化也称为 Java 对象序列化,该功能用于将对象编码为字节流......

11120
来自专栏Java社区

一招 | 利用脚本不限速下载百度网盘文件

31650
来自专栏跟着阿笨一起玩NET

《我的WCF之旅》博文系列汇总

WCF是构建和运行互联系统的一系列技术的总称,它是建立在Web Service架构上的一个全新的通信平台。你可以把它看成是.NET平台上的新一代的Web Ser...

6910

内存数据网格主要特性简介

将主存储器用作存储区域而不是使用磁盘是并不是一种全新的尝试。你可以在日常生活中发现许多使用主内存DBMS(数据库管理系统)(MMDB)执行比磁盘快得多的情况。一...

51340
来自专栏微信公众号:Java团长

高级Java程序员要具备哪些知识

每个人都有大梦想,作为程序员当然是想做一个程序大牛,毕竟 不想当将军的厨子不是好裁缝!那么要想成为好裁缝,不好程序员,应该需要哪些知识呢?搜罗了一下,还真不少呢...

15630
来自专栏编舟记

怎样才算学会PythonPython 实践基础

假如你已经有了编程基础,那么学习一门新语言的困难点绝对不在语法、语义和风格等代码层面上的,而在于语言范式(OO,FP还是Logic),语言的生态(如:依赖管理和...

18520
来自专栏Java技术栈

为什么比起 IntelliJ IDEA,我更喜欢 Eclipse…

23730
来自专栏大内老A

《我的WCF之旅》博文系列汇总

WCF是构建和运行互联系统的一系列技术的总称,它是建立在Web Service架构上的一个全新的通信平台。你可以把它看成是.NET平台上的新一代的Web Ser...

20080

扫码关注云+社区

领取腾讯云代金券