正常的话init就应该使用一次,如果是单线程模式的servlet可能就会多次调用。

解决方案 »

  1.   

    你可能是继承乐SIMPLETHREAD类乐
      

  2.   

    servlet被编译后的class文件被删除或者服务器认为当前的class已经过期
      

  3.   

    to congliu(取次花丛都不顾,半缘修道半缘君。) 首先,编译后的class文件没有被删除的。如果是服务器认为当前的class已经过期??
    这个,不是很明白哦,可以解释一下吗?
    那么,要怎样解决这样的问题呢??
    因为我在init函数里还有一些其它的初始化的,如果这个函数被执行多次的话,数据就会乱了,会出错了。谢谢解答。
      

  4.   

    大胆发言,观者笑可笑  。
    我觉得就容器对servlet的生命周期管理来说,是不会调用多次init()的。所以可以怀疑是你的doget()或doPost()方法里面去调用了init()方法,这样便会是每次响应请求都会调用init(),这也有矛盾,除非调用语句是在分支逻辑里面。另外,在执行init()方法时,容器保证不会对请求响应,这是不变的。  呵呵,达者赐教
      

  5.   

    正常情况下,init()在生命周期中只会被调用一次
      

  6.   

    to jobforlive(阿勋)我看了又看,我的BasicServlet.java里,没有任何地方调用init()方法了。再其它任何的servlet里,也没有任何调用init()的方法。我也一直都知道,在servlet的声明周期里,init()只会执行一次的。可是,我也不知道是什么原因,我的init()居然执行了不只一次.......还有,我说明的是,假如在a servlet里执行了init(),在b servlet里,是有时执行,有时不执行的。是有时啊,不是每次啊。在init里,我有个连接数据库的操作。
      

  7.   

    将其他的servlet类贴一个出来看看
      

  8.   

    欢迎加入J2EE developer开发QQ群14673042
      

  9.   

    MainServlet.javaimport java.io.IOException;
    import java.sql.SQLException;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;public abstract class MainServlet extends HttpServlet
    {
    public void init(ServletConfig config) throws ServletException
    {
    super.init(config);
    System.out.println("Servlet is initialized..................................");
    }
    public void destroy()
    {
    super.destroy();
    System.out.println("Servlet destroy() is destroyed...........................");
    }
    public void doGet(HttpServletRequest request, HttpServletResponse response)
       throws ServletException,IOException
    {
    doAction(request,response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {
    doAction(request,response);
    }
    public final void doAction(HttpServletRequest request, HttpServletResponse response)
    throws ServletException,IOException
    {
    System.out.println("BasicServlet.java doAction start...");
    try
    {
    String jspPath = perform(request,response);
    getServletContext().getRequestDispatcher("/"+jspPath).forward(request,response);
    return;
    }
    catch(Exception e)
    {
    System.out.println("BasicServlet.java Exception start............................");
    e.printStackTrace();
    }
    }
    protected abstract String perform(HttpServletRequest request,HttpServletResponse response)
    throws IOException,SQLException;
    }================================================================================
    AServlet.javaimport java.io.IOException;
    import java.sql.SQLException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;public class AServlet extends MainServlet
    {
    public String perform(HttpServletRequest request,HttpServletResponse response)
    throws IOException,SQLException
    {
    return "test.jsp";
    }}=======================================================================BServlet.javaimport java.io.IOException;
    import java.sql.SQLException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;public class BServlet extends MainServlet
    {
    public String perform(HttpServletRequest request,HttpServletResponse response)
    throws IOException,SQLException
    {
       return "test.jsp";
    }}==========================================================================test.jsptest
    <br><br>
    <a href='/sandy/servlet/AServlet'>aaaaaaaaaaaaaaaaaaaaa</a><br><br>
    <a href='/sandy/servlet/BServlet'>bbbbbbbbbbbbbbbbbbbbb</a><br><br>===========================================================================启动tomcat,在 浏览器输入:http://127.0.0.1:8080/test/servlet/AServlet
    回车,这时,输出Servlet is initialized..................................
    按页面上的bbbbbbbbbbbbbbbbbbbbbbbbb连接,接着又输出Servlet is initialized..................................再按aaaaaaaaaaaaaaaaaaaaaa连接或者bbbbbbbbbbbbbbbbbbbbbb连接,这时就不在输出Servlet is initialized..................................了。表明,init()函数给执行了2次???