jsp 环境目前最流行的是 tomcat5.0。tomcat5.0 自己包含一个 web 服务器,如果是测试,就没必要把 tomcat 与 iis 或 apache 集成起来。在 tomcat 自带的 web 服务器下可以进行 jsp 测试。
安装 tomcat5.0 前需要安装 jdk(如果是 windows server 2003 就必须安装 jdk,因为 windows server 2003 是不带 jvm 的-windows server 2003 发行时 ms 和 sun 刚好闹别扭呢)。安装完后,要设置几个环境变量:
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 文件夹下。
环境变量 java_home 和 catalina_home 是一定要加的(至少参考资料都是这么说的)。classpath 也说要加,但是我没加似乎也没什么影响。path 中加 “.;e:\j2sdk1.4.2_04\bin;”也一样,我不加 jsp 也能运行起来,但是在 dos 窗口下手工编译 .java 类到 .class 文件有影响,因为找不到 javac.exe 编译命令文件。至于 path 中加的那个点“.”,我原来在 resin 下是需要的,在 tomcat 下还没确定它是不是必须的。
大家还发现 catalina_home 和 tomcat_home 的值是一样的,我估计 tomcat_home 是 tomcat 的旧版本使用的,现在用的都是 catalina_home。不过这2个好象并不是不相容的,都加上,或者加其中任意一个,jsp 都不手影响。不过我建议用一个 catalina_home 就算了。
tomcat5.0 设置虚拟路径比较方便了,因为可以在 web 环境下管理。http://[url]:8080/admin 可以进入管理界面(管理员admin密码在 tomcat 安装过程中可以设置),在 tomcat server-service (catalina)-host (localhost)下可以添加 context,类似于 iis
里的虚拟路径:document base 指的是从实际 e:\tomcat 5.0\webapps\root 为起点的文件路径,path 指的是从虚拟“/”开始的虚拟路径名,如“/mytest”。这里 tomcat 好象设计的有点不完善,只要加了新的 context,保存,再点“commit changes”按钮,再点context 去看时,界面就会退到登录界面,但是有时页面就出错了,必须再次手工进入http://[url]:8080/admin。加了 context,apache tomcat 服务必须“关闭/启动”一下(在windows管理控制台的服务里)。有资料说在 http://localhost:8088/manager 管理界面下可以 start 和 stop 来重新启动对应的 context,但是我 stop 后就是 start 不起来。点了一下 undeploy,就把 context 删除了,注意:把 context 对应的物理文件夹也给删除了!!就是说你做了个应用,移到这里,如果不小心,就给删了-比病毒还厉害。小心啊!!
下来我说一下 jsp 连接 mysql 的问题。如果用 jsp 去连接 access,我感觉就是把裙子穿在男人身上。access 和 asp 才是天造地设的一对。jsp 连接 mysql 或者 oracle 才算合情合理。原因我认为是:用 jsp 做开发,其优势就是跨 os 平台,如果用 jsp + access 组合,跨平台的优势就没有了。asp 和 access 已经工作的很好了,也简单,你何必要别扭的去用 jsp 开发?当然,如果您对 jsp 非常熟悉(或者对 asp 非常不熟悉),或者非常喜欢 jsp(或者非常不喜欢 asp),或者您有大量的数据积累在 access 里,您要用 jsp+access 在技术上也不是不行的。
mysql 的安装非常简单,基本安装完毕都能正常使用,建立数据库,设置用户,都可以在 mysql 的环境下完成。就是对用惯了 gui 界面的人,感觉不顺手。网上能下载到一些 mysql 的图形用户界面的管理工具,但好象不是免费的。
用 jsp 连接 mysql 数据库,从表里取数据,写一段代码测试一下:
程序代码1:
<!–首先导入一些必要的packages–>
<%@ page import=”java.io.*”%>
<%@ page import=”java.util.*”%>
<!–告诉编译器使用sql包–>
<%@ page import=”java.sql.*”%>
<!–设置中文输出–>
<%@ page contenttype=”text/html; charset=gb2312″ %>
<html>
<head>
<title>mysql test</title>
</head>
<body>
<%
connection con;
statement stmt;
resultset rs;
//加载驱动程序,下面的代码为加载mysql驱动程序
class.forname(“com.mysql.jdbc.driver”);
//注册mysql驱动程序
drivermanager.registerdriver(new com.mysql.jdbc.driver());
//用适当的驱动程序连接到数据库
//string dburl = “jdbc:mysql://localhost:3306/mysql?useunicode=true&characterencoding=gb2312”;
//string dbuser = “root”; //用户名
//string dbpwd = “abcd1001”; //密码
//建立数据库连接
//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);
//创建一个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”);
//输出查询结果
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);
//打印所显示的数据
out.println(“<tr><td>”+col1+”</td><td>”+col2+”</td><td>”+col3+”</td><td>”+col4+”</td></tr>”);
}
out.println(“</table>”);
//关闭数据库连结
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为你的数据库名
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()) {%>
第一个字段内容为:<%=rs.getstring(1)%>
第二个字段内容为:<%=rs.getstring(2)%><br>
<%}%>
<%out.print(“数据库操作成功,恭喜你”);%>
<%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 的老版本而保留的,现在都用 class.forname(“com.mysql.jdbc.driver”); 驱动了。
以上的代码拷贝到 tomcat 的虚拟路径下能成功执行吗?恐怕不行。因为还有个重要的事情没有做:需要给 tomcat5.0 安装 mysql 的 jdbc 驱动程序!这个问题,网上的大多数文章都没讲,给贴一段连接 mysql 的代码,就让我们去连接数据库了,连不上的!
mysql 的驱动需要从网上下载,下载完毕,拷贝到 e:\tomcat 5.0\common\lib 路径下(我下载下来文件名是mysql-connector-java-3.2.0-alpha-bin.jar),把 tomcat 服务来个stop/start 安装就结束了。文件名可以改的,不影响使用,因为这是个压缩包,tomcat 能自动认识到包里的内容,并把有关类注册进来。前面说的 class.forname(…) 部分的不同可以在包里找到答案,因为包里正有 com/mysql/jdbc/driver 和 org/gjt/mm/mysql/driver 2 个路径,下面放的类文件是一样的。
用 jsp 连接 oracle 数据库测试,就好说了,但是同样必须在 e:\tomcat 5.0\common\lib 路径下拷贝和注册 oracle 的 jdbc 驱动,这个驱动文件没必要在网上四处打听,显得很菜的样子(我当初就是这样!),这个文件在 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为数据库的sid,10.0.1.1 为 数据库服务器 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 是表名,要先建立这个表,再送几条记录
resultset rs=stmt.executequery(sql);
while(rs.next())
{
%>
第一个字段内容为:<%=rs.getstring(1)%>
第二个字段内容为:<%=rs.getstring(2)%> <br>
<%
}
out.print(“数据库操作成功,恭喜。”);
rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
关于 oracle 数据库:我安装的是 oracle9i 企业版(windows server 2003 下),安装完毕后,oracle 将占用 80 端口运行自带的 apache1.3 web服务器,还占用 8080 端口运行 tnslsnr 服务(tnslsnr.exe文件在 x:\oracle\ora90\bin 下),提供一些 log 及文档。所以建议安装 oracle 的机器就不要安装 iis 了,如果 iis 先启动起来,oracle 的 http 服务就不能启动了。也不能占用 8080 端口。问题是如果还安装 tomcat,tomcat 默认正好用的是 8080 端口,所以安装 tomcat 时最好把端口设成别的值,如 8088。
oracle 里建立表,必须先建立表空间,还可以加一个数据文件(也可以不加,因为建立表空间时默认已经建了一个数据文件。以后可以视需要再添加)。再建立一个用户(以后的“方案”名和用户名一样)。建立表时,要选择表空间和方案名,最好把表建立在对应的方案下,把他们对应起来,以后好管理。如果把表建立在别的“方案”下,用 sql*plus 语句访问时要用 [方案].[表名]的格式。
稀稀拉拉说了这么多,是我的一些笔记类的东西。有些东西真的不太懂的,因为刚刚接触了一些非 microsoft 的东西。希望高手指出我说的和理解不对的地方。新手也不要完全接收我的东西,多想一下,看在您的环境下,我说的能不能调试成功。