<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 使用 Derby & Apache Tomcat > 原文: [http://zetcode.com/db/apachederbytutorial/tomcat/](http://zetcode.com/db/apachederbytutorial/tomcat/) 在本章中,我們將展示如何將 Derby 與 Apache Tomcat Web 容器組合在一起。 Apache Tomcat 是 Java 編程語言的 Web 容器。 它用于服務 JSP 頁面和 servlet。 可以輕松地將 Apache Tomcat 與 Derby 一起使用。 Derby 在其`lib`子目錄中有一個`derby.war`文件。 該 Web 存檔僅用于控制 Derby 數據庫。 Tomcat 和 Derby 都是 Apache Software Foundation 的項目。 ```java $ pwd /home/janbodnar/bin/tomcat $ ls lib/derby* lib/derbyclient.jar lib/derby.jar lib/derbynet.jar ``` 首先,我們必須將`derbyclient.jar`,`derby.jar`和`derbynet.jar`文件復制到 Tomcat 安裝目錄的`lib`子目錄中。 ```java $ ls webapps derby.war docs examples host-manager manager ROOT ``` 然后,我們必須將 derby.war 文件復制到 Tomcat 安裝目錄的`webapps`子目錄文件中。 Tomcat 啟動時,將解壓縮并部署文件。 ```java $ export JAVA_OPTS=-Dderby.system.home=/home/janbodnar/programming/derby/dbs ``` 當我們通過 Tomcat 啟動 Derby 時,不考慮`DERBY_OPTS`變量。 在啟動 Tomcat 和 Derby 服務器之前,必須先設置`derby.system.home`。 我們可以在`JAVA_OPTS`變量中設置 Derby 系統目錄。 ```java $ bin/startup.sh Using CATALINA_BASE: /home/janbodnar/bin/tomcat Using CATALINA_HOME: /home/janbodnar/bin/tomcat Using CATALINA_TMPDIR: /home/janbodnar/bin/tomcat/temp Using JRE_HOME: /home/janbodnar/bin/jdk1.6.0_30 Using CLASSPATH: /home/janbodnar/bin/tomcat/bin/bootstrap.jar: /home/janbodnar/bin/tomcat/bin/tomcat-juli.jar ``` 使用`startup.sh`腳本啟動 Tomcat 服務器。 ![Tomcat startup page](https://img.kancloud.cn/23/41/2341ef56dbcdab0c3e400505ba75e39b_399x263.jpg) 圖:Tomcat 啟動頁面 導航到`localhost:8080`,這是 Tomcat 監聽的默認 URL,我們會看到 Tomcat 歡迎頁面。 ![Derby start](https://img.kancloud.cn/97/5a/975abdcb226f8616a4c8e2b35da059c6_400x266.jpg) 圖:Derby 啟動 要啟動 Derby 數據庫,我們導航到`localhost:8080/derby/derbynet`。 這將啟動 Derby。 我們有幾個按鈕可用于啟動/停止服務器,啟用/禁用日志記錄或跟蹤。 ```java <load-on-startup>0</load-on-startup> ``` 每次啟動 Tomcat 服務器時,我們都必須導航至上述 URL。 要自動啟動 Derby,我們可以在`web.xml`文件的`<servlet>`標記內添加以上行。 該文件位于`webapps/derby/WEB-INF`目錄中。 ## 創建測試數據庫 對于那些從一開始就沒有遵循教程的人,我們將再次創建`testdb`數據庫。 我們將一個表添加到數據庫中。 您可以跳過數據庫和表(如果已經存在)的創建。 ```java $ cat cars.sql CREATE SCHEMA USER12; CREATE TABLE CARS(ID INT PRIMARY KEY, NAME VARCHAR(30), PRICE INT); INSERT INTO CARS VALUES(1, 'Audi', 52642); INSERT INTO CARS VALUES(2, 'Mercedes', 57127); INSERT INTO CARS VALUES(3, 'Skoda', 9000); INSERT INTO CARS VALUES(4, 'Volvo', 29000); INSERT INTO CARS VALUES(5, 'Bentley', 350000); INSERT INTO CARS VALUES(6, 'Citroen', 21000); INSERT INTO CARS VALUES(7, 'Hummer', 41400); INSERT INTO CARS VALUES(8, 'Volkswagen', 21600); ``` 我們將需要此 SQL 文件。 ```java $ cat dbs/derby.properties derby.stream.error.logSeverityLevel=0 derby.database.fullAccessUsers=user12 derby.database.defaultConnectionMode=readOnlyAccess derby.connection.requireAuthentication=true derby.user.user12=34klq* derby.user.user13=33kl33 derby.user.user14=14kl14 derby.user.user15=35rr++ derby.authentication.provider=builtin ``` 在 Derby 系統目錄中,我們有`derby.properties`文件。 在此文件中,我們配置一些選項。 我們將日志嚴重性級別設置為 0 以報告所有可能的問題。 這是在測試環境中完成的。 我們啟用身份??驗證。 我們使用相應的密碼創建四個用戶。 用戶 12 中只有一個擁有完全訪問權限。 其他人只有`readOnlyAccess`。 ```java $ java -Dderby.system.home=/home/janbodnar/programming/derby/dbs \ -Dij.protocol=jdbc:derby: -jar $DERBY_HOME/lib/derbyrun.jar ij ij version 10.8 ij> ``` 我們啟動`ij`命令行工具。 我們將使用它來創建數據庫和表。 Derby 系統目錄位于`/home/janbodnar/programming/derby/dbs`。 ```java ij> CONNECT 'jdbc:derby://localhost:1527/testdb;create=true; user=user12;password=34klq*'; ``` 我們創建`testdb`數據庫并連接到它。 我們提供用戶憑證。 ```java ij> run 'cars.sql'; ``` 我們執行`cars.sql`腳本,該腳本創建`CARS`表并將其填充數據。 ```java ij> SELECT * FROM CARS; ID |NAME |PRICE ------------------------------------------------------ 1 |Audi |52642 2 |Mercedes |57127 3 |Skoda |9000 4 |Volvo |29000 5 |Bentley |350000 6 |Citroen |21000 7 |Hummer |41400 8 |Volkswagen |21600 8 rows selected ``` 這是我們的`CARS`表。 接下來,我們將創建一個 Java servlet,它將在 Web 瀏覽器中顯示這些值。 ## 項目 我們將創建一個簡單的 Web 應用,該應用將連接到 Derby 數據庫。 一個 Java Servlet 將連接到 Derby,并從`CARS`表中檢索所有數據。 ```java $ tree . ├── build.xml ├── context.xml ├── lib │?? └── servlet-api.jar ├── src │?? └── zetcode │?? └── SelectAllCars.java └── web.xml 3 directories, 5 files ``` 在當前工作目錄中,我們有一個 Ant `build.xml`文件,`context.xml`配置文件,`web.xml`部署描述符文件以及`src`和`lib`子目錄。 `build.xml`文件是 Ant 構建文件,它描述了構建,部署或清理項目的任務。 `web.xml`定義了 Web 應用的結構。 在`lib`目錄中,有`servlet-api.jar`文件,用于編譯源文件。 (可以在 Tomcat 安裝目錄的`lib`子目錄中找到它。)在`src`目錄中,我們有 Java 源文件。 `web.xml`文件定義 Web 應用的結構。 ```java <?xml version="1.0" encoding="UTF8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true"> <description> Servlet which connects to Derby </description> <display-name>Derby, Tomcat</display-name> <servlet> <servlet-name>SelectAllCars</servlet-name> <servlet-class>zetcode.SelectAllCars</servlet-class> </servlet> <servlet-mapping> <servlet-name>SelectAllCars</servlet-name> <url-pattern>/SelectAllCars</url-pattern> </servlet-mapping> </web-app> ``` 這些是`web.xml`文件的內容。 在此文件中,我們注冊`SelectAllCars` servlet。 ```java <?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/testdb" auth="Container" type="javax.sql.DataSource" username="user12" password="34klq*" driverClassName="org.apache.derby.jdbc.ClientDriver" url="jdbc:derby://localhost:1527/testdb" maxActive="10" maxIdle="4"/> </Context> ``` 在`context.xml`文件中,我們定義 JDBC 數據源。 可以為所有 Web 應用或單個應用定義`context.xml`文件。 后者是我們的情況。 我們將顯示 Ant 構建文件,該文件將用于構建和部署我們的小型應用。 ```java <?xml version="1.0" ?> <project name="allcars" default="deploy"> <property name="src.dir" value="src"/> <property name="build.dir" value="build"/> <property name="dist.dir" value="dist"/> <property name="deploy.dir" value="/home/janbodnar/bin/tomcat/webapps"/> <echo>${ant.project.name}</echo> <target name="init"> <mkdir dir="${build.dir}/classes" /> <mkdir dir="${dist.dir}"/> <echo>Directories created.</echo> </target> <target name="compile" depends="init"> <javac srcdir="${src.dir}" destdir="${build.dir}/classes" includeantruntime="false"> <classpath path="lib/servlet-api.jar"/> </javac> <echo>Source files compiled.</echo> </target> <target name="archive" depends="compile"> <war destfile="${dist.dir}/${ant.project.name}.war" webxml="web.xml"> <classes dir="${build.dir}/classes"/> <metainf file="context.xml"/> </war> <echo>Archive created.</echo> </target> <target name="deploy" depends="archive"> <copy file="${dist.dir}/${ant.project.name}.war" todir="${deploy.dir}"/> <echo>Project deployed.</echo> </target> <target name="clean"> <delete dir="${dist.dir}"/> <delete dir="${build.dir}"/> <echo>Project cleaned.</echo> </target> </project> ``` 構建文件包括五個任務。 初始化任務將創建必要的目錄。 編譯任務將編譯源代碼。 存檔任務將創建一個網絡存檔。 deploy 任務會將歸檔文件部署到 Tomcat 服務器。 最后,清潔任務將進行清潔。 以下是`SelectAllCars` Servlet。 ```java package zetcode; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.logging.Level; import java.util.logging.Logger; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; public class SelectAllCars extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = null; Connection con = null; Statement st = null; ResultSet rs = null; try { out = response.getWriter(); Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/testdb"); con = ds.getConnection(); st = con.createStatement(); out.println("<html>"); out.println("<head>"); out.println("<title>SimpleServlet</title>"); out.println("</head>"); out.println("<body>"); rs = st.executeQuery("SELECT * FROM CARS"); while (rs.next()) { out.print(rs.getInt(1)); out.print(" "); out.print(rs.getString(2)); out.print(" "); out.print(rs.getString(3)); out.print("<br>"); } out.println("</body>"); out.println("</html>"); } catch (NamingException | SQLException ex) { Logger lgr = Logger.getLogger(SelectAllCars.class.getName()); lgr.log(Level.SEVERE, ex.getMessage(), ex); } finally { try { if (rs != null) { rs.close(); } if (con != null) { con.close(); } if (out != null) { out.close(); } } catch (SQLException ex) { Logger lgr = Logger.getLogger(SelectAllCars.class.getName()); lgr.log(Level.WARNING, ex.getMessage(), ex); } } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } } ``` 在上面的 servlet 中,我們連接到 Derby `testdb`數據庫并從`CARS`表中獲取所有行。 ```java Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/testdb"); ``` 我們使用 JNDI 命名查找來獲取數據源。 從數據源,我們創建連接對象。 ```java rs = st.executeQuery("SELECT * FROM CARS"); while (rs.next()) { out.print(rs.getInt(1)); out.print(" "); out.print(rs.getString(2)); out.print(" "); out.print(rs.getString(3)); out.print("<br>"); } ``` 我們使用 SQL 語句從`CARS`表中檢索所有數據。 我們從結果集對象中打印數據。 ```java $ ant Buildfile: /home/janbodnar/programming/derby/servlet/build.xml [echo] allcars init: [mkdir] Created dir: /home/janbodnar/programming/derby/servlet/build/classes [mkdir] Created dir: /home/janbodnar/programming/derby/servlet/dist [echo] Directories created. compile: [javac] Compiling 1 source file to /home/janbodnar/programming/derby/ servlet/build/classes [echo] Source files compiled. archive: [war] Building war: /home/janbodnar/programming/derby/servlet/dist/allcars.war [echo] Archive created. deploy: [copy] Copying 1 file to /home/janbodnar/bin/tomcat/webapps [echo] Project deployed. BUILD SUCCESSFUL Total time: 1 second ``` 我們啟動 ant 來構建和部署項目。 ![Output of the servlet](https://img.kancloud.cn/c2/ff/c2ffc787c4f4b3aba2f691f491b923b5_495x283.jpg) 圖:`SelectAllCars` servlet 的輸出 我們導航到`localhost:8080/allcars/SelectAllCars` URL 并接收輸出。 在本章中,我們使用了 Derby 和 Apache Tomcat。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看