servlet的生命周期:
servlet的创建过程-----tomcat服务器servlet的初始化:init() init(ServletConfig config)servlet的服务方法:业务方法servlet的销毁过程Servlet 的生命周期 ——基于Java的反射机制
Class clazz = Class.forName("包名.类名"); // 获取构造器 getConstructor(Class<T>params...) // 创建实例对象:newInstance(); // 获取Method对象:getDeclaredMethod(String name, 参数的class属性); Method:里面的invoke(实例对象,实际参数); // 初始化 Init(SerlvetConfig config) Service(request, response):servlet的业务服务方法 doGet() / doPost() Destory();servlet 的销毁方法init(){…}:无参的init方法,再业务中初始化一些用户登录的次数 / 其他数据
package com.bite.servlet.b_init; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "InitDemo") public class InitDemo extends HttpServlet { /** * servlet的生命周期的初始化 * @param config servlet的配置信息:初始化参数,或者servlet的加载 * @throws ServletException */ @Override public void init(ServletConfig config) throws ServletException { // 这个方法是获取配置信息用到的 } /** * 是servlet初始化的简便方法(用户自定义初始化的时候去使用) * @throws ServletException */ @Override public void init() throws ServletException { // 获取用户session数据 ----> 初始化用户的登录次数/登录状态 } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }servlet对象被创建的过程中----其实是一种反射机制
tomcat服务器启动的时候---- web.xml中先找到url-pattern:/life再去servlet-mapping----- servlet-name:life在servlet的配置信息中寻找LifeDemo通过Class的forName(“com.bite.servlet.servlet_life.LifeDemo”):字节码文件对象伪代码:
// 创建了当前的类对象 Class class = Class.forName("com.bite.servlet.servlet_life.LifeDemo"); // 通过 Constructor 对象: public Constructor<T> getDeclareConstructor(Class<?>... parameterTypes) Constructor con = class.getDeclaredConstructor(); Object obj = con.newInstace(); // 加载init方法 public Method getDeclaredMethod(String name, Class<?>... parameterTypes) Methos m1 = class.getDeclaredMethod("init",ServletConfig.class) m1.invoke(obj, config); // 调用服务方法 Method m2 = class.getDeclaredMethod("service", HttpServletRequest.class, HttpServletResponse.class) m2.invoke(obj, request, response); ...destory System.exit(0); //jvm停止运行了获取字节码文件对象的方式:
Class.forName(“包名.类名…”) 推荐使用第一种,记载的一种字符串(配置文件中)数据类型的class属性 String.class…Object类中getClass() ----> Class对象 package com.bite.servlet.a_life; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * servlet的生命周期 * service(ServletRequest req, ServletResponse res) * init(ServletConfig config):初始化 * void destroy():销毁 */ @WebServlet(name = "LifeDemo") public class LifeDemo extends HttpServlet { // 无参构造 public LifeDemo() { System.out.println("servlet对象被调用了..."); } /* * 用户登录成功之前,应该先初始化一下用户登录次数 * @throws ServletException */ /*@Override public void init() throws ServletException { super.init(); }*/ /** * 初始化 * @param config * @throws ServletException */ @Override public void init(ServletConfig config) throws ServletException { System.out.println("servlet被初始化了..."); } /** * 服务方法 * @param req * @param resp * @throws ServletException * @throws IOException */ @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("servlet的业务服务方法被调用了..."); } /** * 销毁 */ @Override public void destroy() { System.out.println("servlet被销毁了..."); }