1、理解Web应用程序的运行原理和机制

Web应用程序是基于浏览器/服务器模式(也称B/S架构)的应用程序,它开发完成后,需要部署到Web服务器上才能正常运行,与用户交互的客户端是网页浏览器。

浏览器负责显示来自服务器的数据和接受用户的输入数据,也称为“与用户交互”;服务器负责处理浏览器的访问请求,并把处理结果(数据或消息)组织成浏览器可以识别的格式文本返回。

Web应用程序的主要特点如下:

1)浏览器主动请求服务器资源。在Web应用程序中,一般是浏览器首先向服务器发起访问某个网页或某些数据的请求。

2)服务器被动响应浏览器请求。服务器收到浏览器的访问请求后,根据请求的事项执行相应的业务逻辑代码,一般还要连接数据库提取或处理数据,并把提取的数据或处理结果,组织成HTML或JSON格式或普通文本,返回给浏览器。这个过程称为响应和处理请求。

3)使用TCP/IP和HTTP协议通信。Web应用程序的服务器与浏览器之间,约定使用TCP/IP和HTTP协议交换数据。其中:TCP/IP是传输控制协议,HTTP是文本数据格式协议。

4)Web应用程序的安装部署简便。Web服务器和浏览器是一对多的关系,即一个服务器可以同时满足多个浏览器的访问请求。由于浏览器一般随操作系统(如:Windows系统)附带安装,与Web应用程序无关,不需要开发者维护。所以,Web应用程序开发者只需要考虑在Web服务器上部署和维护应用程序,相对于C/S架构的应用程序,大大减轻了应用程序的部署、安装和维护工作量,提高了维护效率。

2、认识JavaWeb应用程序结构

使用java开发Web应用程序已经走过了漫长的路程,期间出现过多种典型的Web应用程序结构。包括:

2.1  JSP页面结构

浏览器直接请求JSP页面,JSP中包含了处理各种业务的逻辑代码。其结构图如下:

该种结构的特点是大量Java 脚本代码直接嵌入在JSP页面中。对于简单的应用程序,不失为一种直接简便的方法。但是这种结构很难做到代码重用,不利于功能模块的规划和设计。

2.2  JavaBean页面结构 

为了改进JSP页面结构的不足,我们将处理后台资源的逻辑代码用Bean进行封装,发展成为带Bean的页面结构,再结合自定义标签,可将一部分代码从JSP中移出,获得较为干净的JSP页面。如下图所示:

但是这种结构随着功能的增加,层次变得不够清晰,可扩展性不好,不利于应用程序的维护。

2.3  MVC结构 

MVC是三个英文单词Model-View-Control首字母的缩写,中文就是“模型-视图-控制器”的意思。

MVC结构将Web应用程序代码按照基本任务划分为三个部分: 模型实现数据封装和业务逻辑,视图实现用户交互界面,控制器整合模型和视图,并根据请求调用对应的模型和视图。

MVC结构比较科学、合理地解决了任务分工与整合,业务功能扩展和代码维护的问题,被业界广泛接受,是最典型、最成功的网络应用程序结构。MVC结构处理用户请求的基本步骤如下:

(1)浏览器向服务器发出访问请求,服务器收到请求后转发给控制器;

(2)控制器检查客户请求URL,初始化管理对象,调用相应的业务模型来处理请求;

(3)模型包括处理客户请求的所有业务规则,它与数据库和文件资源交互,将提取的数据包装成对象返回给控制器;

(4)控制器接收模型返回的数据,选择显示数据的JSP页面,即视图;

(5)JSP页面将数据嵌入到HTML元素中,生成标准的HTML页面文本,返回给浏览器。

(6)浏览器显示HTML网页,完成一个请求和响应回合。

使用java实现MVC结构的典型方案,是使用Bean创建模型,JSP创建视图,Servlet实现控制。

3、理解Servlet与Servlet容器 

Servlet本身是一种特定的运行机制,有一套规范的编程接口(API),支持请求和响应过滤器。但我们一般将Servlet理解为程序员编写的符合Servlet规范,并由Servlet容器来调用和执行的Java类。它可以对任何类型的请求进行处理和响应,别称“服务器小程序”。

编写一个Servlet,就是按照Servlet规范编写一个Java类。但是它没有main方法,不能独立运行,必须部署到Servlet容器中,由容器来实例化并调用它的相关方法(如:doGet()和doPost()方法)。

Servlet容器也叫Servlet引擎,是Web服务器的一部分。它在Servlet生命周期内管理Servlet,并负责解析基于MIME的请求文本,以及格式化基于MIME的响应数据。

Tomcat就是一款包括Servlet容器的Web服务器。Tomcat服务器接受客户请求并做出响应的过程如下:

1)客户端浏览器访问Web服务器,发送访问Servlet的HTTP请求。

2)Web服务器接收到请求后,传递给Servlet容器。

3)Servlet容器初始化Servlet实例,调用实例的Service()方法,并向其传递两个对象参数:表示请求的HttpServletRequest对象和表示响应的HttpServletResponse对象。

4)Servlet实例使用HttpServletRequest对象获取客户的请求信息,然后进行相应的处理。

5)Servlet实例将处理结果通过HttpServletResponse对象返回给容器,容器负责确保处理结果正确地发送给浏览器,同时将控制权返回给Web服务器。

6)Servlet一旦实例化就一直保存在内存中,直到Web服务器停止运行应用程序时,再销毁Servlet实例。

提示:Web浏览器并不直接和Servlet通信。Servlet是由Servlet容器加载和执行的。常用的MIME类型有:text/html,application/pdf,video/quicktime,application /java,image/jpeg,application/jar,application/octet-stream,application/x- zip等等。

理解Web应用程序的代码结构和运行原理(3)的更多相关文章

  1. 教你理解微信小程序的生命周期和运行原理

    转自:http://blog.csdn.net/tsr106/article/details/53052879  写微信小程序,他的生命周期不能不知道,不知道小程序就会出现各种bug而无法解决.小助君 ...

  2. 理解微信小程序的生命周期和运行原理

    写微信小程序,他的生命周期不能不知道,不知道小程序就会出现各种bug而无法解决.小助君公众号带你学习小程序的生命周期和运行原理. 小程序由两大线程组成:负责界面的线程(view thread)和服务线 ...

  3. Web框架——XWAF的代码结构和运行机制(4)

    XWAF是一套基于Servlet和java反射技术的Web应用程序框架,它利用Servlet运行机制在服务器上加载和运行,接管客户端请求,依靠ServletRequest对象获取用户请求信息,使用Se ...

  4. 一步步构建.NET Core Web应用程序---基本项目结构

    前言 随着.NET Core日益成熟, 我作为C#&.NET体系中的一份子也加入了.NET Core 这一体系中,随着不断学习, 接触到的各种框架日益庞杂,接下来我会由一个新手的角度把整个基于 ...

  5. Gradle Java Web应用程序并在Tomcat上运行

    1- 创建Gradle工程 打开 Eclipse ,在菜单中找到 File -> New -> Other…,在打开界面中选择 Gradle Project,如下图中所示 - 点击下一步( ...

  6. Jmeter组成结构及运行原理

    Jmeter结构主要组成要素包括:测试计划,线程组,采样器以及监听器.对于各部件的作用域关系如下图: Jmeter是纯Java程序,使用JVM,运行采用多线程完成,往往单台负载机由于机器配置有限,支持 ...

  7. 基于Flask的Web应用程序插件式结构开发

    事实上,很多应用程序基于插件式结构开发,可以很方便了扩展软件的功能,并且这些功能完全可以依托于第三方开发者,只要提供好接口和完备文档,比如wordpress.谷歌火狐浏览器等. Python这样的动态 ...

  8. net core体系-web应用程序-3项目结构、配置文件详解

    一.应用程序文件结构 如下图所示,相比于Asp.Net项目,在新建的Asp.Net Core项目中,没有了Global.asax以及Web.config这样的文件,但多了几个其他主要的文件,它们分别为 ...

  9. 如何理解Web应用程序的MVC模型?

    View,也就是视图/视野,是你真正看到的,而非想象中的 Model.Controller,也就是控制器,是你用来改变 Model 方式.简单的说 Controller 和 View 分别是 Mode ...

随机推荐

  1. linq语法大全(转集)

     Join操作符 适用场景:在我们表关系中有一对一关系,一对多关系,多对多关系等.对各个表之间的关系,就用这些实现对多个表的操作. 说明:在Join操作中,分别为Join(Join查询), Selec ...

  2. windows下部署mongodb

    系统: widows server 2008 R2 mongodb: 3.2.5 一: 下载安装mongodb,下载地址: https://www.mongodb.org/downloads#prod ...

  3. Linux下crontab命令的用法

    cron来源于希腊单词chronos(意为“时间”),是linux系统下一个自动执行指定任务的程序.例如,你想在每晚睡觉期间创建某些文件或文件夹的备份,就可以用cron来自动执行. 服务的启动和停止 ...

  4. 《C语言程序设计现代方法》第4章 编程题

    1 编写一个程序,要求用户输入一个两位数,然后按数位的逆序打印出这个数. 方法一:没技术含量的 #include <stdio.h> int main() { int high, low; ...

  5. C++里消除Wunused

    编译程序时,有一大堆警告总是不爽的.别人的代码也就忍了,不好去改.自己的可没法忍.看看C++里怎么消除Wunused警告. 先来看下面的程序: #include <iostream> in ...

  6. OCP读书笔记(23) - 题库(ExamC)

    200.Which operation requires that you create an auxiliary instance manually before executing the ope ...

  7. 富文本编辑器嵌入指定html代码

    先把内容放入一个input中 <input id="detail" type="hidden" value="${sysCarousel.det ...

  8. Azkaban3.x集群部署(multiple executor mode)

    介绍 Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程.Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于 ...

  9. 网上Java总结

    1.         编译 javac 文件名.java 运行 java 文件名 2.         Public class 和 class 声明类的区别:public 声明的文件名必须和其类名一 ...

  10. centos6.5环境基于corosync+cman+rgmanager实现RHCS及iscsi+gfs2+clvm的文件系统集群

    centos6.5环境基于corosync+cman+rgmanager实现RHCS及iscsi+gfs2+clvm文件系统集群 一.环境准备 服务器列表: ansible server : 192. ...