Java - -Servlet概述

一、Servlet 简介

Servlet 运行在服务端(tomcat服务器)的Java小程序,是sun公司提供一套规范,用来处理客户端请求、响应给浏览器的动态web资源技术。但servlet的实质就是java代码,通过java的API动态的向客户端输出内容。

知乎:

这个提问的最大一个bug,就是以为servlet是很复杂的东西,事实上,servlet就是一个Java接口,interface! 打开idea,ctrl + shift + n,搜索servlet,就可以看到是一个只有5个方法的interface!那servlet是干嘛的?很简单,接口的作用是什么?规范呗!servlet接口定义的是一套处理网络请求的规范,所有实现servlet的类,都需要实现它那五个方法,其中最主要的是两个生命周期方法 init( )和destroy( ),还有一个处理请求的service( ),也就是说,所有实现servlet接口的类,或者说,所有想要处理网络请求的类,都需要回答这三个问题:
     你初始化时要做什么?
     你销毁时要做什么?
     你接受到请求时要做什么?
  这是Java给的一种规范!那实现了servlet的类,就能处理请求了吗?答案是,不能。你可以随便谷歌一个servlet的hello world教程,里面都会让你写一个servlet,相信我,你从来不会在servlet中写什么监听8080端口的代码,servlet不会直接和客户端打交道!那请求怎么来到servlet呢?答案是servlet容器,比如我们最常用的tomcat,同样,你可以随便谷歌一个servlet的hello world教程,里面肯定会让你把servlet部署到一个容器中,不然你的servlet压根不会起作用。tomcat才是与客户端直接打交道的家伙,他监听了端口,请求过来后,根据url等信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。


二、Servlet的API

Servlet接口中的方法:

1)init(ServletConfig config)
ServletConfig: 代表的是该servlet对象的配置信息(初始化信息)

2)service(ServletRequest request,ServletResponse response)
ServletRequest: 代表请求   内部封装的是http请求信息
ServletResponse: 代表响应  内部封装的是响应信息

3)destroy()

HttpServlet类的方法:

1)init()
2)doGet(HttpServletRequest request,HttpServletResponse response)
3)doPost(HttpServletRequest request,HttpServletResponse response)
4)destroy()

在Web容器启动后,会读取 Servlet 设置信息,将 Servlet 类加载并实例化,并为每个Servlet设置信息产生一个ServletConfig对象,而后调用Servlet接口的init()方法,并将产生的ServletConfig对象当做参数传入。
  每一次请求来到容器时,也会进行上述步骤,然后Tomcat会产生HttpServletRequest与HttpServletResponse对象,并在调用service()方法时当作参数传入。

三、Servlet生命周期

Servlet生命周期方法:init( ) / service( ) / destroy( ),代表了Servlet从 “初始化” 到 “工作” 再到 “销毁” 的过程。

1、init( ):当服务器启动或者Servlet第一次被请求时,Servlet容器就会开始调用这个方法初始化一个Servlet对象,但是这个方法在后续请求中不会被调用。

2、service( ):每当请求Servlet时,Servlet容器就会调用这个方法。第一次请求时,Servlet容器会先调用 init( ) 方法初始化一个Servlet对象,然后会调用它的service( )方法进行工作,但在后续的请求中,Servlet容器只会调用service方法。

3、destory():在应用程序卸载或关闭Servlet容器时,就会销毁Servlet,Servlet容器就会调用这个方法,一般在这个方法中会写一些清除代码。

Servlet生命周期

四、Tomcat处理HTTP响应

Servlet的作用是接收浏览器传给服务端的请求(request),并将服务端处理完的响应(response)返回给用户的浏览器,浏览器和服务端之间通过http协议进行沟通,其过程是浏览器根据用户的选择将相关信息按http协议报文规范组装请求的http报文,报文通过网络传输到指定的服务器,服务器通过特定的web容器接收这个报文信息。
  例如:tomcat,jetty,jboss这样的web容器,web容器会将http报文解析出来,如果是用户请求,最终解析出来的报文信息会用一个request对象存储起来,服务端使用这个request做完相应的处理后,服务端程序将结果信息封装到response对象里,然后将response对象交给web容器,web容器则把这个response对象转变为http协议的报文,并将报文回传给浏览器,浏览器最后解析这个响应报文,将最终结果展示给用户。

Tomcat处理HTTP响应
1、浏览器发送HTTP请求至Tomcat服务器,Tomcat服务器通过请求找到要访问的项目和项目中所有Servlet;
2、Tomcat通过反射读取每个Servlet的注解值,匹配到请求地址(如:/hello),找到需要访问的Servlet;
3、Tomcat通过反射实例化该Servlet(存放在servlet容器中);
4、Tomcat解析HTTP请求,封装成HttpServletRequest类型的request对象,与此同时,创建 HttpServletResponse类型的response对象,将request和response传递给service方法;
5、执行Servlet中的代码,执行完后将response对象返回给Tomcat;
6、Tomcat解析response为HTTP响应,发送响应给浏览器。


五、Servlet与普通的Java程序的区别

(1) 普通的java类需要有main方法才可以运行,servlet程序是由tomcat服务器调用的,不需要main方法。
(2) 普通的java类不能接收用户的请求数据与响应数据给浏览器, servlet可以接收用户的请求数据并且可以向浏览器输出数据。


六、Servlet的不足之处

JavaEE规范里的servlet接口很简单,就三个方法init( ),service( ) 和 destory( ),但是这个接口太笼统,所以规范里还提供了一个HttpServlet类,这个类根据http请求类型提供了doGet( ),doPost( )等方法。servlet接口最大的特点就是根据http协议的特点进行定义,因此做servlet开发时候如果使用者对http协议特点不是特别熟悉,都会碰到或多或少令人迷惑的问题,特别是碰到一些复杂特殊的请求时候:例如文件上传,返回特殊的文件格式到浏览器,这时候使用servlet开发就不是很方便了。servlet开发还有个问题可能大家常常被忽视,就是请求的数据的类型转化,http协议传输都是文本形式,到了web容器解析后也是文本类型,如果碰到货币,数字,日期这样的类型需要我们根据实际情况进行转化,如果页面传送的信息非常多,我们就不得不做大量类型转化,这种工作没有什么技术含量,是个体力活而且很容易导致程序错误。


问题:Servlet对象保存在哪里?

1.首先Tomcat 在系统中是个进程,所以它会获得系统分配的内存空间;

2.在Tomcat 获得的内存空间中;Tomcat可以处理很多线程,每个servlet请求就是一个线程;

3.servlet对象在第一次被请求的时候被创建并且 init(),期间可以接受处理 调用doGet()doPost()

4.在服务器关闭或者Tomcat配置被更改时servlet对象才被destory()

总结: servlet对象是单例的,以多线程形式处理多个请求,servlet对象存在于系统分配给Tomcat进程的内存之中。Tomcat容器拥有该实例的引用,容器负责该实例的各种方法调用,各种参数传递。

注意:

1.servlet对象是由tomcat服务器创建的
2.reqeust,response对象也是由tomcat服务器创建的
3.service方法是由tomcat服务器调用的

本篇文章参考:Java Web Servlet详解

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值