搜索此博客

2008年3月5日星期三

开发并部署基于数据库的Servlet

下面我们通过另一个简单的 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-5-1

( 2 )保存关闭后,重新启动计算机,我们可以通过在"终端"键入如下命令,来验证我的对 Derby 的设置是否成功

java org.apache.derby.tools.sysinfo

如果我们的设置没有问题,"终端"窗口将会显示 Java 系统的很多信息,如图 2-5-2 所示
2-5-2
图 2-5-2

( 3 )接下来我们使用管理工具 ij 来对 Derby 数据库进行操作

ij 是 Derby 自带的一个功能强大的数据库管理工具,可以进行很多数据库操作,完成上一步的操作后,就可以启动并使用 ij 了。在"终端"窗口键入如下命令

java org.apache.derby.tools.ij

命令执行后如图 2-5-3 所示
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
图 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
图 2-5-5

( 6 )在" tomcat6 "目录下的" webapps "中新建一个名为" DerbyTest "的文件夹如图 2-5-6 所示
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
图 2-5-7

(12) 成功编译后,我们回到" classes "目录下会看见两个新生成的" .class "文件分别是" CenterServlet.clsss "和" PersonBean.class "如图 2-5-8 所示
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> 密 &nbsp;&nbsp; 码: </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
图 2-5-9

( 18 )在登陆窗口中分别输入用户名 " test1 ",密码" aaaa "这也是我们刚才往 person 表中插入的数据,点击登录,如果成功登陆,将显示如图 2-5-10 所示的欢迎页面,这也表示我们的程序代码是正确的。
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
图 2-5-11

( 20 )使用如下命令,往数据库中插入一条数据,

insert into person values('test2','bbbb');

commit;

disconnect;

命令执行后,我们将得到如图 2-5-12 所示信息
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
图 2-5-13

此时我们还可以打开另一个浏览器输入" http://8080/DerbyTest/login.jsp "后登陆我们数据库中的另一个帐户,如图 2-5-14 所示
2-5-14
图 2-5-14

自此,我们在 Solaris 系统下基于 Derby 的 Servlet 开发结束。

转自http://www.unix-center.net

没有评论:

Google