Servlet学习(一)
一、基础接口——javax.servlet.Servlet
?
Servlet接口定义了所有servlet都必须实现的方法。
?
Servlet是一个小型的运行在web服务器上的java程序。Servlet通过通过HTTP协议接收和响应客户端的请求。
要实现这个接口,可以编写一个通用的继承了 javax.servlet.GenericServlet类的servlet,或者是编写一个继承了javax.servlet.http.HttpServlet类的HTTP的servlet。
这个接口定义了初始化servlet的方法,service请求,以及从服务器中移除servlet的方法。这些是servlet的生命周期方法,它们按照下面的顺序被调用:
除了生命周期方法之外,这个接口还提供了getServletConfig()方法,servlet可以使用这个方法获得任何启动的信息。而getServletInfo()方法则可以允许servlet返回有关servlet本身的基本信息,比如作者、版本以及版权信息等。
?
javax.servlet.Servlet接口定义的方法如下所示:
?
public void init(ServletConfig config) throws ServletException——初始化方法public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException——处理客户端请求的方法public void destroy()——销毁servlet的方法public ServletConfig getServletConfig()——返回包含了关于该servlet本身的初始化和启动参数信息的ServletConfig对象,该ServletConfig对象会被传递给init()方法使用。public String getServletInfo()——返回有关servlet本身的基本信息,比如作者、版本以及版权信息。二、通用的servlet类——javax.servlet.GenericServlet
?
javax.servlet.GenericServlet是一个实现了javax.servlet.Servlet接口以及javax.servlet.ServletConfig接口的抽象类。
?
javax.servlet.GenericServlet抽象类定义了一个通用的、与协议无关的servlet。如果要编写一个在Web上使用的HTTP servlet,则这个servlet需要继承javax.servlet.http.HttpServlet类,而不是继承javax.servlet.GenericServlet类。
?
javax.servlet.GenericServlet类可以直接被其他servlet继承,虽然更普遍的是继承一个指定协议的javax.servlet.GenericServlet类的子类,比如javax.servlet.http.HttpServlet类。
?
?
javax.servlet.GenericServlet类使得servlet更容易编写。它提供了生命周期方法init()和destroy()的简单实现版本,也实现了javax.servlet.ServletConfig接口中的方法的简单实现。javax.servlet.GenericServlet类也实现了log()方法,这个方法在javax.servlet.ServletContext接口中进行了声明。
?
?
因此,要编写一个通用的servlet,你必须实现的方法只有抽象方法service()。.
?
三、HTTP协议使用的servlet——javax.servlet.http.HttpServlet
?
javax.servlet.http.HttpServlet类是抽象类javax.servlet.GenericServlet的子类,这个HttpServlet类是一个适合于web网站的HTTP servlet。javax.servlet.http.HttpServlet的子类必须至少重写下面这些方法中的一个:
?
doGet()方法——如果这个servlet支持HTTP GET请求。doPost()方法——如果这个servlet支持HTTP POST请求。doPut()方法——如果这个servlet支持HTTP DELETE请求。init()和destroy()方法——如果这个servlet需要管理生命周期的资源。getServletInfo()方法——用来提供有关servlet本身的信息。这里没有什么理由需要重写service()方法。service()方法通过为每个HTTP请求类型分配处理器方法(上面列出来的doXXX方法)来处理标准的HTTP请求。
?
同样地,这里也没有理由需要重写doOptions()和doTrace()方法。
Servlet往往运行在多线程的服务器上,因此要意识到一个servlet必须处理并发请求,并且要谨慎处理同步访问共享资源。共享资源包括内存数据比如实例或者类变量,外部对象比如文件、数据库连接和网络连接。