Servlet
Servlet(Servlet Applet),全称Java Servlet。是用Java编写的服务器端程序。主要功能用于交互式地浏览和修改数据,生成动态web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现这个这个Servlet接口的类。
Servlet接口定义了Servlet与servlet容器之间的关系。Servlet容器将Servlet类载入内存,并产生Servlet实例和调用它具体的方法。但是要注意的是,在一个应用程序中,每种Servlet类型只能有一个实例
Servlet生命周期的三个关键方法int、service、destory。
1.init()方法,当Servlet第一次被请求时,Servlet容器就会开始调用这个方法类初始化一个Servlet对象出来,但是这个方法在后续请求中不会在被Servlet容器调用。可以利用init()方法来执行相应的初始化工作
2.service()方法,每当请求Servlet时,Servlet容器就会调用这个方法。第一次请求时,Servlet容器就会先调用init()方法初始化一个Servlet对象出来,然后会调用它的service()方法进行工作,但在后续的请求中,Servlet容器只会调用service方法。
3.destory()方法。当要销毁Servlet时,Servlet容器就会调用这个方法。在关闭Servlet容器时,就会调用该函数。
下面是访问Servlet的图解
上面是对Servlet的理解
平时在创建项目的时候,最开始就是一个功能对应一个Servlet,并在web.xml中对创建的Serlvet进行相关的配置,开始项目的时候Servlet比较少,但是到后来发现Servlet越来越多的,在web.xml中配置的记录也越来越多(这个问题可以通过注解的方式来进行解决,Servlet3.0添加了注解可以解决Serlvet在xml中的配置问题。)虽然web.xml中配置的问题解决了,但是Servlet的过多个问题还是没有解决。
BaseServlet
在进行java培训的时候老师最开始讲的都是最原始的Servlet,要是讲的全的话直接将javaWeb的框架,但是不讲其中的原理,仅仅将使用框架的使用方法。在不适用框架的情况下,如何减少Servlet的数量,可以通过BaseServlet。BaseServlet其实可以不叫这个名字,但是在使用的时候一定要去继承HttpServlet。继承了HttpServlet之后主要就是去实现Service()。一般来说service方法是不需要重写的,因为在HttpServlet中已经有了很好的实现,它会根据请求的方法名(Get,POST),调用doGet,doPost以及其他的doXXX方法,也就是说service是用来转向的。但是如果你在自己的servlet类中覆盖了service方法,实现的方法如下:
public void service(ServletReuqest req,ServletResponse res) throws ServletException,IOException{
res.getOutputStream().print("image is <img src="images/downcoin.gif"></img><br>");
}
那么这时service就不是用来转向的,而是用来处理业务的,现在不论你的客户端调用post还是get来请求此servlet,都会执行service方法也只能执行service方法
在BaseServlet中就是通过复写service方法来实现对业务的处理。通过BaseServlet可以减少Servlet的数量。通过让BaseServlet继承HttpServlet之后,在让自己的类去继承BaseServlet,通过BaseServlet中的service方法来调用子类中的实现的方法(通过反射来实现对子类中的方法调用的)。
baseServlet中的实现步骤
第一步:先获取请求携带的方法参数。
第二步:获取指定类的字节码对象。
第三步:根据请求携带的方法参数值,在通过字节码对象获取指定的方法。
第四步:最后执行指定的方法。