什么是Servlet
Servlet是JavaWeb的三大组件之一,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:
l 接收请求数据;
l 处理请求;
l 完成响应。
例如客户端发出登录请求,或者输出注册请求,这些请求都应该由Servlet来完成处理!Servlet需要我们自己来编写,每个Servlet必须实现javax.servlet.Servlet接口。
实现Servlet的方式(由我们自己来写!)
实现Servlet有三种方式:
l 实现javax.servlet.Servlet接口;
l 继承javax.servlet.GenericServlet类;
l 继承javax.servlet.http.HttpServlet类;
通常我们会去继承HttpServlet类来完成我们的Servlet,但学习Servlet还要从javax.servlet.Servlet接口开始学习。
Servlet.java
public interface Servlet [c1] { public void init(ServletConfig config) throws ServletException; public ServletConfig getServletConfig(); public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException; public String getServletInfo(); public void destroy(); } |
Servlet中的方法大多数不由我们来调用,而是由Tomcat来调用。并且Servlet的对象也不由我们来创建,由Tomcat来创建!
public class AServlet implements Servlet { /* * 它也是生命周期方法 * 它会在Servlet被销毁之前调用,并且它只会被调用一次! */ @Override public void destroy() { System.out.println("destory()..."); } /* * 可以用来获取Servlet的配置信息 */ @Override public ServletConfig getServletConfig() { System.out.println("getServletConfig()..."); return null; } /* * 获取Servlet的信息 */ @Override public String getServletInfo() { System.out.println("getServletInfo()..."); return "我是一个快乐的Servlet"; } /* * 它是生命周期方法 * 它会在Servlet对象创建之后马上执行,并只执行一次!(出生之后) * */ @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init()..."); /* * 获取初始化参数 */ System.out.println(servletConfig.getInitParameter("p1")); System.out.println(servletConfig.getInitParameter("p2")); /* * 获取所有初始化参数的名称 */ Enumeration e = servletConfig.getInitParameterNames(); while(e.hasMoreElements()) { System.out.println(e.nextElement()); } } /* * 它是生命周期方法 * 它会被调用多次!!! * 每次处理请求都是在调用这个方法! */ @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { System.out.println("service()..."); } }
生命周期方法:
l void init(ServletConfig):出生之后(1次);
l void service(ServletRequest request, ServletResponse response):每次处理请求时都会被调用;
l void destroy():临死之前(1次);
特性:
l 单例,一个类只有一个对象;当然可能存在多个Servlet类!
l 线程不案例的,所以它的效率是高的!
Servlet类由我们来写,但对象由服务器来创建,并且由服务器来调用相应的方法。