這篇算是因為網友詢問,才會有的一篇文章吧
最近也在看JSP的一些寫法
因為還沒有看很懂,所以這一篇一直都沒有寫
用Java跑網頁有二種型態
- Servlet
- JSP
Servlet可以算是JSP的前身,可以處理比較複雜的事情
JSP的寫法比較像PHP,那我們就從這裡開始吧
範例不難,但環境設定上頗麻煩的
——————————————————–
環境設定
再開始之前,先講一下環境設定
標題是連MySQL資料庫嘛,所以要有MySQL取得方式我就不細講了
有在寫PHP+MySQL的話,目前在使用的MySQL就大方的借過來用吧
若是使用整合環境(如appserv、wamp、xampp…等等)
就只需要補上JDK、Tomcat、MySQL Connecter,官方下載在這裡:
JDK
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Tomcat
http://tomcat.apache.org/download-70.cgi
MySQL Connecter for Java
http://www.mysql.com/downloads/connector/j/
選擇你的作業系統看是x86還是x64,選擇對應的檔案安裝
然後用Next大法(一直Next),一路給他裝完
如果,你像我一樣覺得這樣裝很凌亂,或是說是新建環境,甚麼都沒有的話
可以採用新版的XAMPP 1.81
http://www.apachefriends.org/zh_tw/xampp.html
這個版本裡面就有附tomcat摟
少一個要補檔的對象
接下來只要下載JDK + MySQL Connecter就行摟!
個人是建議用JDK+XAMPP的配置,或是整合環境+JDK+官方tomcat
(對了,新版含tomcat的XAMPP不能跟tomcat混裝,路徑會錯亂…)
XAMPP他主要功能有包入Apache HTTP Server、MySQL Server、FileZilla FTP Server、Mail Server、Tomcat Server
細項有php、pear、perl、cgi、phpmyadmin、mbstring、gd….等等(糟糕離題了…)
反正,整合環境有他的好處,除了設定檔要自己設定之外
其他大多都設定好了
MySQL Connector的地方先說明一下
只要下載完畢,解壓縮
取出mysql-connector-java-5.1.22-bin.jar這個檔案就好,壓縮檔裡的其他資料可以不用
(筆者抓到的是Connector/J 5.1.22版本,所以檔案叫做mysql-connector-java-5.1.22-bin.jar
請依照你下載的版本做變化)
然後將它放到tomcat的目錄的lib裡,所以變成
官方Tomcat路徑:
C:\Program Files\Apache Software Foundation\Tomcat 7.0\lib\mysql-connector-java-5.1.22-bin.jar
XAMPP包含tomcat路徑:
C:\xampp\tomcat\lib\mysql-connector-java-5.1.22-bin.jar
環境變數
主要有點麻煩的是Java的環境設定
Windows環境變數的方法在這裡:
WinXP在我的電腦按滑鼠右鍵 -> 內容 -> (上方頁籤)進階 -> 環境變數
Win7是在開始 -> 我的電腦按右鍵 -> 內容 -> (在左側欄)進階系統設定 -> (上方頁籤)進階 -> 環境變數
要添加這些環境變數
純JAVA環境
———————
JAVA_HOME
C:\Program Files\Java\jdk1.6.0_35
CLASSPATH
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre;%JAVA_HOME%\src
Path
.;%JAVA_HOME%\bin
JAVA環境+Tomcat網頁伺服器環境
———————
JAVA_HOME
C:\Program Files\Java\jdk1.6.0_35
CATALINA_HOME
(官方Tomcat路徑)
C:\Program Files\Apache Software Foundation\Tomcat 7.0
(XAMPP包含tomcat路徑)
C:\xampp\tomcat
(二者依環境,擇其一使用)
CLASSPATH
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre;%JAVA_HOME%\src;%CATALINA_HOME%\lib\servlet-api.jar;%CATALINA_HOME%\lib\mysql-connector-java-5.1.22-bin.jar
Path
.;%JAVA_HOME%\bin
有些地方要注意
如果裡面有值的話(像是Path),打個分號 ; 再連接上去
藍字的地方是他的版本號,要依照你的版本做變化(查看一下該路徑是否有東西)
設定完畢要重新開機(使用者登出再登入)才會生效
這樣就設定完成了
弄到這裡可以先測試一下
phpmyadmin是否能正常連線MySQL?(代表php+MySQL正常)
tomcat是否正常啟動? http://localhost:8080/ 有沒有東西?
—————————————————————————-
建立範例DB
終於回到程式面了,可以開個資料庫名字叫test_jspdb
執行以下SQL;
CREATE TABLE IF NOT EXISTS `employee`
`emp_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`emp_name` varchar(100) NOT NULL,
`emp_age` int(11) NOT NULL,
PRIMARY KEY (`emp_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3;
INSERT INTO `employee` (`emp_id`, `emp_name`, `emp_age`) VALUES
(1, ‘mary’, 20)
(2, ‘amy’, 22);
資料表內容很簡單,就只有員工姓名,員工年齡而已
—————————————————————-
JSP範例
這時候可以建立一個連線的範例來做了
網站的根目錄在:
C:\xampp\tomcat\webapps\ROOT
或
C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\ROOT
在那裡建立一個空檔案db_test.jsp然後貼上以下程式碼。
然後瀏覽 http://localhost:8080/db_test.jsp 看看能不能使用
如果出現can’t load mysql driver代表說MySQL Connector的設定有問題
查看檔案位置是否正確及環境變數設定是否有更新
<%@ page contentType=”text/html;charset=utf-8″%>
<%@ page import=”java.sql.*”%>
<%
try
{
//讀取mysqlDriver驅動程式
Class.forName(“org.gjt.mm.mysql.Driver”).newInstance();
try
{
//連接mysql資料庫
// 資料庫名稱”zend_test”,帳號”root”,密碼”123456″,
// 使用Unicode編碼”true”,字元集”UTF-8″
String db_user=”root”;
String db_pwd=”12345″;
String db_database=”test_jspdb”;
Connection conn= DriverManager.getConnection(“jdbc:mysql://localhost:3306/”+db_database+”?user=”+db_user+”&password=”+db_pwd+”&useUnicode=true&characterEncoding=UTF-8″);
try
{
//建立statement
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
try
{
//建立SQL查詢
String sql=”select * from album”;
ResultSet rs = stmt.executeQuery(sql);
%>
<h2>Employee</h2>
<table border=1>
<tr><th>id</th><th>artist</th><th>title</th></tr>
<%
//顯示資料
while(rs.next())
{
%>
<tr>
<td><%=rs.getString(“id”)%></td><td><%=rs.getString(“artist”)%></td><td><%=rs.getString(“title”)%></td>
</tr>
<%
}
%>
</table>
<%
// 關閉連線
rs.close();
rs = null;
stmt.close();
stmt = null;
conn.close();
}
catch (Exception ex)
{
out.println(“can’t read data”);
out.println(ex.toString());
}
}
catch (Exception e)
{
out.println(“can’t create statement”);
out.println(e.toString());
}
}
catch(Exception e)
{
out.println(“can’t content mysql database”);
out.println(e.toString());
}
}
catch(Exception e)
{
out.println(“can’t load mysql driver”);
out.println(e.toString());
}
%>
寫法跟PHP差不多吧!有個重點要提一下
其餘的update insert delete指令可以這樣寫)
String sql = “INSERT INTO `employee` (`emp_name`, `emp_age`) VALUES
(‘mary’, 20),”;
// 執行SQL語法
Statement stmt = conn.createStatement();
stmt.executeUpdate(sql);
你可能會疑惑createStatement這個方法
ResultSet.TYPE_FORWARD_ONLY (預設值)
就只能使用next()方法取得下一筆(指標順序定位)
ResultSet.TYPE_SCROLL_INSENSITIVE與 ResultSet.TYPE_SCROLL_SENSITIVE
能使用afterLast()、previous()、absolute()、relative()等其他方法
有 ResultSet.CONCUR_READ_ONLY與ResultSet.CONCUR_UPDATABLE兩個參數可以設定,前者表示只能讀取 ResultSet的資料,後者表示可以直接使用ResultSet來操作資料庫
(這個部份還沒有驗證,我想應該跟update insert delete指令無關)
如果有誤煩請指正
參考資料
http://caterpillar.onlyfun.net/Gossip/JavaGossip-V2/ResultSetCursor.htm
http://blog.yam.com/carl44/article/14825336
http://blog.alumni.nctu.edu.tw/plate/web/papermsg.jsp?UI=markcool&PI=96