sharky的點(diǎn)滴積累

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            56 隨筆 :: 104 文章 :: 10 評(píng)論 :: 0 Trackbacks
          Jsp 環(huán)境目前最流行的是 Tomcat5.0。Tomcat5.0 自己包含一個(gè) Web 服務(wù)器,如果是測(cè)試,就沒必要把 Tomcat 與 IIS 或 Apache 集成起來。在 Tomcat 自帶的 Web 服務(wù)器下可以進(jìn)行 Jsp 測(cè)試。
              安裝 Tomcat5.0 前需要安裝 JDK(如果是 Windows server 2003 就必須安裝 JDK,因?yàn)?Windows server 2003 是不帶 JVM 的-Windows server 2003 發(fā)行時(shí) MS 和 SUN 剛好鬧別扭呢)。安裝完后,要設(shè)置幾個(gè)環(huán)境變量:

              JAVA_HOME = E:\j2sdk1.4.2_04
              CLASSPATH = E:\j2sdk1.4.2_04\lib;E:\j2sdk1.4.2_04\lib\tools.jar
              Path 中加 .;E:\j2sdk1.4.2_04\bin;
              CATALINA_HOME = E:\Tomcat 5.0
              TOMCAT_HOME = E:\Tomcat 5.0


              解釋如下:我的 JDK版本是 1.4.2,安裝在 E:\j2sdk1.4.2_04 文件夾下。


              環(huán)境變量 JAVA_HOME 和 CATALINA_HOME 是一定要加的(至少參考資料都是這么說的)。CLASSPATH 也說要加,但是我沒加似乎也沒什么影響。Path 中加 “.;E:\j2sdk1.4.2_04\bin;”也一樣,我不加 jsp 也能運(yùn)行起來,但是在 DOS 窗口下手工編譯 .java 類到 .class 文件有影響,因?yàn)檎也坏?javac.exe 編譯命令文件。至于 path 中加的那個(gè)點(diǎn)“.”,我原來在 resin 下是需要的,在 Tomcat 下還沒確定它是不是必須的。
              大家還發(fā)現(xiàn) CATALINA_HOME 和 TOMCAT_HOME 的值是一樣的,我估計(jì) TOMCAT_HOME 是 Tomcat 的舊版本使用的,現(xiàn)在用的都是 CATALINA_HOME。不過這2個(gè)好象并不是不相容的,都加上,或者加其中任意一個(gè),Jsp 都不手影響。不過我建議用一個(gè) CATALINA_HOME 就算了。


              Tomcat5.0 設(shè)置虛擬路徑比較方便了,因?yàn)榭梢栽?Web 環(huán)境下管理。http://[url]:8080/admin 可以進(jìn)入管理界面(管理員admin密碼在 Tomcat 安裝過程中可以設(shè)置),在 Tomcat Server-Service (Catalina)-Host (localhost)下可以添加 Context,類似于 IIS
          里的虛擬路徑:Document Base 指的是從實(shí)際 E:\Tomcat 5.0\webapps\ROOT 為起點(diǎn)的文件路徑,Path 指的是從虛擬“/”開始的虛擬路徑名,如“/mytest”。這里 Tomcat 好象設(shè)計(jì)的有點(diǎn)不完善,只要加了新的 Context,保存,再點(diǎn)“Commit Changes”按鈕,再點(diǎn)Context 去看時(shí),界面就會(huì)退到登錄界面,但是有時(shí)頁(yè)面就出錯(cuò)了,必須再次手工進(jìn)入http://[url]:8080/admin。加了 Context,Apache Tomcat 服務(wù)必須“關(guān)閉/啟動(dòng)”一下(在Windows管理控制臺(tái)的服務(wù)里)。有資料說在 http://localhost:8088/manager 管理界面下可以 Start 和 Stop 來重新啟動(dòng)對(duì)應(yīng)的 Context,但是我 Stop 后就是 Start 不起來。點(diǎn)了一下 Undeploy,就把 Context 刪除了,注意:把 Context 對(duì)應(yīng)的物理文件夾也給刪除了!!就是說你做了個(gè)應(yīng)用,移到這里,如果不小心,就給刪了-比病毒還厲害。小心啊!!


              下來我說一下 Jsp 連接 mySQL 的問題。如果用 Jsp 去連接 Access,我感覺就是把裙子穿在男人身上。Access 和 ASP 才是天造地設(shè)的一對(duì)。Jsp 連接 mySQL 或者 Oracle 才算合情合理。原因我認(rèn)為是:用 Jsp 做開發(fā),其優(yōu)勢(shì)就是跨 OS 平臺(tái),如果用 Jsp + Access 組合,跨平臺(tái)的優(yōu)勢(shì)就沒有了。ASP 和 Access 已經(jīng)工作的很好了,也簡(jiǎn)單,你何必要?jiǎng)e扭的去用 Jsp 開發(fā)?當(dāng)然,如果您對(duì) Jsp 非常熟悉(或者對(duì) Asp 非常不熟悉),或者非常喜歡 Jsp(或者非常不喜歡 Asp),或者您有大量的數(shù)據(jù)積累在 Access 里,您要用 Jsp+Access 在技術(shù)上也不是不行的。
              mySQL 的安裝非常簡(jiǎn)單,基本安裝完畢都能正常使用,建立數(shù)據(jù)庫(kù),設(shè)置用戶,都可以在 mySQL 的環(huán)境下完成。就是對(duì)用慣了 GUI 界面的人,感覺不順手。網(wǎng)上能下載到一些 mySQL 的圖形用戶界面的管理工具,但好象不是免費(fèi)的。


              用 Jsp 連接 mySQL 數(shù)據(jù)庫(kù),從表里取數(shù)據(jù),寫一段代碼測(cè)試一下:


          程序代碼1:
          <!--首先導(dǎo)入一些必要的packages-->
          <%@ page import="java.io.*"%>
          <%@ page import="java.util.*"%>
          <!--告訴編譯器使用SQL包-->
          <%@ page import="java.sql.*"%>
          <!--設(shè)置中文輸出-->
          <%@ page contentType="text/html; charset=GB2312" %>


          <html>
          <head>
            <title>mySQL test</title>
          </head>
          <body>
          <%
            Connection con;
            Statement stmt;
            ResultSet rs;


            //加載驅(qū)動(dòng)程序,下面的代碼為加載MySQL驅(qū)動(dòng)程序
            Class.forName("com.mysql.jdbc.Driver");


            //注冊(cè)MySQL驅(qū)動(dòng)程序
            DriverManager.registerDriver(new com.mysql.jdbc.Driver());


            //用適當(dāng)?shù)尿?qū)動(dòng)程序連接到數(shù)據(jù)庫(kù)
            //String dbUrl = "jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=GB2312";
            //String dbUser = "root";  //用戶名
            //String dbPwd = "abcd1001";  //密碼
            //建立數(shù)據(jù)庫(kù)連接
            //con = java.sql.DriverManager.getConnection(dbUrl, dbUser, dbPwd);


            String dbUrl ="jdbc:mysql://localhost:3306/mysql?user=root&password=abcd1001&useUnicode=true&characterEncoding=gb2312";
            con = DriverManager.getConnection(dbUrl);


            //創(chuàng)建一個(gè)JDBC聲明
            stmt = con.createStatement();


            //增加新記錄
            //stmt.executeUpdate("INSERT INTO books (id,name,title,price) VALUES ('999','Tom','Tomcat Bible',44.5)");


            //查詢記錄
            rs = stmt.executeQuery("select * from user");


            //輸出查詢結(jié)果
            out.println("<table border=1 width=400>");
            while (rs.next())
            {
            String col1 = rs.getString(1);
            String col2 = rs.getString(2);
            String col3 = rs.getString(3);
            String col4 = rs.getString(4);
            //打印所顯示的數(shù)據(jù)
            out.println("<tr><td>"+col1+"</td><td>"+col2+"</td><td>"+col3+"</td><td>"+col4+"</td></tr>");
            }
            out.println("</table>");


            //關(guān)閉數(shù)據(jù)庫(kù)連結(jié)
            rs.close();
            stmt.close();
            con.close();
          %>
          </body>
          </html>



          程序代碼2:
          <%@ page contentType="text/html;charset=gb2312"%>
          <%@ page import="java.sql.*"%>
          <html>
          <body>
          <%
          Class.forName("org.gjt.mm.mysql.Driver").newInstance();
          String url ="jdbc:mysql://localhost/chclyb?user=root&password=abcd1001&useUnicode=true&characterEncoding=8859_1";
          //testDB為你的數(shù)據(jù)庫(kù)名
          Connection conn= DriverManager.getConnection(url);
          Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
          String sql="select * from test";
          ResultSet rs=stmt.executeQuery(sql);
          while(rs.next()) {%>
          第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>
          第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%><br>
          <%}%>
          <%out.print("數(shù)據(jù)庫(kù)操作成功,恭喜你");%>
          <%rs.close();
          stmt.close();
          conn.close();
          %>
          </body>
          </html>


              我的以上 2 段代碼都能工作。注意以上2段代碼的 Class.forName(…) 部分的不同:


              Class.forName("com.mysql.jdbc.Driver");  //在程序代碼1中
              Class.forName("org.gjt.mm.mysql.Driver").newInstance();  //在程序代碼2中


              程序代碼 2 中的代碼是為了兼容 mySQL 的老版本而保留的,現(xiàn)在都用 Class.forName("com.mysql.jdbc.Driver"); 驅(qū)動(dòng)了。
              以上的代碼拷貝到 Tomcat 的虛擬路徑下能成功執(zhí)行嗎?恐怕不行。因?yàn)檫€有個(gè)重要的事情沒有做:需要給 Tomcat5.0 安裝 mySQL 的 JDBC 驅(qū)動(dòng)程序!這個(gè)問題,網(wǎng)上的大多數(shù)文章都沒講,給貼一段連接 mySQL 的代碼,就讓我們?nèi)ミB接數(shù)據(jù)庫(kù)了,連不上的!
              mySQL 的驅(qū)動(dòng)需要從網(wǎng)上下載,下載完畢,拷貝到 E:\Tomcat 5.0\common\lib 路徑下(我下載下來文件名是mysql-connector-java-3.2.0-alpha-bin.jar),把 Tomcat 服務(wù)來個(gè)Stop/start 安裝就結(jié)束了。文件名可以改的,不影響使用,因?yàn)檫@是個(gè)壓縮包,Tomcat 能自動(dòng)認(rèn)識(shí)到包里的內(nèi)容,并把有關(guān)類注冊(cè)進(jìn)來。前面說的 Class.forName(…) 部分的不同可以在包里找到答案,因?yàn)榘镎?com/mysql/jdbc/Driver 和 org/gjt/mm/mysql/Driver 2 個(gè)路徑,下面放的類文件是一樣的。


              用 Jsp 連接 Oracle 數(shù)據(jù)庫(kù)測(cè)試,就好說了,但是同樣必須在 E:\Tomcat 5.0\common\lib 路徑下拷貝和注冊(cè) Oracle 的 JDBC 驅(qū)動(dòng),這個(gè)驅(qū)動(dòng)文件沒必要在網(wǎng)上四處打聽,顯得很菜的樣子(我當(dāng)初就是這樣!),這個(gè)文件在 Oracle 的 E:\oracle\ora90\jdbc\lib 路徑下,文件名是 classes12.jar。我的示例代碼如下:



          程序代碼3:


          <%@ page contentType="text/html;charset=gb2312"%>
          <%@ page import="java.sql.*"%>
          <html>
          <body>
          <%
            Class.forName("oracle.jdbc.driver.OracleDriver");   //.newInstance();
            String url="jdbc:oracle:thin:@10.0.1.1:1521:mydb"; //mydb為數(shù)據(jù)庫(kù)的SID,10.0.1.1 為 數(shù)據(jù)庫(kù)服務(wù)器 IP
            String user="system";
            String password="abcd1001";
            Connection conn= DriverManager.getConnection(url, user, password);
            Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
            String sql="select * from test";  //test 是表名,要先建立這個(gè)表,再送幾條記錄
            ResultSet rs=stmt.executeQuery(sql);
            while(rs.next())
            {
          %>
              第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>
              第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%> <br>
          <%
            }
            out.print("數(shù)據(jù)庫(kù)操作成功,恭喜。");


            rs.close();
            stmt.close();
            conn.close();
          %>
          </body>
          </html>


              關(guān)于 Oracle 數(shù)據(jù)庫(kù):我安裝的是 Oracle9i 企業(yè)版(Windows server 2003 下),安裝完畢后,Oracle 將占用 80 端口運(yùn)行自帶的 Apache1.3 Web服務(wù)器,還占用 8080 端口運(yùn)行 TNSLSNR 服務(wù)(TNSLSNR.EXE文件在 X:\oracle\ora90\BIN 下),提供一些 log 及文檔。所以建議安裝 Oracle 的機(jī)器就不要安裝 IIS 了,如果 IIS 先啟動(dòng)起來,Oracle 的 http 服務(wù)就不能啟動(dòng)了。也不能占用 8080 端口。問題是如果還安裝 Tomcat,Tomcat 默認(rèn)正好用的是 8080 端口,所以安裝 Tomcat 時(shí)最好把端口設(shè)成別的值,如 8088。
              Oracle 里建立表,必須先建立表空間,還可以加一個(gè)數(shù)據(jù)文件(也可以不加,因?yàn)榻⒈砜臻g時(shí)默認(rèn)已經(jīng)建了一個(gè)數(shù)據(jù)文件。以后可以視需要再添加)。再建立一個(gè)用戶(以后的“方案”名和用戶名一樣)。建立表時(shí),要選擇表空間和方案名,最好把表建立在對(duì)應(yīng)的方案下,把他們對(duì)應(yīng)起來,以后好管理。如果把表建立在別的“方案”下,用 SQL*plus 語(yǔ)句訪問時(shí)要用 [方案].[表名]的格式。


              稀稀拉拉說了這么多,是我的一些筆記類的東西。有些東西真的不太懂的,因?yàn)閯倓偨佑|了一些非 Microsoft 的東西。希望高手指出我說的和理解不對(duì)的地方。新手也不要完全接收我的東西,多想一下,看在您的環(huán)境下,我說的能不能調(diào)試成功。

          posted on 2005-08-22 00:20 sharky的點(diǎn)滴積累 閱讀(108) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 漠河县| 梁平县| 手机| 松原市| 拜泉县| 隆安县| 湾仔区| 宿迁市| 长寿区| 岳普湖县| 广元市| 平武县| 兴义市| 西青区| 台南市| 澎湖县| 黄平县| 贺州市| 遂昌县| 丹东市| 临夏县| 孝昌县| 合肥市| 江川县| 托克托县| 白朗县| 寿宁县| 玛曲县| 普陀区| 温泉县| 平顺县| 东明县| 封开县| 凯里市| 铜川市| 积石山| 泾源县| 乌恰县| 普定县| 江北区| 蓬莱市|