Servlet创建的时机及方式

    xiaoxiao2021-12-14  18

    Servlet创建的时机

    默认情况下是当第一次访问servlet(在浏览器中访问)的时候去创建servlet

    当init()的内容比较多时,在初始化时希望访问数据库来加载一些数据,但过程比较耗时,就一直在执行init()方法,所以在第一次访问时创建就不太合适了,所以,此时希望servlet在服务器启动时就创建来节省时间:

    在配置文件web.xml中:设置当服务器启动时就加载:(创建servlet)

    <load-on-startup>2</load-on-startup>从2开始起,1已经被默认的servlet占用了

    数字的含义:启动的顺序

    servlet创建的方式

    创建一个servlet有3种方式:

    1)     采用实现servlet接口, (不推荐)

     

    2)     采用继承GenericServlet类(不推荐)

    抽象类

    处理所有的协议

    默认调用带参的init()方法,当没写带参的时候,会调用无参的:

    因为是继承,把父类中的带参的init()方法继承过来了,而父类的init()中又调用了无参的init()

    即父类中带参的init方法调用了无参的方法init(),调用的这个无参的方法是自己写的,不是父类中的(父类的无参什么都没做)。子类(即自己写的)重写了父类中的无参的

    所以在创建时可以写带参的,也可以写无参的,当需要用到ServletConfig对象时(init方法中的参数),就写带参的,不需要时就写无参的。

    import java.io.IOException; import javax.servlet.GenericServlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; //演示如何创建servet对象 public class ServletDemo4 extends GenericServlet { @Override public void init() throws ServletException { System.out.println("我是无参的init方法"); } @Override public void init(ServletConfig config) throws ServletException { System.out.println("我是带参的init方法"); } @Override public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { // TODO Auto-generated method stub } }

    3)     采用继承HttpServlet(推荐)

    继承于HttpServlet(为GenericServlet的子类)

    HttpServlet里面的service方法做了一个转发的动作

    通常在类里写doGet方法来处理页面上的get请求

    实际上是service方法把这个请求转发过来,所以在访问servlet的时候,其实调用的是service方法:

    service方法起了转发的作用,把请求分别转发到doGet和doPost,根据请求的方式。

    所以在继承HttpServlet时,doGet和doPost两个方法都会写上。

    通常只在doGet方法中写,再在doPost方法中调用doGet方法就可以了。

    此种方式不能重写service方法,重写了的话,就不会执行doGet和doPost方法,就不会有转发的这个动作了

    import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //创建servlet的第三种办法(继承httpServlet) : 此类中的service方法是做了一个转发的动作。 public class ServletDemo5 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp) ; } }

    转载请注明原文地址: https://ju.6miu.com/read-968144.html

    最新回复(0)