Java web三大组件:Servlet、Filter、Listener。
servlet是单例的,一个对象只会有服务器创建一个对象。
每个servlet必须实现javax.servlet.Servlet接口
实现servlet接口的三个方式:
实现javax.servlet.Servlet接口
继承javax,servlet.GenericServelet类
继承javax.servlet.http.HttpServlet类
servlet接口五个方法:
public void init(ServletConfig config) throws ServletException {}
public ServletConfig getServletConfig() {return null;}
public void destroy() {}
public String getServletInfo() {return null;}
public void service(ServletRequest req, ServletResponse res)throws ServletException,IOException{}
配置文件web.xml:
每个servlet需要一个<servlet><servlet-name></servlet-name><servlet-class></servlet-class>将servlet名称和一个servlet类绑定,一个<servlet-mapping><servlet-name></servlet-name><url-pattern></url-pattern>将servlet与url绑定。
servlet生命周期:
1.服务器会在Servlet第一次被访问时创建Servlet,或者是在服务器启动时创建Servlet。如果服务器启动时就创建Servlet,那么还需要在web.xml文件中配置。也就是说默认情况下,Servlet是在第一次被访问时由服务器创建的。(第一次惩罚)
而且一个Servlet类型,服务器只创建一个实例对象,创建后会调用init方法初始化。
2.服务器每收到一个请求就会调用一次service方法
3.结束时会调用destroy方法。
servlet接口相关类型:请求对象ServletRequest,响应对象ServletResponse,配置文件ServletConfig。
GenericServlet:
servlet接口的一种实现,可以通过继承GenericServlet类来修改。
GenericServlet的init方法是通过先将config变量赋值(供其他方法使用),再调用无参的init方法,故在修改时只需要重写无参init即可。
HttpServlet:
GenericServlet的子类,添加了对HTTP的额外支持。
HttpServlet在接口service方法中将两个普通参数强转为HTTP参数(HttpServletRequest和HttpServletResponse)。再调用自己特有的service(使用HTTP参数)方法,在这个方法内部通过判断请求类型(post和get)来确定调用doPost方法和doGet方法。故在实现时只需要覆盖doGet方法和doPost方法即可。