Web应用的概念以及Java Web应用的发展路程

Posted 刘Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web应用的概念以及Java Web应用的发展路程相关的知识,希望对你有一定的参考价值。

简单介绍了Web应用的概念以及Java Web应用的发展路程。

1 动态Web 应用

Web 应用是指通过 Web 功能提供的应用程序。比如购物网站、网上银行、SNS、BBS、搜索引擎和 e-learning 等。互联网(Internet)或企业内网(Intranet)上遍布各式各样的 Web 应用。

原本应用 HTTP 协议的 Web 的机制就是对客户端发来的请求,返回事前准备好的内容。可随着 Web 越来越普及,仅靠这样的做法已不足以应对所有的需求,更需要引入由程序创建 html 内容的做法。

类似这种由程序根据请求动态的创建的响应内容称为动态内容,而事先准备好的内容称为静态内容。Web 应用则作用于动态内容之上,因此常被称为动态Web应用。

动态内容和静态内容:

Java的Web应用中的资源分为两种:

  1. 静态资源,能够被浏览器直接进行解析,并相应给客户端浏览器。比如Html css js。
  2. 动态资源,不能够被浏览器直接进行解析,会先将动态资源转换为静态资源,然后响应给客户端,比如JSP/Servlet。

2 早期的CGI

CGI(Common Gateway Interface,通用网关接口)是一种早期根据请求信息动态产生响应内容的技术。在 CGI 的作用下,程序会对请求内容做出相应的动作,比如创建 HTML 等动态内容。使用 CGI 的程序叫做 CGI 程序,通常是用 Perl、php、Ruby 和 C 等编程语言编写而成。

通过CGI,Web 服务器可以将根据请求不同启动不同的外部程序,并将请求内容转发给该程序,在程序执行结束后,将执行结果作为回应返回给客户端。也就是说,对于每个请求,都要产生一个新的进程进行处理。因为每个进程都会占有很多服务器的资源和时间,这就导致服务器无法同时处理很多的并发请求。另外CGI程序都是与操作系统平台相关的,虽然在互联网爆发的初期,CGI为开发互联网应用做出了很大的贡献,但是随着技术的发展,开始逐渐衰落。

CGI应用开发比较困难,因为它要求程序员有处理参数传递的知识,这不是一种通用的技能。而Servlet则帮助程序员封装好了请求和响应,所有的程序员只需要调用通用的API方法,使用起来更加简单

另外,之前提及的 CGI,由于每次接到请求,程序都要跟着启动一次,每一个CGI应用存在于一个由客户端请求激活的进程中,并且在请求被服务后被卸载。这种模式将引起很高的内存、CPU开销,而且在同一进程中不能服务多个客户,因此一旦访问量过大,Web 服务器要承担相当大的负载。后来随着Web应用复杂度的提升,并要求提供更高的并发处理能力,CGI逐渐不满足人们的需求!

3 Java的Servlet

Servlet是一种能在服务器上创建动态内容的程序。Servlet 是用 Java语言实现的一个接口,属于面向企业级 Java(JavaEE,JavaEnterprise Edition)的一部分规范,它定义了使用Java开发Web应用的规范。Servlet没有对应中文译名,全称是Java Servlet。名称取自 Servlet=Server+Applet,表示“(尤指Java 语言中在服务器上运行的)小型应用程序”。

Servlet 运行在与 Web 服务器相同的进程中,与Web服务器之间属于分工和互补关系。一个Servlet被客户端发送的第一个请求激活之后,该Servlet实例将常驻内存,等待以后的请求,并且每个请求将生成一个新的线程,而不是一个完整的进程,多个客户能够在同一个进程中同时得到服务,这种处理方式大幅度地降低了系统里的进程数量,提高了系统的并发处理能力。一般来说,Servlet进程只是在Web Server卸载时被卸载。

Servlet 的运行环境叫做 Web 容器或 Servlet 容器。Servlet相比于CGI,更加的轻量级、性能更好!

4 更进一步的JSP

在Servlet出现之后,随着使用范围的扩大,人们发现了它的一个很大的一个弊端。因为Servlet在Java代码中通过HttpServletResponse对象动态输出HTML内容,而为了能够输出HTML格式内容,需要编写大量重复代码,造成不必要的重复劳动。并且在Java源文件中通过字符串拼接的方式生成动态HTML内容会导致代码维护困难、可读性差。为了解决这个问题,基于Servlet技术产生了JavaServet Pages技术,也就是JSP。

JSP使用JSP标签在静态HTML网页中嵌入Java代码,Java代码被动态执行后生成HTML内容。标签通常以<%开头,以%>结束。JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。与纯 Servlet 相比,JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。

Servlet和JSP两者分工协作,Servlet侧重于解决运算和业务逻辑问题,JSP则侧重于解决展示问题。Servlet与JSP一起为Web应用开发带来了巨大的贡献,后来出现的众多Java Web应用开发框架都是基于这两种技术的。更确切的说,都是基于Servlet技术的,因为JSP文件在运行时也会被编译为一个Servlet类。

JSP虽然规避了Servlet在Java代码中生成HTML页面内容方面的劣势,但是它却走向了另一个极端,那就是在HTML页面中混入大量、复杂的业务逻辑(Java代码),同样也是不可取的,或者说,同样会导致代码维护困难、可读性差。

5 兼容并取的MVC

JSP和Servlet都有各自的优点和缺点,后出现的MVC设计模式可以在一定程度上综合它们的优点,避免它们的缺点。

MVC(Model-View-Controller)是一种软件(应用程序)设计架构。MVC模式认为,程序不论简单或复杂,从结构上看,都可以分成三层:模型(Model)、视图(View)和控制器(Controller),它们各自分工、相互合作!

  1. V即View视图,是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。视图层仅仅是展示数据,并且提供给用户的对应的操作界面。位于最上层。
  2. C即Controller控制器,是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个model模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。简单的说,Controller负责转发请求和响应,它将View和Model联系起来。Controller位于第二层。
  3. M即Model模型,包括业务功能编写(例如算法实现)、数据库设计以及数据存取操作实现。在MVC的三个部件中,模型拥有最多的处理任务。Model位于最下层。

MVC模式在Java的JSP/Servlet开发的软件系统中,这三个部分的描述如下所示:

  1. Web浏览器发送HTTP请求到服务端,被对应的Controller(Servlet)获取并进行处理(例如参数解析、请求转发)。
  2. Controller(Servlet)调用核心业务逻辑——Model部分,获得结果。
  3. Controller(Servlet)将逻辑处理结果交给对应的View(JSP),动态输出HTML内容。
  4. 动态生成的HTML内容返回到浏览器显示。

实际上,MVC模式是一种经典的思想,它同样适用于很多其他语言开发的web应用!

MVC模式对于早期的Java Web应用开发来说,它规避了JSP与Servlet各自的短板,Servlet只负责业务逻辑而不会通过out.append()动态生成HTML代码;JSP中也不会充斥着大量的业务代码,仅仅是展示数据。这样,Servlet和JSP职责分明,大大提高了代码的可读性和可维护性。

当然,此时前后端开发还未完全分离,前端和后端的工作以及资源交互很严重,后来出现了前后端分离的开发模式,JSP也逐渐被淘汰了!

以上是关于Web应用的概念以及Java Web应用的发展路程的主要内容,如果未能解决你的问题,请参考以下文章

微服务基础概念

Web3D发展趋势以及Web3D应用场景

微服务架构优缺点未来如何发展?

Node.js IO处理输入和回显,以及当今web应用程序的发展史

W3C发布2018新版移动Web应用发展路线图

网络安全学习路程随笔分享