此文主要记录servlet容器的加载,方便理解spring中如何管理各个class的依赖
通常我们需要将一个class放到servlet容器中去管理的话,会在xml配置文件中配置好对应的servlet name和类路径,并配置好request url作为反射依据。
example:
TestServlet
com.servlet.TestServlet
TestServlet
/servlet/TestServlet
Servlet容器是如何管理容器中的对象的呢,从上面例子可以看到,在配置文件中配置好name, 类路径和url路径后,java会从容器中通过URL 找到对应的servlet name,再通过servlet name找到对应的类路径,从而能通过反射将类实例化并调用类中的方法,所以当有request过来匹配到对应的URL时,JVM就能从servlet容器中取出对应的实例,并调用实例的方法
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestServlet extends HttpServlet {
public TestServlet(){
System.out.println("构造函数");
}
public void destroy() {
// 从容器中销毁实例对象
}
@PostConstruct
public void someMethod(){
//在构造函数后执行,一般用于从外部依赖中初始化元数据到当前实例
}
@PreDestroy
public void otherMethod(){
// 在销毁前执行,一般用于销毁对象
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// do business or forward
}
public void init() throws ServletException {
// init static resource
}
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
super.service(request, response);
}
}