String name = request.getParameter("name"); // 單值
String[] values = request.getParameterValues("multi"); // 多值 (checkbox等)
注意:getParameter 回傳 String,無需 new String() 包裹。
String url = "jdbc:mysql://localhost:3306/jspsky";
Class.forName("com.mysql.jdbc.Driver").newInstance(); // 5.0+ 驅動類名
Connection conn = DriverManager.getConnection(url, "user", "pwd");
Statement stmt = conn.createStatement();
String sql = "INSERT INTO commu(name,tel) VALUES(?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, name);
ps.setString(2, tel);
ps.executeUpdate();
// 查詢
ResultSet rs = stmt.executeQuery("SELECT * FROM commu");
while (rs.next()) { out.println(rs.getString("name")); }
conn.close();
String url = "jdbc:db2:portal";
Class.forName("com.ibm.db2.jcc.DB2Driver"); // 通用驅動
Connection conn = DriverManager.getConnection(url, "user", "pwd");
// 後續操作同 MySQL
最佳實踐:生產環境**必須使用連線池** (Tomcat JNDI DataSource、HikariCP、Druid),避免頻繁建立/關閉連線;統一使用 PreparedStatement 防 SQL 注入;finally 區塊確保資源釋放。
String content = "print me 雪峰!";
String path = System.getProperty("user.dir") + File.separator + "test.html";
try (FileOutputStream fos = new FileOutputStream(path);
PrintWriter pw = new PrintWriter(fos)) {
pw.println(content);
} catch (IOException e) { e.printStackTrace(); }
File dir = new File(System.getProperty("user.dir") + File.separator + "doc" + File.separator + "jspsky");
String[] files = dir.list();
if (files != null) for (String f : files) out.print(f + "<br>");
Integer count = (Integer) application.getAttribute("counter");
if (count == null) count = 0;
synchronized (application) {
count++;
application.setAttribute("counter", count);
}
out.println("Total visits: " + count);
關鍵:synchronized (application) 保護複合操作 (讀取+遞增+寫入) 原子性。
| 階段 | 核心主題 | 建議實作專案 |
|---|---|---|
| 基礎鞏固 | 檔案刪除/修改、圖片上傳、郵件發送、JavaBeans 封裝 | 留言板、簡易郵件客戶端 |
| 企業級開發 | EJB (Session/Entity)、XML 處理 (DOM/SAX/JAXB)、JavaScript/AJAX 整合 | 新聞發布系統、購物車模組 |
| 架構與流程 | 資料庫進階 (事務、索引、優化)、商業專案開發流程 (需求→設計→測試→部署)、MVC 框架 | 完整電商後台、聊天室 (WebSocket) |
File.separator 或 Paths.get() (NIO.2),勿寫死 \ 或 /。pageEncoding="UTF-8"、資料庫連線 characterEncoding=UTF-8、檔案讀寫指定 StandardCharsets.UTF_8。try-with-resources;舊版本 finally 區塊逐一 close() 並捕獲例外。PreparedStatement 或 ORM 框架。「多做練習,在實踐中不斷熟悉 Java 包的使用!」—— 原作者寄語
從留言板、聊天室、購物車等經典小專案切入,逐步引入分層架構、框架、自動化測試與 CI/CD,才是通往資深工程師的正途。