Web应用运行原理
web应用启动做了什么?
读取web.xml文件
- web.xml常用配置参数:
1).context-param(上下文参数)
2).listener(监听器配置参数)
3).filter(过滤器配置参数)
4).servle(servlet页面参数)
5).其他
- 读取顺序:1)>>>2)>>>3)>>>4)(5))(具体对应的执行顺序也是如此)
- 原理及过程
1)应用在服务器上启动,容器按上述顺序自动读取web.xml中的参数
2)容器创建一个上下文对象,即ServletContext,整个web应用共享这个对象
3)容器将读取到的context-param配置参数转化为键值对,封装到ServletContext
4)创建监听器对象(Servlet容器实例化所有监听器,回调无参构造方法,调用init初始化方法)
5)创建过滤器对象(Servlet容器实例化所有过滤器,回调无参构造方法,调用init初始化方法)
注意:此时只是web应用启动时的读取文件以及初始化阶段,客户端没有发送的请求的情况下不会有其他任何操作
浏览器到服务器解析?
A.浏览器发送请求到服务器
1.在浏览器地址栏输入请求地址,浏览器解析请求URL,解析出IP地址等信息(域名解析)
2.解析后的URL信息封装成HTTP报文
3.浏览器创建一个socket调用send()方法将HTTP报文发送到服务器(以流的方式)
B.服务器接收到浏览器请求
1.web容器也会创建一个socket并且调用receive()方法接收浏览器发送过来的HTTP报文(携带有IP地址,请求参数等信息)
2.服务器解析请求信息,将请求到的静态或动态资源利用sokcet调用send()方法发送给浏览器
3.浏览器利用sokcet调用receive()方法接收服务器端发送的资源,例如html,jsp等
4.浏览器解析资源,有可能进行再次请求(例如请求css/js等文件资源),遇到有html或jsp代码将对脚本标签进行渲染
jsp?
什么是jsp?
jsp是一种运行在服务器端的脚本语言,是一种软件开发者可以动态响应给客户端的web网页技术标准。
jsp运行原理及过程?
-本质上jsp只是一个带有.jsp后缀的脚本语言文件,并不能直接在jvm(虚拟机)上运行,所以需要将其转换为一个Servlet类,才能通过jvm解释执行:
1)客户端发送请求到服务器,web容器通过jsp引擎将jsp文件转换为一个Servlet类源文件(.java)(如果是第一次访问或jsp文件被修改过,那么将会重新转换为一个新的Servlet类)
2)转换过来的Servlet类进一步被java编译器编译成字节码文件(.class)
3)字节码文件被系统类加载器装载到jvm上,开始初始化、执行

Servlet?
什么是Servlet?
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
Servlet创建?
1. 创建一个类,实现HttpServlet接口(HttpServlet继承于GenericServlet,GenericServlet(实现类)继承于Servlet接口)
2. 右键—新建Servlet(选择配置文件还是注解虚拟路径)
3. 重写doGet()和doPost()方法处理请求
Servlet运行原理?
1. Servlet没有main方法不能直接独立运行。所以需要依赖于web容器(如tomcat),由这个容器来控制servlet从创建到销毁的过程
2.容器启动的时候,只会读取xml配置文件,如果不发生请求servlet是不会被加载运行的
3.客户端第一次发送请求,服务器接收到请求后,解析请求参数并封装成该请求对应的HttpServletRequest和HttpServletResponse对象以给容器使用
4.根据URL匹配容器中的servlet实例,若没有容器将创建和实例化一个servlet,若有则进入下一步(实例化之前类加载器将字节码文件加载过来)
5.容器调用servlet实例的init()方法完成初始化工作
6.调用service方法处理请求,判断请求方式是get还是post,再调用业务逻辑层的方法完成数据交互
7.将请求资源响应给客户端
8.服务器关闭(或者更新servlet文件),servlet实例调用destroy()方法,servlet实例被销毁

Servlet生命周期?
1.当servlet实例调用init()方法实例化的时候,servlet的生命周期开始
2.当servlet实例调用destroy()方法的时候,servlet被销毁,生命周期结束
注意
- 1.servlet实例只会被加载一次,init()方法、destroy()方法也只会被调用一次
- 2.只有创建的对象会每请求一次就会创建一对(requset和response)
- 3.如果需要在实例被创建和加载的时候就完成初始化,则可以如下设置参数
@requires_authorization
<servlet>
<servlet-name>类名</servlet-name>
<servlet-class>包名.类名</servlet-class>
<load-on-startup>优先级别(数字)</load-on-startup>
</servlet>
- 4.对于某些servlet没有元素,但又想提前初始化则可以进行上述配置,否则需要配置参数
- 5.get和post请求
a. get请求只能以字符串形式传递参数名和值,直接跟在URL后,安全性差;post请求在请求头中,较为安全,并且传递数据没有限制
b. get传输数据量较小;post传输数据量大
c. get请求服务器接收效果不好,不能判断是否完成发送;post方式是先发送长度,可以判断是否发送完成
Web应用运行原理的更多相关文章
- Web程序的运行原理及流程(一)
自己做Web程序的开发也有两年多了 从最开始跟风学框架 到第一用上框架的欣喜若狂 我相信每个程序员都是这样过来的 在大学学习一门语言 学会后往往很想做一个实际的项目出来 我当时第一次做WEB项目看 ...
- IIS Web 服务器/ASP.NET 运行原理基本知识概念整理 转
转http://www.cnblogs.com/loongsoft/p/7272830.html IIS Web 服务器/ASP.NET 运行原理基本知识概念整理 前言: 记录 IIS 相 ...
- springboot深入学习(二)-----profile配置、运行原理、web开发
一.profile配置 通常企业级应用都会区分开发环境.测试环境以及生产环境等等.spring提供了全局profile配置的方式,使得在不同环境下使用不同的applicaiton.properties ...
- IIS Web 服务器/ASP.NET 运行原理基本知识概念整理
前言: 记录 IIS 相关的笔记还是从公司笔试考核题开始的,问 Application Pool 与 AppDomain 的区别? 促使我对进程池进了知识的学习,所以记录一下学习 ...
- 理解Web应用程序的代码结构和运行原理(3)
1.理解Web应用程序的运行原理和机制 Web应用程序是基于浏览器/服务器模式(也称B/S架构)的应用程序,它开发完成后,需要部署到Web服务器上才能正常运行,与用户交互的客户端是网页浏览器. 浏览器 ...
- Web自动化必会知识:「Web基础、元素定位、元素操作、Selenium运行原理、项目实战+框架」
1.web 基础-html.dom 对象.js 基本语法 Dom 对象里面涉及元素定位以及对元素的修改.因为对元素操作当中涉及的一些 js 操作,js 基本语法要会用.得要掌握前端的基本用法.为什么要 ...
- iis6.0与asp.net的运行原理
这几天上网翻阅了不少前辈们的关于iis和asp.net运行原理的博客,学的有点零零散散,花了好长时间做了一个小结(虽然文字不多,但也花了不少时间呢),鄙人不才,难免有理解不道的地方,还望前辈们不吝赐教 ...
- ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行
ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行 核心框架 ASP.NET Core APP 创建与运行 总结 之前两篇文章简析.NET Core 以及与 .NET Framew ...
- Asp.net WebPages框架运行原理浅析(转)
在Asp.net4和4.5中,新增了WebPages Framework,编写页面代码使用了新的Razor语法,代码更加的简洁和符合Web标准,编写方式更接近于PHP和以前的Asp,和使用 WebFo ...
随机推荐
- Git拉取代码切换分支
1.克隆代码 cd d:/GitTest //指定存放的目录 git clone https://git.oschina.net/name/test.git //你的仓库地址 2.查看远程所有分支 g ...
- 导入别的项目到我的eclipse上出现红色感叹号问题
项目红色感叹号问题问题 一般我们在导入别的项目到我的eclipse上面会发现,项目上面有红色的错误 原因 因为我电脑上的 jdk版本和别人电脑jdk版本不一样,那么对于的jre版本也不 ...
- 字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法
ref : https://dsqiu.iteye.com/blog/1700312 本文内容框架: §1 Boyer-Moore算法 §2 Horspool算法 §3 Sunday算法 §4 KMP ...
- 解决GitHub下载慢问题,不用修改HOSTS文件
写这篇文章缘由是我用的一款Github上的软件软件版本更新,想去Github上下载新的版本,结果下载速度居然只有几k,还老是下载失败,然后去修改HOSTS文件(我看文章基本都是叫修改这个),修改完成后 ...
- Unity塔防游戏的创建
看了下塔防游戏的教程,比我想像的还简单一些,有些收获: (1)敌人的移动路径,其时比较简单,用了N个Empty GameObject作为路径点,然后做一个总的Empty GameObject 作为父级 ...
- (一)Activiti简介
一.概念 Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和云架构 ...
- 一个因MySQL大小写敏感导致的问题
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 00 MYSQL对大小写敏感 见字如面,见标题知内容.你有遇到过因为MYSQL对大小写敏感而被坑的体验吗? 之前看过阿里巴 ...
- ZROI17普及23-A.如烟题解--技巧枚举
题目链接 因版权原因不予提供 分析 别看这是普及模拟赛,其实基本上是提高难度...像这题做NOIpT1的话也说的过去 有个很显然的暴力思路就是枚举c,a,b,时间复杂度\(O(N^3)\), 然后正解 ...
- JDK1.8新特性(一) ----Lambda表达式、Stream API、函数式接口、方法引用
jdk1.8新特性知识点: Lambda表达式 Stream API 函数式接口 方法引用和构造器调用 接口中的默认方法和静态方法 新时间日期API default Lambda表达式 L ...
- django-两种方式对单表的操作
单表操作的内容 我们这里对数据库单表的操作包含增删改查四部分 具体链接数据库的方式我们是通过pymysql,当然你也可以用其他的. 两种方式的概念与区别 1.新url的方式 主要就是我们每一次向后台提 ...