加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 将jdbc连接代码放在servlet类中是个好主意吗?

发布时间:2020-12-15 07:36:42 所属栏目:Java 来源:网络整理
导读:我是servlet和 database的新手.我有一个core. java文件,其中我有一个JDBC连接代码.在同一目录中,我有一个coreServlet.java文件,它从HTML页面获取表单值.我的问题是: 我如何在两个java类之间进行交互,例如,我如何使用从servlet(coreServlet.java)中的HTML表
我是servlet和 database的新手.我有一个core. java文件,其中我有一个JDBC连接代码.在同一目录中,我有一个coreServlet.java文件,它从HTML页面获取表单值.我的问题是:

>我如何在两个java类之间进行交互,例如,我如何使用从servlet(coreServlet.java)中的HTML表单到我的core.java文件的变量,以便将其存储在我的数据库中?
>将我的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

解决方法

数据库连接数据应该在您的JNDI数据源中,如果您使用连接池但从不在类中,则会更好.由于您的Web应用程序是Web应用程序,请注意连接池配置在很大程度上取决于Web应用程序服务器.

作为示例,在Tomcat 7 Database Connection Pool configuration和JBoss 7 Database Connection Pool configuration中已经很好地解释了这一点(在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资源名称恢复资源.

知道这一点,在配置JNDI资源以连接到名为“jdbc / ProjectX”的MySQL数据库之后,您可以拥有一个恢复连接的类,如下所示:

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...)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读