从配置文件读取连接数据库的配置信息
在webapps下新建Web应用程序的目录为conntest:
其目录结构如下:
webapps:
|-conntext
| |-src
| | |-conntest
| | |-DBConfig.java
| | |-ConnDBServlet.java
| |
| |-WEB-INF
| |-classes
| | |-conntest
| | |-database.properties
| | |-DBConfig.class
| | |-ConnDBServlet.class
| |
| |-lib
| | |-mysql-connector-java-5.1.26-bin.jar
| |
| |-web.xml
1.database.properties
#driverClass(数据库驱动类的类名)#driverClass=oracle.jdbc.OracleDriverdriverClass=com.mysql.jdbc.Driver#url(要连接数据库的地址)#url=jdbc:oracle:thin:@192.168.1.180:1521:orcl#url=jdbc:mysql://127.0.0.1:3306/testurl=jdbc:mysql://127.0.0.1:3306#user(数据库用户)#user=scottuser=root#password(密码)#password=tigerpassword=root
<?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true"> <context-param> <param-name>driverClass</param-name> <param-value>com.mysql.jdbc.Driver</param-value> </context-param> <context-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/test</param-value> </context-param> <context-param> <param-name>user</param-name> <param-value>root</param-value> </context-param> <context-param> <param-name>password</param-name> <param-value>root</param-value> </context-param> <servlet> <servlet-name>ConnDBServlet</servlet-name> <servlet-class>conntest.ConnDBServlet</servlet-class> <init-param> <param-name>driverClass</param-name> <param-value>com.mysql.jdbc.Driver</param-value> </init-param> <init-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306</param-value> </init-param> <init-param> <param-name>user</param-name> <param-value>root</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>root</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ConnDBServlet</servlet-name> <url-pattern>/conndb</url-pattern> </servlet-mapping> </web-app>
package conntest;public class DBConfig{ private String driverClass; private String url; private String user; private String password; public DBConfig(String driverClass, String url, String user, String password){ this.driverClass = driverClass; this.url = url; this.user = user; this.password = password; } public String getDriverClass(){ return this.driverClass; } public String getUrl(){ return this.url; } public String getUser(){ return this.user; } public String getPassWord(){ return this.password; }}package conntest;import java.io.IOException;import java.io.InputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.PrintWriter;import java.util.Properties;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.sql.DriverManager;import java.sql.Connection;import java.sql.SQLException;public class ConnDBServlet extends HttpServlet{ private DBConfig dbconfig; //读取database.properties配置文件的配置信息 public DBConfig readDbConfig(String propFileName) throws IOException{ try{ //主要就是获取输入流 //方法1:通过FileInputStream构造函数得到 //String propFileName = "F:\\webapps\\conntest\\WEB-INF\\classes\\conntest\\database.properties"; //FileInputStream in=new FileInputStream(propFileName);//FileNotFoundException //方法2:通过Class.getResourceAsStream() //String propFileName = "/conntest/database.properties"; //InputStream in = this.getClass().getResourceAsStream(propFileName); //方法3:通过ServletContext.getResourceAsStream() //String propFileName = "/WEB-INF/classes/conntest/database.properties"; InputStream in = this.getServletContext().getResourceAsStream(propFileName); Properties props = new Properties(); props.load(in);//IOException String driverClass = props.getProperty("driverClass"); String url = props.getProperty("url"); String user = props.getProperty("user"); String password = props.getProperty("password"); return new DBConfig(driverClass, url, user, password); } catch(FileNotFoundException e) { new RuntimeException(e); } catch(IOException e) { new RuntimeException(e); } return null; } //读取web.xml中的配置信息 public DBConfig readDbConfig(){ //<servlet>元素中的<init-param>// String driverClass = getInitParameter("driverClass");// String url = getInitParameter("url");// String user = getInitParameter("user");// String password = getInitParameter("password"); //<context-param> String driverClass = getServletContext().getInitParameter("driverClass"); String url = getServletContext().getInitParameter("url"); String user = getServletContext().getInitParameter("user"); String password = getServletContext().getInitParameter("password"); return new DBConfig(driverClass, url, user, password); } public void init() throws ServletException{ //String propFileName = "F:\\webapps\\conntest\\WEB-INF\\classes\\conntest\\database.properties"; //String propFileName = "/conntest/database.properties"; String propFileName = "/WEB-INF/classes/conntest/database.properties"; //String propFileName = null; try{ if(propFileName == null){ dbconfig = readDbConfig(); } else{ dbconfig = readDbConfig(propFileName); } Class.forName(dbconfig.getDriverClass());//ClassNotFoundException } catch(ClassNotFoundException e){ throw new ServletException("加载数据库驱动失败!"); } catch(FileNotFoundException e) { throw new ServletException("没有找到属性文件!"); } catch(IOException e) { throw new ServletException("加载属性文件失败!"); } } public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{ Connection conn = null; try{ conn = DriverManager.getConnection(dbconfig.getUrl(), dbconfig.getUser(), dbconfig.getPassWord()); res.setContentType("text/html; charset=UTF-8"); PrintWriter out = res.getWriter(); out.println("数据库连接成功!"); out.close(); } catch(SQLException e){ throw new ServletException(e); } finally{ if(conn != null){ try{ conn.close(); } catch(SQLException e){ e.printStackTrace(); } conn = null; } } }}F:\webapps\conntest>javac -d ./WEB-INF/classes ./src/conntest/DBConfig.javaF:\webapps\conntest>javac -classpath D:\web\tomcat\lib\servlet-api.jar;./WEB-INF/classes -d ./WEB-INF/classes ./src/conntest/ConnDBServlet.java