一、servlet
服务器端的小应用程序
作用:(通过HTTP)处理客户端的请求和响应
二、servlet的生命周期
Servlet接口定义了初始化 servlet 的方法、为请求提供服务的方法和从服务器移除 servlet 的方法。这些方法称为生命周期方法,
它们是按以下顺序调用的:
1.构造 servlet,然后使用 init 方法将其初始化。
2.处理来自客户端的对 service 方法的所有调用。
3.从服务中取出 servlet,然后使用 destroy 方法销毁它,最后进行垃圾回收并终止它。
(1)实例化
调用构造函数
(2)初始化
init(): servlet容器仅在实例化servlet后调用init方法一次。在 servlet 可以接收任何请求之前,init 方法必须成功完成。
(3)服务
service()
此方法仅在 servlet 的 init() 方法成功完成之后调用。每次请求都会被调用。
(4)销毁
destroy()
清除持有的所有资源,此方法仅在 servlet 的 service 方法已退出或者在过了超时期之后调用一次。在调用此方法之后,
servlet 容器不会再对此servlet 调用 service 方法。
除了生命周期方法之外,此接口还提供了 getServletConfig 方法和 getServletInfo 方法,servlet 可使用前一种方法获得任何启
动信息,返回的 ServletConfig 对象是传递给 init 方法的对象;而后一种方法允许 servlet 返回有关其自身的基本信息,比如作者、版本和版权。
三、servlet的三种创建方式
1.实现javax.servlet.Servlet接口
public class ServletDemo1 implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("hello servlet"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { } }
2. 继承javax.servlet.GenericServlet类(适配器模式)
public class ServletDemo2 extends GenericServlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("hello ServletDemo2"); } }
3. 继承javax.servlet.http.HttpServlet(模板方法设计模式)
public class ServletDemo3 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("************doGet**********"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("************doPost**********"); }
四、线程安全
不要使用全局变量,要使用局部变量
五、ServletConfig
1.获取配置文件的信息(ServletConfigDemo1的代码)
2.获得ServletContext对象
public String getInitParameter(String name);//该方法从 servlet 的 ServletConfig 对象获取指定参数的值
public java.util.Enumeration<E> getInitParameterNames();//该方法从 servlet 的 ServletConfig 对象获取参数名称
public ServletContext getServletContext();//该方法从 servlet 的 ServletConfig 对象获取上下文
void setAttribute(String name, Object object);//将对象绑定到此 servlet 上下文中的给定属性名称
void removeAttribute(String name);//从 servlet 上下文中移除具有给定名称的属性
六、ServletContext
ServletContext代表的是整个应用。一个应用只有一个ServletContext对象,单实例。
1.域对象:在当前应用中,使多个Servlet共享数据
2.获取全局配置信息
3.获取资源路径
方法:
String getContextPath() //返回 Web 应用程序的上下文路径。
ServletContext getContext(String uripath);//返回与服务器上的指定 URL 相对应的 ServletContext 对象。
RequestDispatcher getRequestDispatcher(String path);//请求转发到资源,或者在响应中包含资源
String getRealPath(String path);//为给定虚拟路径返回包含实际路径的 String
String getInitParameter(String name);//返回包含指定上下文范围初始化参数值的 String
Enumeration<E> getInitParameterNames()
Object getAttribute(String name);//返回具有给定名称的 servlet 容器属性,如果不具有该名称的属性,则返回 null。
七、与servlet相关的对象
Servlet
接口:在javax.servlet.Servlet
GenericServlet
抽象类:在javax.servlet.GenericServlet
HttpServlet
抽象类:在javax.servlet.HttpServlet
ServletConfig
接口:在javax.servlet.ServletConfig
ServletContext
接口:在javax.servlet.ServletContext
ServletRequest
接口:在javax.servlet.ServletRequest
ServletResponse
接口:在javax.servlet.ServletResponse
HttpServletRequest
接口:在javax.servlet.http.HttpServletRequest
HttpServletResponse
接口:在javax.servlet.http.HttpServletResponse
RequestDispatcher
接口:在javax.servlet.RequestDispatcher