下面我们通过另一个简单的 Servlet 小程序来向读者介绍如何在 Solaris 下部署基于数据库的 Servlet ,为了简便起见笔者在这里使用的数据库是 Java JDK 中自带的 Derby 数据库,读者可根据自己的需求安装其他数据库进行测试。
( 1 )使用 Java JDK 自带的 Derby 数据库,我们需要先对 Solaris 的环境变量进行设置,同样打开系统根目录下" etc "文件夹下的" profile "文件,在其中添加如下内容
DERBY_HOME=/jdk6/db
export DERBY_HOME
在" CLASSPATH "中添加如下内容,在这里同样用" : "与前后内容隔开
$DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbytools.jar
配置完后如图 2-5-1 所示 
图 2-5-1
( 2 )保存关闭后,重新启动计算机,我们可以通过在"终端"键入如下命令,来验证我的对 Derby 的设置是否成功
java org.apache.derby.tools.sysinfo
如果我们的设置没有问题,"终端"窗口将会显示 Java 系统的很多信息,如图 2-5-2 所示 
图 2-5-2
( 3 )接下来我们使用管理工具 ij 来对 Derby 数据库进行操作
ij 是 Derby 自带的一个功能强大的数据库管理工具,可以进行很多数据库操作,完成上一步的操作后,就可以启动并使用 ij 了。在"终端"窗口键入如下命令
java org.apache.derby.tools.ij
命令执行后如图 2-5-3 所示 
图 2-5-3
从图中可以看出 ij 工具成功启动,并出现了系统提示符" ij> "。
( 4 )使用 ij 创建以及连接指定的数据库,其命令语法如下啊
connect 'jdbc:< 数据库路径 >;create=true';
这里"数据库路径"指的是指定数据库在磁盘上存放的位置,笔者在这里将数据库建在了 Solaris 系统根目录下,并命名为" db ",其命令如下
connect 'jdbc:/db;create=true';
命令成功执行后将在系统根目录下生成一个" db "文件夹如图 2-5-4 所示 
图 2-5-4
( 5 )下面我们通过如下命令来对数据库进行操作,我们将新建一个" person "表并向表中插入一条数据,读者需要注意的是,连接到数据库后一定要使用" disconnect "命令关闭数据库的连接,否则会影响其他应用对数据库的使用。
create table person (name varchar(20),upassword varcher(20));
insert into person values('test1','aaaa');
selet * from person;
commit;
disconnect;
exit;
运行结果如图 2-5-5 所示,这样我们就成功的建立了一个" person "表,并成功插入了一条数据。 
图 2-5-5
( 6 )在" tomcat6 "目录下的" webapps "中新建一个名为" DerbyTest "的文件夹如图 2-5-6 所示 
图 2-5-6
( 7 )在" DerbyTest "文件夹下新建一个" WEB-INF "文件夹,再并在此文件夹下新建一个" classes "文件夹
( 8 )在" classes "文件夹下开发我们程序所需的 Java 代码,首先开发 PersonBean.java 其代码如下
package xsz;
import java.sql.*;
import javax.sql.DataSource;
import javax.naming.*;
public class PersonBean{
String uid ;
String name;
String upassword;
Connection con;
PreparedStatement pstmt;
final String sql = "SELECT name FROM person WHERE name=? and upassword=?";
public PersonBean(){
try{
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
// 获取指定数据库的连接
con=DriverManager.getConnection("jdbc:derby:/db", "", "");
pstmt = con.prepareStatement(sql);
System.out.println(" 链接!!! ");
} catch(Exception e ){e.printStackTrace();}
}
public static void main(String args[]){new PersonBean();}
public void setName(String name){this.name = name;}
public String getName(){return name;}
public void setUpassword(String upassword){this.upassword = upassword;}
public String getUpassword(){return upassword;}
// 验证用户名和密码
public Boolean isvalidate(){
Boolean flag = false;
// 声明一个结果集对象
ResultSet rs = null;
try{
pstmt.setString(1,name);
pstmt.setString(2,upassword);
// 查询记录
rs = pstmt.executeQuery();
// 判断是否有记录
if(rs.next()){flag = true;} // 如果有记录,则用户是合法的
}catch(Exception ex){ex.printStackTrace();}
finally{
try{
if(rs != null){
rs.close();
rs = null;
}
}catch(Exception ex){ex.printStackTrace();}
}
return flag;
}}
( 9 )再在" classes "文件夹下开发我们程序所需的另一个 Java 代码, CenterServlet.java 其完整代码如下
package xsz;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class CenterServlet extends HttpServlet{
PersonBean person;
public void init(){person=new PersonBean();}
public void doPost(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
List errors = new ArrayList();
String action = req.getParameter("action");
if("login".equals(action)){
String name =req.getParameter("name");
String upassword =req.getParameter("upassword");
person.setName(name);
person.setUpassword(upassword);
if(person.isvalidate()){
// 用户 ID ,密码合法
req.setAttribute("name",name);
forward(req,resp,"login_success.jsp");
}else{// 用户 ID 、密码非法
errors.add(" 错误的用户 ID 及密码 !");
req.setAttribute("errors",errors);
forward(req,resp,"login.jsp");
}}
}
public void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException
{doPost(req,resp) ;}
public void forward(HttpServletRequest req,HttpServletResponse resp,String url)
throws ServletException,IOException
{ req.getRequestDispatcher(url).forward(req,resp);}
}
( 10 )完成以上两个业务代码的开发后,我们接下来对其进行编译 , 在"终端"窗口中使用如下命令切换到当前 Java 文件所在目录
cd \tomcat6
cd \webapps
cd \DerbyTest
cd \WEB-INF
cd \classes
( 11 )使用如下命令,同时对" classes "目录下的两个 java 文件进行编译
javac *.java
命令执行后如图 2-5-7 所示 
图 2-5-7
(12) 成功编译后,我们回到" classes "目录下会看见两个新生成的" .class "文件分别是" CenterServlet.clsss "和" PersonBean.class "如图 2-5-8 所示 
图 2-5-8
这时在" classes "目录下新建一个" xsz "的文件夹,这是两个 Java 程序所需要的包名,读者可根据自己所起的包名来命名此文件夹,但读者需要注意的是自己开发时 Java 程序中的包名一定要与此文件夹名一致,否则,程序将无法正常运行。
( 13 )接下来,我们在" WEB-INF "目录下创建一个" web.xml "文件,其代码如下
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>Tomcat Documentation</display-name>
<description>Tomcat Documentation.</description>
<servlet>
<servlet-name>CenterServlet</servlet-name>
<servlet-class>xsz.CenterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CenterServlet</servlet-name>
<url-pattern>/CenterServlet</url-pattern>
</servlet-mapping>
</web-app>
部署完我们的" xml "文件,接下来我们就可以开发用来显示的 JSP 文件了
(14) 在 " DerbyTest "目录下,新建一个" login.jsp "的文件用来提供显示我们登陆的页面,其代码如下:
<%@page contentType="text/html;charset=gb2312"%>
<%@page import="java.util.*"%>
<html>
<head><title> 登陆 </title></head>
<body>
<center>
<hr><br><br>
<!-- 服务器端验证,非法的用户名或密码提示 -->
<%
if(request.getAttribute("errors")!=null){
// 有错误,
List allerrors = (List)request.getAttribute("errors");
Iterator iter = allerrors.iterator();
while(iter.hasNext()){
%>
<li><%= iter.next() %></li>
<%
}
}
%>
<form action="CenterServlet" method="post">
<table>
<tr><td colspan="2"> 用户登陆 </td></tr>
<tr>
<td> 用户名: </td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td> 密 码: </td>
<td><input type="password" name="upassword"</td>
</tr>
<tr>
<td colspan="2">
<input type="hidden" name="action" value="login">
<input type="submit" value=" 登陆 ">
<input type="reset" value=" 重置 ">
</td>
</tr>
</table> </form></center></body></html>
(15) 新建一个" login_success.jsp "文件,用来显示我们登陆成功后的页面,其代码如下:
<%@page contentType="text/html;charset=gb2312"%>
<html>
<head><title> 登陆 </title></head>
<body>
<center>
<hr><br><br>
<h2> 登陆成功 </h2>
<h3> 欢迎
<font color="red" size="15"> <%= request.getAttribute("name") %></font>
光临!!! </h3>
</center></body></html>
这样我们就完成了,程序所需的代码,下面我们来验证一下我们的代码是否可以成功运行显示
(16) 在"终端"键入如下命令,启动 Tomcat
startup.sh
(17) 打开浏览器,在浏览器地址栏内键入" http://8080/DerbyTest/login.jsp "执行后会进入我们的登陆页面,如图 2-5-9 所示 
图 2-5-9
( 18 )在登陆窗口中分别输入用户名 " test1 ",密码" aaaa "这也是我们刚才往 person 表中插入的数据,点击登录,如果成功登陆,将显示如图 2-5-10 所示的欢迎页面,这也表示我们的程序代码是正确的。 
图 2-5-10
接下来我们进一步验证这个 Servlet 程序是基于 Derby 数据库的
( 19 )在 "终端"键入如下命令,启动 ij 管理器并连接到到我们刚才所创建的数据库
java org.apache.derby.tools.ij
connect 'jdbc:derby:/db';
在连接数据库时我们需要将浏览器和 Tomcat 关闭,否则,直接输入我们往数据库中插入的用户名和密码时,将不能成功登陆,如图 2-5-11 所示 
图 2-5-11
( 20 )使用如下命令,往数据库中插入一条数据,
insert into person values('test2','bbbb');
commit;
disconnect;
命令执行后,我们将得到如图 2-5-12 所示信息 
图 2-5-12
读者需要注意,插入数据后我们需要使用" commit "命令来将数据提交,否则,关闭数据库连接后刚才所插入的数据将无法保存到数据库
( 21 )完成数据插入后,使用如下命令重新启动 Tomcat
startup.sh
( 22 )打开浏览器,在地址栏输入" http://8080/DerbyTest/login.jsp ",在登陆页面用户名和密码处分别输入我们刚才插入的信息" test2 "、" bbbb "点击登陆,将会出现如图 2-5-13 所示页面 
图 2-5-13
此时我们还可以打开另一个浏览器输入" http://8080/DerbyTest/login.jsp "后登陆我们数据库中的另一个帐户,如图 2-5-14 所示 
图 2-5-14
自此,我们在 Solaris 系统下基于 Derby 的 Servlet 开发结束。
没有评论:
发表评论