本帖最后由 bonlog 于 2013-01-29 22:56:06 编辑

解决方案 »

  1.   

    con的值在构造函数中
    但是我想你,你调用doPost的时候会自动帮你调用构造方法,那时候调用的是哪个构造方法呢?
    AddMessageServlet
    这个方法里面你添加一个输出方法
    System.out.println("运行了该方法");
    然后运行一下,如果打印出了这个语句,那么就是你对的。
      

  2.   

    首先教你一个方法,在构造函数打个断点,请求时看是否进入断点,就可以断定con变量是否初始化了。
    你可以试一试将con变量的初始化放在init方法中。
    建议lz进一步理解servlet的生命周期。
    在Servlet接口中定义了5个方法,
    其中3个方法代表了Servlet的生命周期:
    1、init方法:负责初始化Servlet对象。
    2、service方法:负责响应客户的请求。
    3、destroy方法:当Servlet对象退出生命周期时,负责释放占用的资源。
      

  3.   

    谢谢了。
    只有一个构造方法,你为什么不能自动调用啊。谢谢了。
    我在doGet中加了一句
    if(con==null){System.out.println("null");}
    结果其值为空
      

  4.   

    很感谢你的指点:
    1.是不是在servlet中,不使用构造函数来初始化呢?正确的方法是在init中呢?谢谢了
    2.service我一次未使用过?
    3.在本例中,应该如何修改
      

  5.   

    httpServlet继承了GenericServlet类,此类有两个init方法,一个带参数ServletConfig,一个不带参数的。
    你可以覆盖掉父类的无参init方法,把构造函数的内容放到init方法中。
      

  6.   

    明显没给 con 赋值,空指针异常。
      

  7.   

    容器在创建servlet时,肯定是会调用构造函数的
    con为空,还是应该看下构造函数里获取连接的代码
      

  8.   

    你只定义了private Connection con;
    没赋值怎么用。
    掉一下basedao。
      

  9.   


    什么是basedao?在哪里啊?
      

  10.   

    servlet生命周期开始的第一步肯定是先构造然后才init, 如果你构造函数里con确实被正确初始化了的话那service方法里肯定是可以用的,因为servlet的实例在容器里只有一个。init会紧随构造方法之后被调用,你好好看看控制台输出,你的con被正确初始化了吗。你同样原理在构造方法里new一个Object或者一个实体类简单的赋个值,肯定在service方法里可以用。绝对是你初始化connection的时候有问题。
      

  11.   

    楼主,servlet 是单实例的,也就是说,所有的对同一个 servlet 的访问,服务端只会产生一个 servlet 对象,这样,每个 servlet 类最多只会调用一次构造方法,如果你在构造器里创建connection,则这个servlet 都会共享这个connection。而在WEB环境下,是多线程运行的,这样你的一个连接被多个线程共享。如果你在某个地方关闭连接,则其它的线程都不可以使用连接了。
      

  12.   

    构造函数最后一个catch外加上一个 this.con=con; 
    在使用con的方法最上面 new一下这个类运行构造方法
      

  13.   

    构造方法不会自动运行 系统只会检测有没有构成方法 没有就默认创建一个无参的 有的话就不创建了 你想运行构造方法 还是要new这个类 
      

  14.   

    在doget方法里加上 new AddMessageServlet ();//调用构造方法