純 JSP 混寫 SQL 與邏輯導致維護困難、難以移植資料庫、無法體現 Java 物件導向優勢。MVC 將視圖、模型、控制器分離,配合 XML 配置實現零修改原始碼切換資料庫。
public class UserBean {
private String name, pwd;
private int id;
// 建構子、getter/setter 省略
}
public class DBCon {
private String driver = "com.mysql.cj.jdbc.Driver";
private String url = "jdbc:mysql://localhost/cdemo?user=root&password=xxx&useUnicode=true&characterEncoding=UTF-8";
public boolean findUser(String name, String pwd) {
String sql = "SELECT * FROM fenye WHERE name=? AND pwd=?";
try (Connection conn = DriverManager.getConnection(url);
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, name);
ps.setString(2, pwd);
try (ResultSet rs = ps.executeQuery()) {
return rs.next();
}
} catch (SQLException e) { e.printStackTrace(); }
return false;
}
public List fenYe(int page, int size) { ... } // 分頁查詢
public int getSize() { ... } // 總筆數
}
@WebServlet("/LoginTackle")
public class LoginTackle extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
DBCon db = new DBCon();
String name = req.getParameter("username");
String pwd = req.getParameter("userpwd");
if (db.findUser(name, pwd)) {
HttpSession session = req.getSession(true);
session.setAttribute("login", "true");
session.setAttribute("username", name);
resp.sendRedirect("Welcome?page=1");
} else {
resp.sendRedirect("Login");
}
}
}
PreparedStatement。