Servlet详解

概念

Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

Tomcat原理

Tomcat是一个服务器,用来接收http请求,浏览器应用与tomcat服务器直接进行数据传输在应用层上都遵循http协议,在运输层使用TCP协议,在传输数据前会进行三报文握手建立连接,后续传输按照计算机网络传输原理进行。

Tomcat一直监听这本机的对应的一个端口号,有请求对这ip地址的端口号进行请求时,经过计算机网络原理的一系列操作相互传输数据,tomcat解析浏览器的请求,封装成request对象,自己也会建立一个response对象进行响应,如果请求的是静态资源tomcat直接把对应的静态资源响应给浏览器,如果是需要进行一些逻辑处理的资源,tomcat就会调用对应的servlet的方法进行响应(动态加载对应的Servlet实现类,通过反射调用其中的方法)。

我们编写的JSP文件最后都会被Tomcat解析成Servlet的Java文件,最后还是通过Servlet响应给浏览器的

总结:

一次http请求其实就是一次socket套接字的处理。浏览器发起scoket的请求,tomcat服务器接受请求,并根据请求的路径定位客户端需要访问的资源。 只是socket客户端和服务器数据在交互时,都遵守着http协议规范。

servlet生命周期

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fPaaEQ7R-1617940097186)(C:\Users\91051\AppData\Roaming\Typora\typora-user-images\image-20210404103348056.png)]

Servlet接口定义了****Servlet*servlet容器之间的契约。这个契约就包含了servlet的生命周期。访问servlet时Servlet容器将Servlet类载入内存,并通过反射产生Servlet实例和调用它具体的方法。但是要注意的是,***在一个应用程序中,每种Servlet类型只能有一个实例****。

  1. 浏览器输入地址第一次访问使用到对应的servelt时:Tomcat创建对应servlet类对象,同时通过ServletConfig对象执行**初始化方法init()。**这些操作只有浏览器第一次访问使用到servlet是才会执行,后续访问就只执行以下操作了。
  2. Tomcat解析浏览器请求封装成一个ServletRequest对象(预备使用http协议,其实就是HttpServletRequest对象),同时生成一个ServletRequest对象,将这两个对象传给servlet的service方法并执行该方法
  3. 关闭Tomcat服务器web工程停止时Tomcat调用destroy方法,释放内存等。

ServletContext对象

ServletContext翻译成中文叫做“Servlet上下文”或者“Servlet全局”,但是这个翻译我认为翻译的实在是有点牵强,也导致了许多的开发者不明白这个变量到底具体代表了什么。其实ServletContext就是一个“域对象”,它存在于整个应用中,并在在整个应用中有且仅有1份,它表示了当前整个应用的“状态”,你也可以理解为某个时刻的ServletContext代表了这个应用在某个时刻的“一张快照”,这张“快照”里面包含了有关应用的许多信息,应用的所有组件都可以从ServletContext获取当前应用的状态信息。ServletContext随着程序的启动而创建,随着程序的停止而销毁。通俗点说,我们可以往这个ServletContext域对象中“存东西”,然后也可以在别的地方中“取出来”。在将一个应用程序同时部署到多个容器的分布式环境中,每台Java虚拟机上的Web应用都会有一个ServletContext对象。

通过在ServletConfig中调用getServletContext方法,也可以获得ServletContext对象。

那么为什么要存在一个ServletContext对象呢?存在肯定是有它的道理,因为有了ServletContext对象,就可以共享从应用程序中的所有资料处访问到的信息,并且可以动态注册Web对象。前者将对象保存在ServletContext中的一个内部Map中。保存在ServletContext中的对象被称作属性。

ServletContext中的下列方法负责处理属性:

Object getAttribute(String var1);
 
Enumeration<String> getAttributeNames();
 
void setAttribute(String var1, Object var2);
 
void removeAttribute(String var1);

public RequestDispatcher getRequestDispatcher(String path);//请求转发

GenericServlet抽象类

将init( )方法中的ServletConfig参数赋给了一个内部的ServletConfig引用从而来保存ServletConfig对象,不需要程序员自己去维护ServletConfig了。

public void init(ServletConfig config
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值