2008-03-25 19:25
JSP是JavaServer Pages的简称,是一种集成HTML及Java程序于一个网页的技术。我觉得使用JSP编写程序比ASP、PHP等语言更具有挑战性,更能学到知识,因为它涉及到面向对象的JAVA语言,要用好JSP,就得对JAVA有一定的了解。除此之外,还要求能熟练使用各种开发工具,像Dreamweaver、Photoshop、JBuilder等。
工欲善其事,必先利其器。在运行JSP程序之前,必须做一些准备工作。首先要有一个WEB伺服器,Apache或IIS都可以;其次要有一个执行JAVA程序的的编译器;再次还要有一个支持JSP的引擎,目前有很多引擎可供选择,例如tomcat、weblogic、resin等。 本问介绍的留言板程序在作者的机器上可以顺利运行,详细资料如下: 操作系统: Windows 2000 SERVER JAVA编译器: JDK1.3 WEB伺服器: Apache1.13.2 + Tomcat3.1引擎 数据库: Access 2000 Apache和Tomcat安装后的配置有点挑战性,下面是我的安装过程: 1).安装JDK1.3 a).双击 J2SDK1_3_0-WIN.exe 文件,安装到 C:/jdk1.3 目录下; b).更新下列环境变量,把 C:/jdk1.3/lib/tools.jar;C:/jdk1.3/lib/dt.jar;C:/myclasses加入到CLASSPATH中。 更新方法:右击 我的电脑-属性-高级-环境变量; c).重起计算机。 2).安装Apache1.13.2 a).双击 apache_1_3_12_win32.exe 文件,安装到 C:/Apache 目录下; b).用记事本修改 C:/Apache/conf/httpd.conf: I).PORT:设置Apache Web Server运行时使用的端口号,我把它改成Port 8080,以后在浏览器上输入 http://ip:8080 就可以访问到Apache Web Server服务器; II).SERVERNAME:我把SERVERNAME设置为202.38.126.134(这是我的机器的IP地址); III).Apache安装完后在"开始-程序"菜单组中多了Apache Web Server菜单组,运行其中的Install Apache as a service,这样的话在“开始-设置-控制面板-服务”中就多了一个名为Apache的服务,您可以用它来启动或停止Apache服务; IV).打开“开始-设置-控制面板-服务”,选Apache,按"开始"启动Apache服务。 c).在IE中输入 http://ip:8080 (ip是你使用的机器的ip地址),Apache运行否? 3).安装Tomcat3.1 a).用WinZIP把tomcat.zip解压缩到一个目录下,最后弄成C:/tomcat; b).打开C:/Apache/conf/httpd.conf文件,在该文件最后加上类似这样一句话: Include C:/tomcat/conf/tomcat.conf; c).修改Tomcat运行的端口号,注意Tomcat自己有一个独立的HTTP服务器,它必须使用一个还未被使用的端口号,我使用PORT:80,在C:/tomcat/conf/server.xml中修改; d).将SET TOMCAT_HOME=c:/tomcat SET JAVA_HOME=c:/jdk1.3 加到 C:/tomcat/bin/tomcat.bat文件中,修改完的文件如下: ...... rem Guess TOMCAT_HOME if it is not present SET TOMCAT_HOME=c:/tomcat SET JAVA_HOME=c:/jdk1.3 if not "%TOMCAT_HOME%" == "" goto gothome 下面还有...... e).双击C:/tomcat/startup.bat启动Tomcat; f).在浏览器上输入 http://ip/,如果能看到Tomcat Version 3.1这一页,就表示Tomcat安装成功了。 到此准备工作也就差不多了,最后在Tomcat目录下创建一个目录,用来存放编写的程序,具体情况如下: C:/tomcat/fox --存放 .html和 .jsp 文件 C:/tomcat/fox/images --存放图片文件 C:/tomcat/fox/global --存放数据库 C:/tomcat/fox/WEB-INF/classes --存放JAVA类文件 为了使这个目录下的JSP程序能顺利运行,还需要在 C:/tomcat/conf/server.xml文件中加上几行代码: <Context path="/fox" docBase="fox" defaultSessionTimeOut="30"isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false"/> 添加完代码后的server.xml文件看起来如下所示: ...... <Context path="" docBase="webapps/ROOT" debug="0" reloadable="true" > </Context> <Context path="/redfox" docBase="redfox" defaultSessionTimeOut="30" isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false"/> <Context path="/test" docBase="webapps/test" debug="0" reloadable="true" > </Context> 下面还有...... 现在编写一个名为 test.jsp的程序,存于 C:/tomcat/fox/test.jsp <html> <body> <%java.util.Date date=new java.util.Date(); %> Hello! the time is now <%out.println(date);%> </body> </html> 在IE中键入 http://ip/fox/test.jsp,如果能看到当前的时间,那么恭喜:可以开始编写留言板程序了。 一.创建数据库 1).打开Access2000,创建一个新的数据库,我将这个数据库命名为 foxdb.mdb,存在C:/tomcat/fox/global/foxdb.mdb。接下来在 eagle.mdb中创建一个表,命名为 foxtable,表中有五个字段,全为文本格式: 其中“URL”用于记录留言者的 IP 。至于各字段的长度,我把“留言”定为200,其它四个各为20。 2).指定ODBC数据源,其名为foxdb ,指向 C:/tomcat/fox/global/foxdb.mdb。 二.编写用户的留言界面 foxnote.html,存于C:/tomcat/fox/foxnote.html: <html> <body> <form method="post" action="foxnoteinsert.jsp"> <br>姓名: <input name=username size=15 value=""> <br>邮箱: <input name=email size=15 value=""> <br>留言: <br> <textarea name=doc rows="5" cols="40"> </textarea> <br> <input type=submit value="递交"> <input type=reset value="重填"> </form> </bocy> </html> 在IE中键入 http://ip/fox/foxnote.html 看看是否显示正常(ip是你机器的ip地址) 三.编写 foxnoteinsert.jsp ,将用户的留言写进数据库表中: <body bgcolor="#FFFFFF"> <%@ page import="java.sql.*,MyUtil,java.util.*"%> <% Connection con=null; String username=MyUtil.gb2312ToUnicode(request.getParameter("username")); String email=MyUtil.gb2312ToUnicode(request.getParameter("email")); String doc=MyUtil.gb2312ToUnicode(request.getParameter("doc")); String url=request.getRemoteAddr(); try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con=DriverManager.getConnection("jdbc:odbc:foxdb","",""); String str="insert into foxtable values(?,?,?,?);"; PreparedStatement pstmt=con.prepareStatement(str); pstmt.setString(1,username); pstmt.setString(2,email); pstmt.setString(3,doc); pstmt.setString(4,url); pstmt.executeUpdate(); pstmt.close(); con.close(); } catch(Exception e) { out.println(e.getMessage()); } %> 这个程序中有一些要说明的地方,就是其中用到了一个 JavaBean :MyUtil.class 。 MyUtil 的作用是字符串之间的转换。必需关注的是JSP的字符串以Unicode码表示,而留言板界面的表单却是以 gb2312 码表示。所以将用户的留言写进数据库还需要码间的转换。如果不转换而把留言直接写到数据库表,则会产生乱码。下面是 MyUtil 的原代码,存于C:/tomcat/fox/WEB-INF/classes/MyUtil.java ,编译后的MyUtil.class文件也存于此。 import java.io.*; public class MyUtil{ public static String gb2312ToUnicode(String s){ try{ return new String(s.getBytes("ISO8859_1"),"gb2312"); } catch(UnsupportedEncodingException uee){ return s; } } public static String unicodeTogb2312(String s){ try{ return new String(s.getBytes("gb2312"),"ISO8859_1"); } catch(UnsupportedEncodingException uee){ return s; } } } 四.编写 foxnoteview.jsp ,用于浏览数据库表中已有的留言,存于C:/tomcat/fox/foxnoteview.jsp ,代码如下: <html> <body> <%@ page contentType="text/html;charset=gb2312" language="java" import="java.sql.*"%> <% Connection con=null; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con=DriverManager.getConnection("jdbc:odbc:foxdb","",""); Statement statement=con.createStatement(); ResultSet rs=statement.executeQuery("select * from foxtable"); %> <table border="1" width="100%" cellspacing="0" cellpadding="0" align="center" bordercolorlight="#CCCCFF" bordercolordark="#FFFFFF"> <tr bgcolor="#FFFFFF"> <td width="15%" height="25" align="center"><i>作者</i></td> <td width="28%" height="25" align="center"><i>发表时间</i></td> <td width="22%" height="25" align="center"><i>Email</i></td> <td width="35%" height="25" align="center"><i>留言内容</i></td> <% while(rs.next()){ out.println("<TR><td align=center><font size=2 color=#999999>"+rs.getString("作者")+"</TD>"); out.println("<TD><font size=2color=#999999>"+rs.getString("Email")+"</font></TD>"); out.println("<TD><font size=2 color=#999999>"+rs.getString("留言")+"</font></TD>"); out.println("<TD><font size=2 color=#999999>"+rs.getString("URL")+"</font></TD></TR>"); } rs.close(); con.close(); } catch(Exception e) { out.println(e.getMessage()); } %> </table> </body> </html> |