ServletContext--HttpServletResponse--web项目执行流程
一.ServletContext 接口(javax.servlet)
定义:public interface ServletContext
原理:
Tomcat启动的时候,需要识别webapps下的各个WEB应用,识别各个WEB应用的同时为每个WEB应用创建对应的对象ServletContext,一个WEB应用对应一个ServletContext.ServletContext内置了2种至少MAP结构的数据,一种用于存放整个web应用中配置的键值对的参数信息,另外一种用于存放程序运行过程中产生的键值对的参数信息
ServletContext生命周期:与项目共存亡.
介绍:
定义一组方法,servlet 使用这些方法与其 servlet 容器进行通信,例如,获取文件的 MIME 类型、分发请求或写入日志文件。
每个 Java 虚拟机的每个“Web应用程序”都有一个上下文,(“Web 应用程序”是 servlet 和内容的 Collection,这些 servlet 和内容安装在服务器的 URL 名称空间(比如 / catalog)的特定子集下,并且可能通过.war文件安装。)如果 Web 应用程序在其部署描述符中标记为"distributed",那么每个虚拟机都将有一个上下文实例。在这种情况下,不能将上下文用作共享全局信息的位置(因为该信息不 会是真正全局共享的)。请使用外部资源(如数据库)替代。
ServletContext 对象包含在 ServletConfig 对象中,ServletConfig 对象在初始化 servlet 时由 Web 服务器提供给 servlet。
常用方法:
public Object getAttribute(String name){}:返回具有给定名称的servlet容器属性,如果不具有该名称的属性,则返回 null。属性允许 servlet
容器将此接口还没有提供的额外信息提供给servlet。可使用getAttributeNames 获取支持的属性的列表。
public Enumeration<E> getAttributeNames(){}:返回包含此 servlet 上下文中可用属性的名称的 Enumeration。使用带有一个属性名称的 #getAttribute 方法获取属性值.
public String getMimeType(String file){}:返回指定文件的 MIME 类型,如果 MIME 类型未知,则返回 null。MIME 类型由 servlet 容器的配置确定,可以在 Web 应用程序部署描述符中指定。常见
MIME类型是 "text/html" 和 "image/gif".
public String getRealPath(String path){}:为给定虚拟路径返回包含实际路径的 String。
public InputStream getResourceAsStream(String path){}:以 InputStream 对象的形式返回位于指定路径上的资源.InputStream 中的数据可以是任意类型或长度。该路径必须根据 getResource
中给出的规则指定。如果指定路径上没有资源,则此方法返回 null。使用此方法时,可通过 getResource 方法获得的元信息(比如内容长度和内容类型)将丢失。servlet 容器必须实现访问资源所需的 URL处理程序和 URLConnection 对象。此方法不同于 java.lang.Class.getResourceAsStream,后者使用类加载器。此方法允许 servlet 容器使某一资源可用于来自任意位置的 servlet,而不必使用类加载器。
public void removeAttribute(String name){}:从 servlet 上下文中移除具有给定名称的属性。完成移除操作后,为获取属性值而对 #getAttribute 进行的后续调用将返回 null。
如果在 ServletContext 上配置了侦听器,则容器将相应地通知它们。
public void setAttribute(String name, Object object){}:将对象绑定到此 servlet 上下文中的给定属性名称。如果已将指定名称用于某个属性,则此方法将使用新属性替换具有该名称的属性。
如果在 ServletContext 上配置了侦听器,则容器将相应地通知它们。如果传递了 null 值,则效果将与调用 removeAttribute() 相同。
二.HttpServletResponse 接口(javax.servlet.http)
定义:public interface HttpServletResponse extends ServletResponse
作用:既然HttpServletResponse代表从服务端到客户端响应这个过程,那么结合协议我们知道HttpServletResponse可以控制HTTP协议响应的三大块内容,分别是响应行,响应头,响应体.
生命周期:每次服务端获取到来自客户端的请求之后,解析HTTP请求部分,将HTTP请求部分封装在HttpServletRequest对象中,同时创建HttpServletResponse对象, 之后在服务端完成本次响应
之后,服务端就回收了刚才创建好的Request,Response对象. 下次请求到达服务端,会分配新的HttpServletRequest/HttpServletResponse对象.即只存活在一次请求/响应中;
三.Web项目执行流程
*_实现项目,发布到服务器下
发布项目的本质:
1_将源码位置中WebContent下的所有内容复制到tomcat下对应的项目中
2_将源码下build下的class目录复制到tomcat下对应项目下的WEB-INF下
*_启动WEB服务器Tomcat
1_运行tomcat内部的main函数,
2_创建一个线程池(相当于之前的连接池),方便为客户端分配各个线程
3_启动ServerSocket对象,监听服务端的8080端口号,等待来自客户端的请求
*_用户在浏览器地址栏输入 http://localhost:8080/day34/hello ,向服务端发起请求
1_浏览器底层建立一个和服务端对应的socket
浏览器底层通过socket可以获取到2种管道:输出,输入,
通过输出流向服务端发送数据,通过输入流接收来自服务端的数据
2_通过输出流将HTTP协议的请求部分发送到服务端
get /day34/hello http/1.1
Host:"localhost:8080"
User-Agent:"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0"
Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
Accept-Language:"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"
Accept-Encoding:"gzip, deflate"
Connection:"keep-alive"
空行
*_服务端监听到一个和客户端对应的socket对象,通过socket可以获取到2种流对象
输入流:读取客户端浏览器发送到服务端数据
输出流:向客户端浏览器输出数据
1_服务端为当前的客户端分配一条线程
2_服务端通过读取输入流来获取客户端的HTTP请求部分后,将内容拆分,重新封装在
一个HttpServletRequest的实例对象中,同时创建一个HttpServletResponse的实例化对象,可以向HttpServletResponse对象赋予部分属性(响应时间,服务器类型),
3_服务端分析请求行部分,获取到本次请求的项目,以及项目下的资源
GET /day34/demo.html HTTP/1.1
http://localhost:8080/day34/demo.html
*_如果请求的是静态文件资源
通过输入流将静态的文件读入到内存,结合输出流和HTTP协议响应完成本次响应
GET /day34/hello HTTP/1.1
http://localhost:8080/day34/hello
*_如果请求的是动态路径
1_TOMCAT在当前的项目下day34下的web.xml中通过动态的路径”/hello”,寻找到
“/hello”对应的类的全路径cn.itcast.test00.HelloServlet ;(Tomcat启动时即加载web.xml配置)
2_tomcat可以通过反射,调用HelloServlet.class字节码上无参数的构造函数,
创建HelloServlet对应的对象,执行对象上的init方法(仅执行一次);
3_调用对象下的service方法,当前对象中,寻找不到,去父类中寻找,
在service方法中判断本次请求是GET方式还是POST方式,调用对象下的doget/dopost
方法(将创建好的request,reponse传递进去)
*_Tomcat结合http协议响应部分和输出流向客户端进行响应,
服务端回收request,response,线程
*_浏览器通过输入流读取服务端响应到客户端的数据,对响应内容进行解析
ServletContext--HttpServletResponse--web项目执行流程的更多相关文章
- web项目执行流程
先扫描web.xml文件 jsp请求servlet servlet 调数据/不调数据 重定向/转发 Dao(封装数据) Biz(数据处理) 逻辑判段 返回前端界面显示
- web理论知识--网页访问过程(附有Django的web项目访问流程)
当我们闲暇之余想上网看看新闻,或者看个电影,通常的操作是:打开电脑.打开浏览器.输入网址.浏览页面信息.点击自己感兴趣的连接......那么有没有想过,这些网页从哪里来的?过程中计算机又做了什么事情了 ...
- web项目启动流程探索
在web项目的启动过程中,我们希望知道它的一般流程是什么,这样我们就可以在各个流程中加入相应的功能,或者对于我们排错也有帮助. 我们知道,当我们启动tomcat容器以后,容器首先初始化一些必要的组件, ...
- 一个简单的Java Web项目搭建流程
今天试图在服务器上搭建一个web服务器,顺便回顾了java web项目的入门,使用Servlet处理HTTP请求,并记录日志等操作.当很久没有做过web项目时,有些东西还是很容易忘记的. Maven配 ...
- PC端Web项目开发流程
从前一直再做前端,突然想到如果有一天领导让自己独立承担一个web 项目的话是否有足够的能力去接这个任务,要学会自己去搭建一些基础的工具信息.所有的这一切在心里都要有个大致的流程,不然真正做的时候难免会 ...
- web项目开发流程
对于一个web项目,在实际编码之前,有一些通用的步骤来planning a website: 0.Defining the project (predr0->dr0) 对于外部项目,客户一般会发 ...
- Net core学习系列(四)——Net Core项目执行流程
"跨平台"后的ASP.Net Core是如何接收并处理请求的呢? 它的运行和处理机制和之前有什么不同?本章从"宏观"到"微观"地看一下它的结 ...
- Web项目开发流程 PC端
一.了解.明确需求. 这个应该是第一步了,不了解需求你就不知道为什么要做,要怎么去做这个项目的工作. (1)明确需求是相当重要的,很有必要去和产品经理.设计人员去沟通,需要明白每一个按钮,每一个开 ...
- Web项目测试流程总结
个人知识脑图总结 - 未完全(工作项目脑图总结存于网盘中)
随机推荐
- 《TCP/IP详解卷一:协议》数据链路层(一)
版权声明:本文为博主原创文章,转载请标注转载链接,谢谢. 目录(?)[+] 引言 在TCP/IP协议族中,链路层主要有三个目的: 为IP模块发送和接收IP数据报. 为ARP模块 ...
- 【转】android adb常用指令
Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态. 可以通过下列几种方法加入adb: 在设备上运行shell命令 通过端口转发来管理模拟器或设备 从模拟器或 ...
- Jenkins Email Extension Plugin 邮件插件
1:系统管理-管理插件-可选插件 搜索Email 可列出Email Extension Plugin插件 2:选择相应的插件点 下载并安装之后重启,等待 3:安装完后,自己去重启tomcat,先s ...
- ssh无密码登录设置失败的 解决办法
因为要安装hadoop所以需要设置ssh无密码登录,SSH的安装就不在这里介绍了: 我的系统是ubuntu15.10,开始按照网上很多的步骤去配置,最后发现登录时还要密码,登录多次也是这样的情况 最后 ...
- 为什么选择Netty
支持高并发访问 比核心 Java API 更好的吞吐量,较低的延时资源消耗更少,这个得益于共享池和重用减少内存拷贝 https://baike.baidu.com/item/Netty/1006162 ...
- centos6.5安装FTP服务器
1.检测是否安装了FTP rpm -q vsftpd 2.安装ftp yum install vsftpd 3.完成ftp安装后,将 /etc/vsftpd/user_list 和 /etc/vsft ...
- QDUOJ 炸老师与他的女朋友们 bfs+状压
炸老师与他的女朋友们 Description qdu最帅的炸老师今天又要抽空去找他的女朋友们了,但是考虑到他的好gay友ycb仍是个单身狗,炸老师作为基友不希望打击他.所以他在找女朋友们的路途中必须要 ...
- cassandra的命令
cassandra的命令: connect <hostname>/<port> (<username> '<password>')?; Conne ...
- sqlserver2012——使用子查询
1 select A.成绩,A.分数,B.姓名 FROM 成绩信息 A, 学生信息 B WHERE A.学生编号=B.学号 AND A.课程编号=‘’ AND A.考试编号=‘’ AND A.分数 & ...
- E20190523-h
evaluate v. 估计; 评价; 评估; substantial adj. 大量的; 价值巨大的; 重大的; 大而坚固的; 结实的; 牢固的; portion n. 部分; (食物的) 一份, ...