1.Servlet认识
servlet在web.xml中配置,由web容器调用
(在tomcat中servlet属于container子级容器,属于context)
servlet在第一次使用时被初始化,调用init()方法
2.HttpServlet
service()转换请求为HttpServletRequest和HttpServletResponse,并路由到具体方法(由父类service()完成)
web应用程序停止或重新启动前,Servlet引擎卸载Servlet,并在卸载之前调用Servlet的destroy()
(web配置Servlet拦截映射,Servlet的service()方法默认路由,具体方法返回response)
3.Servlet映射
映射路径 / 表明为defaultServlet
4.ServletConfig
public void init(ServletConfig config) throws ServletException {
this.config = config;
}
当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,我们通过ServletConfig对象就可以得到当前servlet的初始化参数信息。
5.ServletContext
context.setAttribute("data", data);
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。
配置Context参数
<!-- 配置WEB应用的初始化参数 -->
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/test</param-value> </context-param>
/* 获取Context参数
GenericServlet的getInitParameter在内部实现了getServletConfig
*/
ServletContext context = this.getServletContext();
String contextInitParam = context.getInitParameter("url");
实现请求转发
ServletContext context = this.getServletContext();
RequestDispatcher rd = context.getRequestDispatcher("/servlet/ServletContextDemo5");//获取请求转发对象(RequestDispatcher)
rd.forward(request, response);//调用forward方法实现请求转发
读取资源文件(InputStream)
InputStream in = this.getServletContext().getResourceAsStream("/WEB- INF/classes/gacl/servlet/study/db4.properties");
Properties prop = new Properties();
prop.load(in);
String driver = prop.getProperty("driver");
通过类装载器读资源文件J(InputStream)
//获取到装载当前类的类装载器
ClassLoader loader = ServletContextDemo7.class.getClassLoader();
//用类装载器读取src目录下的db1.properties配置文件
InputStream in = loader.getResourceAsStream("db1.properties");
Properties prop = new Properties();
prop.load(in);
String driver = prop.getProperty("driver");
6.在客户端缓存Servlet数据
response.setDateHeader("expires",System.currentTimeMillis() + 24 * 3600 * 1000);
response.getOutputStream().write(data.getBytes());