本人新手,自己写个用servlet连接数据库的实例。把参数已经写好放在web.xml文件中,老师说可以通过init()函数获取init-param,但是我在init()方法里根本无法获取,想问问各位高手怎么办,谢谢各位了!public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
classname = this.getInitParameter("classname");
url = this.getInitParameter("url");
username = this.getInitParameter("username");
userpassword = this.getInitParameter("userpassword");
System.out.print(classname+"  "+url+"  "+username+"  "+userpassword);
}
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>mypackage.LoginServlet</servlet-class>
<init-param>
<param-name>classname</param-name>
<param-value>com.ibm.db2.jcc.DB2Driver</param-value>
</init-param>
<init-param>
<param-name>url</param-name>
<param-value>jdbc:db2://localhost:50000/sample</param-value>
</init-param>
<init-param>
<param-name>user</param-name>
<param-value>db2admin</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>db2</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>

解决方案 »

  1.   

    classname = this.getInitParameter("classname");
    换成classname = config.getInitParameter("classname");
    看看
      

  2.   

    之前我用的是config的,刚才问那个水货老师他说用this,然后发现解决不了,又让我把这段获取配置的代码放到doGet()方法里,简直是坑爹。然后他急着下班走人,就说是tomcat版本问题,我用的tomcat 7.0
      

  3.   

    不对啊,我都说了之前我用的config的,后来老师说用this,我改完发现还是不行,所以上csdn找各位帮忙诶~
      

  4.   

    肯定是config.getInitParameter("classname"); 
      

  5.   

    ServletConfig config = this.getServletConfig();
    String classname = config.getInitParameter("classname");
      

  6.   

    不好意思,刚才说的有点问题。
    不要重写这个方法
    public void init(ServletConfig config) throws ServletException {
    this.config = config;
    this.init();
        } 这个方法this.config = config;这一句很重要,重写了这个方法后你的servletConfig对象就为空了,自己的servlet重写下面这个方法
    public void init() throws ServletException
    然后里面就可以用
    this.getInitParameter("classname");
    或者
    ServletConfig config = this.getServletConfig();
    String classname = config.getInitParameter("classname");
      

  7.   

    感觉自己表达的还是有些问题,反正getInitParameter这个方法是ServletConfig接口中的方法,只是GenericServlet实现了ServletConfig接口,所以也有这个方法,GenericServlet中有一个属性ServletConfig config,它的getInitParameter实际上调用的是这个属性config的getInitParameter方法,看这个
    public String getInitParameter(String name) {
    return getServletConfig().getInitParameter(name);
        }
    public ServletConfig getServletConfig() {
    return config;
        }但是在
    public void init(ServletConfig config) throws ServletException {
    this.config = config;
    this.init();
      } 方法中必须先把这个config属性设置一下。后面有一行this.init(),所以我们一般重写不带参数的那个init方法,在这个实现里面进行自己的初始化操作
    由于我们自己的servlet是继承了GenericServlet,所以我们可以直接用this.getInitParameter(。。)
      

  8.   

    我用的是servlet的默认的init()方法,所以是带有参数的ServletConfig config的啊不知道为什么得不到参数
    public void init(ServletConfig config)
      

  9.   

    所以我应该重写init()方法嘛?那当这个servlet被调用时候会优先调用这个无参数的init()的方法屏蔽掉有参数的嘛?@Overwrite
    public void init( ) throws ServletException {
            // TODO Auto-generated method stub
            ServletConfig config = this.getServletConfig();
            classname = this.getInitParameter("classname");
            url = this.getInitParameter("url");
            username = this.getInitParameter("username");
            userpassword = this.getInitParameter("userpassword");
            System.out.print(classname+"  "+url+"  "+username+"  "+userpassword);
    }是这个意思嘛?
      

  10.   

    楼上我写错了,是这么写吗?@Overwrite
    public void init( ) throws ServletException {
            // TODO Auto-generated method stub
            ServletConfig config = this.getServletConfig();
            classname = config .getInitParameter("classname");
            url = config .getInitParameter("url");
            username = config .getInitParameter("username");
            userpassword = config .getInitParameter("userpassword");
            System.out.print(classname+"  "+url+"  "+username+"  "+userpassword);
    }
      

  11.   

    上面写的没错,重写那个无参的init()方法,你试试应该是能取到值的
      

  12.   

    重写init方法应该没有问题 我一直这么干的 屡试不爽 public void init(ServletConfig config){.....}
      

  13.   


    嗯,就是重写init()方法,谢谢你啦。结贴了~
    @Override
    public void init() throws ServletException {
    drivername = this.getInitParameter("drivername");
    url = this.getInitParameter("url");
    username = this.getInitParameter("username");
    userpassword = this.getInitParameter("userpassword");
    System.out.println(classname+"  "+url+"  "+username+"  "+userpassword);
    }