对Servlet的基本理解
一.什么是Servlet?
Servlet是sun公司推出的一套HTTP协议的组件规范。从狭义上来讲,Servlet可以看成是java的一个实现接口,但一般而言,Servlet大多数时候都可以指任何实现了这个Servlet的类。
二.Servlet的运行原理?
1、首先,浏览器向服务器发送请求三要素等信息,如请求地址,请求参数,请求方式等,与服务器建立起连接。连接建立完成后,浏览器端将请求数据打包成一个请求包,发送给服务器。
请求包共分四层:请求行,请求头,空白行,请求体。其中请求行中存放着URL,请求方式和版本号信息。请求头中存放着Get请求方式下的请求参数信息,cookie等信息,空白行则为空,不存放信息,起连接请求头和请求体的作用。请求体中则包含了Post请求方式下的请求参数信息等。
2、服务器接受到请求包后,将请求数据包进行拆包处理,然后tomcat自动创建一个请求对象和响应对象,并传入Servlet实例对象中的doGet或者doPost方法中。
在doGet或者doPost方法中,request请求对象接受请求信息,并在实例对象中完成相应功能,然后通过response响应对象将处理结果进行响应。
3、响应结果会被打包成一个响应包并传回给浏览器。
响应包也分为四层:状态行,响应头,空白行,响应体。其中状态行中存放着协议版本信息和状态码信息,状态码大致为100-500,其中较为常见的是100,200,301,404,405,500。
100:这个状态码是告诉客户端应该继续发送请求,这个临时响应是用来通知客户端的,部分的请求服务器已经接受,但是客户端应继续发送求请求的剩余部分,如果请求已经完成,就忽略这个响应,而且服务器会在请求完成后向客户发送一个最终结果。
200:这个是最常见的http状态码,表示服务器已经成功接受请求,并将返回客户端所请求的最终结果。
301:返回一个新的链接,已返回请求结果。
404:请求失败,客户端请求的资源没有找到或者是不存在。
405:get 和 post 方式出现使用异常。
500:服务器遇到未知的错误,导致无法完成客户端当前的请求,一般是后台程序出现异常。
响应头中包含contentType等信息,设置输出字符集的转换方式,默认一般是 ISO 8859-1 ,这是一种北欧语系的字符集转换方式,而如果需要输出中文,则需设置为 UTF-8 ,这是全世界语系通用的一种字符集转换方式。
空白行中无任何数据,作为连接响应头和响应头的存在。
响应体中包含着服务器的处理结果。
4、浏览器接收到响应包信息后将其拆包并首先分析状态码,通过状态码进行下一步操作,最后将数据展示在浏览器页面。
5、响应结束后与服务器断开连接。
大概流程是这样:
三.Servlet的生命周期
Servlet的生命周期流程为:实例化,初始化,准备就绪,销毁处理。
实例化:tomcat第一次启动时,tomcat会调用此无参构造方法实例化servlet。
初始化:tomcat在实例化此servlet后,会调用init方法初始化servlet
准就就绪:收到请求后调用servlet的service方法来处理请求
销毁处理:删除servlet对象,删除前会调用其destory方法
这之中实例化,初始化,销毁只会执行一次,而service方法可以执行多次。
四.如何注册一个Servlet
这应该是最简单的一部分了…
首先,写一个Servlet类去继承 HttpServlet并重写doPost或doGet,当然这个类只是Servlet的一个子类,但它帮我们重写了其中五个方法,我们只需覆盖我们需要覆盖的类,因此无需重写五个方法。
我们知道,tomcat服务器在启动时,会将web.xml文件中所有的信息过一遍,将相应的命令执行,包括服务器的注册。注册相当于告诉tomcat你的服务器地址在哪里。
注册格式:
<servlet-name>别名(相对路径)</servlet-name>
<servlet-class>包名.项目名(类名,绝对路径)</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>别名<servlet-name>
<url-pattern>/自己取的名字</url-pattern>
</servlet-mapping>
注册成功后,你就相当于告诉了tomcat你的服务器地址在哪儿,需要使用时直接访问即可。