首页 > 代码库 > Servlet--HttpServlet
Servlet--HttpServlet
一.Servlet 接口(javax.servlet)
定义:
public interface Servlet
Implemented by: FacesServlet, GenericServlet, JspPage
介绍:
servlet 是运行在 Web 服务器中的小型 Java 程序。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。
要实现此接口,可以编写一个扩展 javax.servlet.GenericServlet 的一般 servlet,或者编写一个扩展 javax.servlet.http.HttpServlet 的 HTTP servlet。
此接口定义了初始化 servlet 的方法、为请求提供服务的方法和从服务器移除 servlet 的方法。这些方法称为生命周期方法,它们是按以下顺序调用的:
1)构造 servlet,然后使用 init 方法将其初始化。
2)处理来自客户端的对 service 方法的所有调用。
3)从服务中取出 servlet,然后使用 destroy 方法销毁它,最后进行垃圾回收并终止它。
除了生命周期方法之外,此接口还提供了 getServletConfig 方法和 getServletInfo 方法,servlet 可使用前一种方法获得任何启动信息,而后一种方法允许 servlet 返回有关其自身的基本信息,比如作者、版本和版权。
常用方法:
public void destroy():由 servlet 容器调用,指示将从服务中取出该 servlet。此方法仅在 servlet 的 service
方法已退出或者在过了超时期之后调用一次。在调用此方法之后,servlet容器不会再对此 servlet 调用 service 方法。
public ServletConfig getServletConfig():返回 ServletConfig 对象,该对象包含此 servlet 的初始化和启动参数。返回的 ServletConfig 对象是传递给 init 方法的对象.
此接口的实现负责存储 ServletConfig 对象,以便此方法可以返回该对象。实现此接口的 GenericServlet 类已经这样做了。
public String getServletInfo():返回有关 servlet 的信息,比如作者、版本和版权.此方法返回的字符串应该是纯文本,不应该是任何种类的标记(比如 HTML、XML,等等).
public void init(ServletConfig config) throws ServletException:由 servlet 容器调用,指示将该 servlet 放入服务.servlet 容器仅在实例化 servlet 之后调用 init 方法一次。
在 servlet 可以接收任何请求之前,init 方法必须成功完成.
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException:由 servlet 容器调用,以允许 servlet 响应某个请求。此方法仅在 servlet 的 init()
方法成功完成之后调用,应该为抛出或发送错误的 servlet 设置响应的状态代码。
二.HttpServlet 类(javax.servlet.http)
继承关系:
java.lang.Object--javax.servlet.GenericServlet--javax.servlet.http.HttpServlet
定义:
public abstract class HttpServlet extends GenericServlet implements Serializable
介绍:
提供将要被子类化以创建适用于 Web 站点的 HTTP servlet 的抽象类。HttpServlet 的子类至少必须重写一个方法,该方法通常是以下这些方法之一:
doGet,如果 servlet 支持 HTTP GET 请求
doPost,用于 HTTP POST 请求
doPut,用于 HTTP PUT 请求
doDelete,用于 HTTP DELETE 请求
init 和 destroy,用于管理 servlet 的生命周期内保存的资源
getServletInfo,servlet 使用它提供有关其自身的信息
构造方法:
public HttpServlet():不执行任何操作,因为这是一个抽象类。
常用方法:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException{}:由服务器调用(通过 service 方法),以允许 servlet 处理 GET 请求。
req 包含客户端对 servlet 发出的请求的 HttpServletRequest 对象;
resp 包含 servlet 向客户端发送的响应的 HttpServletResponse 对象.
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException{}:由服务器调用(通过 service 方法),以允许 servlet 处理 POST 请求。
HTTP POST 方法允许客户端一次将不限长度的数据发送到 Web 服务器,这在发送诸如信用卡号之类的信息时很有用.
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException{}:由服务器调用(通过 service 方法),以允许 servlet 处理 PUT 请求,
PUT 操作允许客户端将文件放在服务器上,类似于通过 FTP 发送文件。
public void service(ServletRequest req, ServletResponse res) throws ServletException,IOException:将客户端请求分发给受保护的 service 方法。无需重写此方法。
三.web执行流程
1.实现项目,发布到服务器下(Tomcat的webapps文件夹下);
2.启动Tomcat服务器(实际上是启动了ServerSocket对象,监听8080端口,等待客户端连接);
3.当用户在浏览器地址栏输入网址时,即向服务器发起请求(此时浏览器底层建立起Socket对象,将HTTP的请求部分(请求行/请求头/请求体)发送至服务器);
4.服务器(Servlet接口或其实现类)分析请求,通过service方法判断是请求动态资源还是静态资源,如果是动态资源则使用反射技术,创建对象;如果是静态资源,则直接读取文件夹中的内容;
5.服务器(Tomcat)结合http协议响应部分和输出流向客户端进行响应;
6.浏览器通过输入流接收来自服务器的数据,进行解析和处理,并展现给用户;
四.Servlet生命周期
1_当用户通过浏览器首次访问某个Servlet时,tomcat会调用servlet的构造函数创建一个Servlet对象,之后调用servlet下的init方法(仅执行一次);
2_调用servlet下的service方法,在service方法中判断本次是GET/POST方法,调用servlet下的doget/dopost方法;
3_以后从客户端浏览器每次向服务端对当前servlet发起请求,仅仅只执行其下的service__>doget/dopost;
4_停止服务器(正常/中断)/重新加载项目 servlet销毁;
正常停止服务器/重新加载项目会执行destory方法
注意: 单实例多线程模式,会有效率问题,安全问题
Servlet--HttpServlet