javaweb程序详解
Servlet
Servlet是什么
- severlet本质上就是服务器或者是主机执行的一种web程序
- severlet程序需要完成severlet接口才能成为serverlet程序
- 重写init()方法
- 重写service()方法
- 重写destory()方法
Servlet生命周期
- servlet生命周期是什么意思
- 说明Servlet对象什么时候被创建
- Servlet对象什么时候被销毁
- Servlet对象创建了几个?
- Servlet对象的生命周期表示:一个Servlet对象从出生在最后的死亡,整个过程是怎样的
- Servlet对象生命周期
- 默认情况下服务器启动的时候AServlet对象并没有被实例化
- 用户在发送第一次请求的时候Servlet对象被实例化(AServlet的构造方法被执行了。并且执行的是无参数构造方法。)
- AServlet对象被创建出来之后,Tomcat服务器马上调用了AServlet对象的init方法。(init方法在执行的时候,AServlet对象已经存在了。已经被创建出来了。)
- 用户在发送第二次,或者第三次,或者第四次请求的时候,Servlet对象并没有新建,还是使用之前创建好的Servlet对象
- 用户关闭游览器,serverlet对象撤销
- servlet程序的性质
- Servlet对象是单例的(单实例的。但是要注意:Servlet对象是单实例的,但是Servlet类并不符合单例模式。我们称之为假单例。之所以单例是因为Servlet对象的创建我们javaweb程序员管不着,这个对象的创建只能是Tomcat来说了算,Tomcat只创建了一个,所以导致了单例,但是属于假单例。真单例模式,构造方法是私有化的。)
- 无参数构造方法、init方法只在第一次用户发送请求的时候执行。也就是说无参数构造方法只执行一次。init方法也只被Tomcat服务器调用一次。
- 只要用户发送一次请求:service方法必然会被Tomcat服务器调用一次。发送100次请求,service方法会被调用100次。
- destroy方法执行的时候AServlet对象还在,没有被销毁。destroy方法执行结束之后,AServlet对象的内存才会被Tomcat释放。
GenericServlet
GenericServlet是什么
- 用GenericServlet抽象类代替Servlet接口做程序
GenericServlet的作用
- 编写一个Servlet类直接实现Servlet接口很丑陋
- 大多数时候只需要重写sevrice方法
- 对init()和destory()方法并不关心
- 编写一个servlet类来继承servlet接口简化
- 继承Servlet类
- 要能重写service方法
- 我们需要对Servlet程序进行一些配置
- 单纯的对接servlet接口的程序虽然能开发web程序,却无法做到对程序进行一些配置,即完成servletconfig接口
ServletConfig
ServletConfig是什么
- Servlet程序的一些配置信息
- 配置信息都是放在xml文件中,每一个Servlet程序会对应一个
ServletConfig的生命周期
- 一个servlet程序对一个servletconfig对象,与servlet对象生命周期相同
ServletConfig能调用的方法
-
如何使用Servletconfig
- 该Servlet程序必须先完成了genericservlet接口,因为genericServlet完成了Servletconfig接口,使用的时候,只需要在serverlet程序下面直接调用this即可
-
能使用的方法
public String getInitParameter(String name); // 通过初始化参数的name获取value
public Enumeration<String> getInitParameterNames(); // 获取所有的初始化参数的name
public ServletContext getServletContext(); // 获取ServletContext对象
public String getServletName(); // 获取Servlet的name
其中获取servletcontext()另外地方专门描述
ServletContext
servletcontext作用是什么
- 管理一个项目下的所有的servlet程序
- 让每一个servlet程序能通过servletconfig来找到servletcontext对象
- 本质上就是web.xml文件对象,包含所有servlet程序的配置信息
servletcontext生命周期
- ServletContext被称为Servlet上下文对象。(Servlet对象的四周环境对象。)
- 随着服务器的启动创建而创建
- 在服务器停止服务的时候进行消除
servletcontext调用方法
- servletcontext对象的调用
- servletcontext对象被放在sevrletconfig里面,可以直接用this.getServletContext()来获取
- servletcontext对象中的常用方法
public String getInitParameter(String name); // 通过初始化参数的name获取value
public Enumeration<String> getInitParameterNames(); // 获取所有的初始化参数的name
// 获取应用的根路径(非常重要),因为在java源代码当中有一些地方可能会需要应用的根路径,这个方法可以动态获取应用的根路径
// 在java源码当中,不要将应用的根路径写死,因为你永远都不知道这个应用在最终部署的时候,起一个什么名字。
public String getContextPath();
// 获取文件的绝对路径(真实路径)
public String getRealPath(String path);
// 通过ServletContext对象也是可以记录日志的
public void log(String message);
public void log(String message, Throwable t);
// 数据量小、所有用户共享、又不修改,这样的数据放到ServletContext这个应用域当中,会大大提升效率。因为应用域相当于一个缓存,放到缓存中的数据,下次在用的时候,不需要从数据库中再次获取,大大提升执行效率。
// 存(怎么向ServletContext应用域中存数据)
public void setAttribute(String name, Object value); // map.put(k, v)
// 取(怎么从ServletContext应用域中取数据)
public Object getAttribute(String name); // Object v = map.get(k)
// 删(怎么删除ServletContext应用域中的数据)
public void removeAttribute(String name); // map.remove(k)