首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Struts 從零開始(三):資料庫連線與 DBCP 資料源實作

     編輯:Java 相關知識

實作目標:登入驗證改查資料庫

延續前例,將硬編碼帳密改為從 MySQL 查詢,成功導向 success.jsp 顯示歡迎訊息,失敗導向錯誤頁。
輸入頁 成功頁 失敗頁

A. 設定 DBCP 資料源

在 struts-config.xml 內 <data-sources> 區段宣告:

<data-sources>
  <data-source key="DataSource" type="org.apache.commons.dbcp.BasicDataSource">
    <set-property property="driverClassName" value="com.mysql.jdbc.Driver" />
    <set-property property="url" value="jdbc:mysql://localhost:3306/struts1_login"/>
    <set-property property="username" value="root"/>
    <set-property property="password" value="5ihpp1314"/>
  </data-source>
</data-sources>

需導入 JAR:commons-dbcp.jar、commons-pool.jar、struts-legacy.jar、mysql-connector-java-5.0.5-bin.jar。

B. Action 中取得連線並查詢

public class LoginAction extends Action {
  public ActionForward execute(ActionMapping mapping, ActionForm form,
                               HttpServletRequest request, HttpServletResponse response) {
    LoginActionForm f = (LoginActionForm) form;
    String username = f.getUsername();
    String userpass = f.getUserpass();

    ServletContext ctx = getServlet().getServletContext();
    DataSource ds = (DataSource) ctx.getAttribute("DataSource");
    boolean ok = false;

    String sql = "SELECT * FROM user WHERE username=? AND password=?";
    try (Connection conn = ds.getConnection();
         PreparedStatement ps = conn.prepareStatement(sql)) {
      ps.setString(1, username);
      ps.setString(2, userpass);
      try (ResultSet rs = ps.executeQuery()) {
        if (rs.next()) ok = true;
      }
    } catch (Exception e) {
      e.printStackTrace();
    }

    request.setAttribute("username", username);
    return mapping.findForward(ok ? "success" : "error");
  }
}

改良點:使用 PreparedStatement 防 SQL 注入,try-with-resources 自動關閉資源。

C. 成功頁面顯示使用者名稱

<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<html><body>
  <h1>welcome <font color="red" size="8"><bean:write name="username"/></font> here,thanks</h1>
</body></html>

架構建議

Struts 1 將資料源放在 Controller 層(Action)並非最佳實踐。實務上建議:

  • 資料源配置在 context.xml(Tomcat JNDI)或 Spring 容器。
  • 持久層邏輯移至 DAO/Service,Action 僅負責流程控制。
  • 若維護舊專案,可暫用此法,但新專案請採用分層架構。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved