正常的话init就应该使用一次,如果是单线程模式的servlet可能就会多次调用。
解决方案 »
- struts2 action 乱码啊!!!!
- 面对就业,我该怎么做?
- ORACLE 连接超时?
- 我复制hibernate.jar到/WEB-INF/lib/下......
- 这里有甘肃省兰州的吗,我手上有个项目,需要合作开发....
- 请问util.getString(request,"ID","")这个函数是什么意思?
- 高手帮忙--为什么使用ResultSet的last()方法和absolute()方法总是报错呢?
- 多对一关系,由于"一"方不存在导致"多"方不能加载
- file问题
- 在weblogic8.1下,如何将"D:\Test\" 部署成为发布jsp的web目录?
- 怎样解决这个简单的问题:package javax.media does not exist at line... ?我用的编译器是JBuilderX
- java.lang.OutOfMemoryError的问题
这个,不是很明白哦,可以解释一下吗?
那么,要怎样解决这样的问题呢??
因为我在init函数里还有一些其它的初始化的,如果这个函数被执行多次的话,数据就会乱了,会出错了。谢谢解答。
我觉得就容器对servlet的生命周期管理来说,是不会调用多次init()的。所以可以怀疑是你的doget()或doPost()方法里面去调用了init()方法,这样便会是每次响应请求都会调用init(),这也有矛盾,除非调用语句是在分支逻辑里面。另外,在执行init()方法时,容器保证不会对请求响应,这是不变的。 呵呵,达者赐教
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次???