javaweb:浏览器请求到服务器端响应的简单过程

服务器
学习javaweb的同学应该都有过一个混乱的时期,那时还弄不明白到底请求到响应的过程是如何进行的?web服务器是干什么的?Servlet归什么管?Servlet本质上不就是一个普通的java类吗,没有main方法是如何工作的?(文章中请求一律指HTTP请求,Servlet指HttpServlet)

本篇文章适合学过Servlet的同学浏览.

学习javaweb的同学应该都有过一个混乱的时期,那时还弄不明白到底请求到响应的过程是如何进行的?web服务器是干什么的?Servlet归什么管?Servlet本质上不就是一个普通的java类吗,没有main方法是如何工作的?(文章中请求一律指HTTP请求,Servlet指HttpServlet)

那么接下来就开始讲解了,这是我的一些个人认知,有不准确的请多多纠正.

要先了解整个过程,需要先明白大概.

[[232048]]

1.首先,浏览器发送http请求

2.若该请求是请求静态资源(html,css等),则web server能自行处理,返回静态资源.

3.若该请求是请求动态资源(jsp等),则Web Server就会交由Application Server处理,处理的结果再传给Web Server返回浏览器.

那么,你可能会问,什么是Web Server?什么是Application Server?简单来说,Web Server是可以向浏览器提供静态资源的程序,当然了,它还能将请求转发给Application Server处理.Application Server能提供动态资源,同时也具备了Web Server处理请求的能力(但没有那么专业).对了,Tomcat就是一种Application Server.顺便一提,企业级开发中,Web Server是和Application Server共同协作,分工明确的,一个提供静态资源,一个提供动态资源,这样能很好地提高处理请求的效率.

额,那么Servlet又是如何工作的呢?其实,Servlet是归Web容器管理的,Web容器管理着Servlet的整个生命周期,向Servlet提供请求和响应,调用Servlet的方法,所以Servlet类无需main方法.而Web容器是在Application Server上的.Web容器可能有点理解,其实你也可以将Tomcat当成一个Web容器.

既然Servlet是归容器管理的,那么容器又是如何处理请求的呢?

1.当浏览器发送请求,容器会根据URL找到该项目,然后从该项目读取我们编写 Servlet 中的 @WebServlet 标注或者 web.xml 配置,找到能处理该请求的 Servlet.

2.若该Servlet是***次被访问,则创建Servlet对象servlet,调用servlet的init()方法从配置文件中获取自己的初始化参数,否则直接创建HttpServletRequest和HttpServletResponse的对象request和response.

3.容器为该servlet创建一条线程,然后将request和response对象传给这条线程.

4.容器调用servlet的service()方法,根据请求的不同调用doGet()或doPost()方法.(假设请求方法是get)

5.doGet()方法生成动态页面(其实这是JSP做的),并将结果"放入"response方法.

6.线程结束,容器把response转换成一个HTTP响应,把它传给浏览器,然后删除request和response,线程被销毁.

 

责任编辑:武晓燕 来源: 樱花树下叹息桥
相关推荐

2013-12-25 11:01:16

JavaScript

2018-11-19 16:10:30

浏览器urlhttp

2012-10-15 13:40:15

IBMdw

2014-01-15 10:06:30

vFlash

2010-08-27 10:23:26

DHCP服务器

2014-11-14 11:03:56

微软.NET

2023-06-30 08:00:00

漏洞网络安全SSTI

2011-06-07 16:01:46

Android 服务器 数据交互

2017-12-06 22:29:53

2015-11-04 14:14:56

HTTP网络协议

2022-05-07 15:54:56

小熊派鸿蒙

2009-07-06 17:22:54

JSP服务器

2010-05-27 18:49:38

SVN入门

2010-04-21 13:18:33

RAC负载均衡配置

2009-02-16 16:30:23

OperaTurbo服务器

2017-02-08 08:46:39

浏览器服务端乱码

2010-10-15 08:57:15

PHP多进程

2009-07-27 12:56:27

控件CheckBoxLASP.NET服务器

2009-10-20 17:28:02

VB.NET服务器端

2012-05-21 10:52:43

点赞
收藏

51CTO技术栈公众号