| 組件 | 版本/路徑 |
|---|---|
| JDK | 1.5.0_01 D:\Java\jdk1.5.0_01 |
| Tomcat | 5.5.4 D:\Tomcat 5.5 |
| MySQL 驅動 | Connector/J 3.1.6 mysql-connector-java-3.1.6-bin.jar |
JAVA_HOME=D:\Java\jdk1.5.0_01 PATH=%JAVA_HOME%\bin CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; D:\Tomcat 5.5\common\lib\servlet-api.jar; D:\Tomcat 5.5\common\lib\mysql-connector-java-3.1.6-bin.jar
在 D:\Tomcat 5.5\conf\Catalina\localhost\test.xml:
<Context path="/test" docBase="d:/www" reloadable="true" crossContext="true" debug="0" />
對應實體目錄結構:
d:\www\ ├─ WEB-INF\ │ ├─ web.xml │ ├─ classes\NinGoo\database\dbconn.class │ └─ lib\ (可放共用 jar)
package NinGoo.database;
import java.sql.*;
public class dbconn {
private Connection conn = null;
private ResultSet rs = null;
// 連線參數
private final String server = "127.0.0.1";
private final String port = "3306";
private final String db = "test";
private final String user = "root";
private final String pass = "password";
private final String driver = "com.mysql.jdbc.Driver";
private final String url = "jdbc:mysql://" + server + ":" + port + "/" + db
+ "?user=" + user + "&password=" + pass + "&useUnicode=true&characterEncoding=UTF-8";
public Connection getConn() {
try {
Class.forName(driver).newInstance();
conn = DriverManager.getConnection(url);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public ResultSet executeSQL(String sql) {
try {
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}
public void close() {
try { if (rs != null) rs.close(); } catch (Exception ignore) {}
try { if (conn != null) conn.close(); } catch (Exception ignore) {}
}
}
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class welcome extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
dbconn myconn = new dbconn();
Connection conn = null;
ResultSet rs = null;
try {
conn = myconn.getConn();
rs = myconn.executeSQL("SELECT * FROM test"); // test 為示例表
out.println("MySQL 測試 ");
while (rs.next()) {
out.println(rs.getString(1) + "
");
}
out.println("successful!");
} catch (Exception e) {
e.printStackTrace(out);
} finally {
myconn.close(); // 確保資源釋放
}
}
}
<web-app>
<servlet>
<servlet-name>welcome</servlet-name>
<servlet-class>welcome</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>welcome</servlet-name>
<url-pattern>/welcome</url-pattern>
</servlet-mapping>
</web-app>
javac -d d:\www\WEB-INF\classes NinGoo/database/dbconn.javajavac -cp d:\www\WEB-INF\classes;D:\Tomcat 5.5\common\lib\servlet-api.jar welcome.java
→ 複製 welcome.class 至 d:\www\WEB-INF\classes\https://localhost:8080/test/welcome。| 項目 | 建議 |
|---|---|
| 連線管理 | 生產環境必須使用連線池 (DBCP/HikariCP/JNDI),避免頻繁建立/關閉連線 |
| SQL 注入 | 改用 PreparedStatement + 參數綁定,杜絕字串拼接 |
| 資源關閉 | JDK 7+ 採用 try-with-resources,舊版在 finally 逐一關閉 |
| 編碼 | URL 附加 useUnicode=true&characterEncoding=UTF-8,頁面 charset=UTF-8 |
| 異常處理 | 不要吞掉例外,至少記錄日誌並回傳友好錯誤頁 |
web.xml,啟用嵌入式 Tomcat/Jetty,實現無容器部署。