11.4    Tomcat 设置

 
Note
对于Tomcat4和5,postgresql.jar必须放在$CATALINA_HOME/common/lib中
 

    绝对轻松的办法是把它设置在Tomcat一起提供的Tomcat实例admin web应用中,只需把数据源家到你要用到的Context中即可。

    下面是在Tomcat 4的conf/server.xml中标签中的设置<>

 
<Resource name="jdbc/postgres" scope="Shareable" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/postgres">
  <parameter>
    <name>validationQuery</name>
    <value>select version();</value>
  </paramete>
  <parameter>
    <name>url</name>
    <value>jdbc:postgresql://localhost/davec</value>
  </parameter>
  <parameter>
    <name>password</name>
    <value>davec</value>
  </parameter>
  <parameter>
    <name>maxActive</name>
    <value>4</value>
  </parameter>
  <parameter>
    <name>maxWait</name>
    <value>5000</value>
  </parameter>
  <parameter>
    <name>driverClassName</name>
    <value>org.postgresql.Driver</value>
  </parameter>
  <parameter>
    <name>username</name>
    <value>davec</value>
  </parameter>
  <parameter>
    <name>maxIdle</name>
    <value>2</value>
  </parameter>
</ResourceParams>

    在Tomcat 5中设置可以用以上方法,只是它变成是标签中的,如.....

    另外,还有一个conf/Catalina/hostname/context.xml的文件。例如,http://localhost:8080/servlet-example目录中有一个文件 $CATALINA_HOME/conf/Catalina/localhost/servlet-example.xml。这个文件里面把上面的xml放置在标签中。

    然后你可以用以下代码访问连接。

 
import javax.naming.*;
import javax.sql.*;
import java.sql.*;

public class DBTest {
    String foo = "Not Connected";
    int bar = -1;
    public void init() {
        try {
            Context ctx = new
            InitialContext();
            if(ctx == null )
               throw new Exception("Boom - No Context"); // /jdbc/postgres is the name of the resource above
                DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/postgres");
                if (ds != null) {
                        Connection conn = ds.getConnection();
                        if(conn != null) {
                            foo = "Got Connection "+conn.toString();
                            Statement stmt = conn.createStatement();
                            ResultSet rst = stmt.executeQuery("select id, foo, bar from testdata");
                            if(rst.next()) {
                            foo=rst.getString(2);
                            bar=rst.getInt(3);
                        }
                        conn.close();
                    }
                } catch(Exception e) {
                     e.printStackTrace();
                }
            }
    public String getFoo() {
        return foo;
    }
    public int getBar() {
        return bar;
    }
}