标签:功能 exce 默认 ash https gen 解决 des 其他
Servlet 加载—>实例化—>服务—>销毁。
它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。
应该知道,在Servlet初始化的时候,会自动调用init(ServletConfig config),Container会自动收集一些该Servlet的配置信息,生成一个ServletConfig的实例,通过调用该实例的四个getXXX方法(即ServletConfig接口中的四个方法),我们可以得到该Servlet的这些配置信息。
而该实例我们如何获取呢?是通过Servlet#getServletConfig()得到的,该方法同样在GenericServlet中实现,具体如下:
public void init(ServletConfig config) throws ServletException { this.config = config; this.init(); } public ServletConfig getServletConfig() { return config; }
我认为init()的出现,是为了解决一个问题,那就是有些人最开始时候,重写init(ServletConfig config)方法,但却总是忘记去调用“super.init(config);”。试想,如果真的出现这种情况,那么,就会造成一种结果,容器收集的Servlet的配置信息,不能初始化给GenericServlet的config属性,以至于当调用getServletConfig()的时候,会得不到有用的config实例,而只能得到一个null。这样也就无法获取该Servlet的配置信息了。(我刚开始重写这个方法没有调用super.init(config)所以就获取不到servletConfig对象了)
而无参数的init()方法在GenericServlet中的出现,解决了这种或许人为造成的获取不到ServletConfig对象的尴尬。可以看到含参init方法调用了无参init,这就让我们可以在处理Servlet初始化参数的时候,只需要重写无参的init()方法就行了。初始化config对象的操作仍然在Container调用init(ServletConfig config)时候完成,然后调用你重写了的init()方法,完成其他初始化操作。
Servlet、ServletConfig、ServletContext深入学习
标签:功能 exce 默认 ash https gen 解决 des 其他
原文地址:https://www.cnblogs.com/qlqwjy/p/9418336.html