2013-04-12 29 views
2

我在servlet的新database.I有core.java文件中,我有code.In我有一個coreServlet.java文件,它採取的形式從價值HTML page.My問題的相同目錄下的JDBC連接是:將jdbc連接代碼放在servlet類中是個好主意嗎?

  1. 如何在兩個java類之間進行交互,例如,如何使用從servlet(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 
+0

1)你的包應該是反向鏈接格式,例如'com.techdon'。 2)按照命名約定,您的課程應以大寫字母開頭。 3)這不是一個真正的問題,這個網站是針對具體問題而不是開放式問題。 –

+0

@ bmorris591不是一個開放式問題。 –

+0

@ bmorris591,@ Luiggi我做了必要的修改,希望能從你那裏得到答案...... – Anshul

回答

2

數據庫連接的數據應該在你的JNDI數據源,如果你使用一個類中的連接池,但從未會更好。由於您的Web應用程序,請注意,連接池配置在很大程度上取決於Web應用程序服務器。例如,在Tomcat 7 Database Connection Pool configurationJBoss 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數據庫後,您可以用於恢復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...) 
+0

我明白了你的意思,但是我怎樣才能將b/w與類進行交互,例如,如果我想在DatabaseConeectivity.java中使用CoreServlet.java變量比我們怎麼做到這一點? – Anshul

+1

@TechDon這是一個完全不同的問題。我的回答涵蓋了問題標題中提到的內容。其他問題是閱讀教程的結果。您可以從[StackOverflow Servlets wiki](http://stackoverflow.com/tags/servlets/info)和[StackOverflow JSP wiki](http://stackoverflow.com/tags/jsp/info)開始學習, –

相關問題