2

私はサーブレットとデータベースがcore.java初めてです。JDBC接続コードを含むファイルがあります。同じディレクトリにcoreServlet.java、HTMLページからフォーム値を取得するファイルがあります。私の質問は次のとおりです。

  1. たとえば、サーブレット (coreServlet.java) の HTML フォームから取得した変数を core.java ファイルに使用して、データベースに格納できるようにするにはどうすればよいですか?
  2. jdbc 接続コードを coreServlet.java に配置する方が良いでしょうか?

私のプロジェクト構造は次のようなものです:

  - aarya(project name)   
        |
         - WEB-INF
                 |
        |         -web.xml
        -src
           |
          -pkg
           |
            -CoreServlet.java(servlet to interact HTML form)
            -Main.java
            -Core.java(jdbc code is here to interact database)
        |
        -html
            |
            - core.html
        |
        - css
             |
             -core.css

        |
        -javascript
                  |
                   -core.js
        |
        - lib
        |
        -index.html
4

1 に答える 1

2

データベース接続データは JNDI データ ソースにある必要があり、接続プールを使用するが、クラスでは使用しない方がよいでしょう。これは Web アプリケーションであるため、接続プールの構成は Web アプリケーション サーバーに大きく依存することに注意してください。

例として、これはTomcat 7 データベース接続プールの構成およびJBoss 7 データベース接続プールの構成で非常によく説明されています(GlassFish およびその他の Web アプリケーション サーバーでデータベース接続プールを構成する手順は他にもあります。これはサーバーごとに異なることに注意してください)。 .

両方の例から、接続属性を配置する XML ファイルがあることがわかります: データベース URL、ユーザー、パスワード、最小および最大プール接続サイズ (データベースへの接続を開く数)

  • Tomcat の方法:

    <Resource name="jdbc/ProjectX" auth="Container"
        type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/projectx"
        username="user" password="password" maxActive="20" maxIdle="10" maxWait="-1"/>
    
  • JBoss の方法:

    <datasource jndi-name="jdbc/ProjectX" pool-name="MySqlDS">
            <connection-url>jdbc:mysql://localhost:3306/projectx</connection-url>
            <driver>com.mysql</driver>
            <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
            <pool>
                <min-pool-size>10</min-pool-size>
                <max-pool-size>100</max-pool-size>
                <prefill>true</prefill>
            </pool>
            <security>
                <user-name>user</user-name>
                <password>password</password>
            </security>
            <statement>
                <prepared-statement-cache-size>32</prepared-statement-cache-size>
                <share-prepared-statements/>
            </statement>
    </datasource>
    <drivers>
        <driver name="com.mysql" module="com.mysql">
            <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
        </driver>
    </drivers>
    

最後に、データベース接続プールを構成して機能する場合、接続を回復するためにコードで行う必要があるのはInitialContext#lookup、JNDI リソース名を使用してリソースを回復するための呼び出しです。

これを知っていれば、"jdbc/ProjectX" という名前の MySQL データベースに接続するように JNDI リソースを構成した後、次のConnectionように回復するクラスを持つことができます。

public class DatabaseConnectivity {
    public static Connection getConnection() throws NamingException, SQLException {
        InitialContext cxt = new InitialContext();
        DataSource ds = (DataSource) cxt.lookup("java:/comp/env/jdbc/ProjectX" );
        return ds.getConnection();
    }
}

ちなみに、クラスの機能のグループを知るために、パッケージにはさまざまな名前を使用します。例えば:

src
- edu.home.controller.servlet
  + CoreServlet.java
- edu.home.controller.filter
  + SessionFilter.java
- edu.home.model.entity
  + AnEntity.java
  + AnotherEntity.java
- edu.home.model.database
  + DatabaseConnectivity.java
- edu.home.model.service
  + AnEntityService.java
  + AnotherEntityService.java
(and on and on...)
于 2013-04-12T22:05:23.860 に答える