Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > WebSphere快速入门(40)
【标  题】:WebSphere快速入门(40)
【关键字】:Web,40,WebSphere,WebSphere,40
【来  源】:网络

WebSphere快速入门(40)

Your Ad Here WebSphere快速入门(40)

· JDBCLab:用JDBC访问一个数据库

在这个练习里你将学习使用 JDBC 访问数据库和插入一个记录到数据库的基础知识。

在这个练习里,你将写 RegistrationServlet 类的 register 方法。这个类和你在 Servlet1A 练习里用的一样。在这个练习里,你将使用数据库的功能。这个练习将展示实现用户需求的步骤。

第一部分:理解 regsiter() 方法在 RegistrationServlet 中的工作原理

在这个练习里,你将在 com.ibm.waslab.JDBC 包上工作。扩展 RegistrationServlet 类,理解 register() 。这个方法抛一个 SQLException 。完整的方法声明是:

public synchronized void register(Properties formInput)

throws SQLException{

}

register() 方法在 servlet 取得控制时从 doPost() 方法里被调用。 register() 方法实际上写一个新的记录到数据库。我们将在第二部分写 register() 方法。同时,我们需要确信一些设置步骤已经完成。

1. 打开 init() 方法,在 super.init() 的调用后面输入以下的代码:

//Load JDBC driver for DB2

try

{

Class.forName(JKToysDBInfo.gerDriver());

}

catch (ClassNotFoundException e)

{

erroLog(“JDBC Driver not found”+e);

}

保存 init() 方法。记住,在驱动器管理可以得到一个连接以前,一个正确的数据库驱动器必须被 servlet 装载。每一个 servlet 只在 servlet 的 init() 方法里作一次。这个方法并不真地建立一个连接,它只是允许连接被建立。

注意:在这个情况下,我们装载 DB2 app 驱动器。这个驱动器是在数据库装在 servlet 将要运行的同一台机器上时使用的。如果你在访问另一台机器上的数据库,你要使用 net 驱动器:

COM.ibm.db2.jdbc.net.DB2Driver

当用 net 驱动器得到一个连接,你需要在 getConnection() 里使用的 URL 里提供更多的信息。数据库所在的机器名或 URL ,和 DB2 Java Gateway 侦听的端口号。一个有效的 URL 参数看上去是这样的:

jdbc:db2://servrid:8888/databasename

第二部分

1. 现在,回去,重新打开 register ()方法。代码的第一行创建一个数据库连接:

Connection conn=DriverManager.getConnection(URL,USER,PASSWORD);

你用驱动器管理器的静态方法 getConnection() ,把数据库的 URL ,一个有效的用户 ID 和口令传递给它。 url,userid 和 password 在类被装载时从一个属性文件里得到 ( 看静态变量声明 ) 。

2. 现在到了有挑战性的部分了。我们要作的第一件事是找到已经被分配掉的最后一个客户号码,这样我们可以分配给正在注册的新客户一个新的客户号码(比以前的最高的还要高)。我们要存储这个新的客户号码在一个 int 变量名为 nextId 。为了做到这个,你会需要确信使用 Statement 类和 ResultSet 类。以下的 SQL ;

“SELECT MAX(CUSTNO) FORM”+DBOWNER+”.CUSTOMER”

将允许你获得当前最高的客户号。试试自己写这个代码,基于课程笔记的例子。如果你需要帮助,看答案页。

3. 接着你将用一个 prepared statement 对象来把客户属性对象里的信息插入数据库。输入以下的行:

//Insert record in the database

PreparedStatement insertStatement=

conn.prepareStatement(“INSERT INTO”+DBOWNER+”.CUSTOMER(FNAME,LNAME,ADDR,CITY,STATE,AGE,ZIP,CUSTNO)”+”VALUES(?,?,?,?,?,?,?,?)”);

上面的行要求连接创建一个 prepared statement 对象叫 insertStatement 。 SQL 语句作为参数被传递。数据库行的每一列的值用问号代表。每一个问号必须被一个正确类型的值代替。输入以下行:

insertStatement.setString(1,formInput.getProperty(“FNAME”));

insertStatement.setString(2,formInput.getProperty(“LNAME”));

insertStatement.setString(3,formInput.getProperty(“ADDR”));

insertStatement.setString(4,formInput.getProperty(“CITY”));

insertStatement.setString(5,formInput.getProperty(“STATE”));

insertStatement.setString(6,formInput.getProperty(“AGE”));

insertStatement.setString(7,formInput.getProperty(“ZIP”));

insertStatement.setInt(8,nextId);

4.insertStatement 执行对数据库的更新。输入下面两行:

insertStatement.executeUpdate();

如果有错误出现在创建连接时,语句或访问数据库,这个方法会抛出一个 SQLException 。

5. 最后你需要存储客户号码到 formInput 属性对象。输入下面行:

formInput.put(“CUSTNO”,new Integer(nextId).toString());

6. 保存方法。应该没有错误。

7. 接着你将需要为 JKRegister servlet 编辑 WebSphere 配置文件。 ( 编辑 ”[x:]\IBMVJava\ide\project_resources\IBM WebSphere Test Environment\properties\server\servlet\servletservice\serrvlets.properties”.)

改变看上去这样的行:

servlet.JKRegister.code=com.ibm.waslab.servlet1.RegistrationServlet

为这样:

servlet.JKRegister,code=com.ibm.waslab.JDBC.RegistrationServlet

8. 如果你的 webserver 在运行,关掉它。在 VAJ ,启动 SERunner 。打开你的 web 浏览器,到 JK Toys 网站的注册页面。在表格里输入注册信息,按注册按钮。你的新的 servlet 将被调用。登录进 JKToys 站点确信注册已经发生。你的新的客户号码应该能在数据库找到。

在这个练习你作了什么

在这个练习,你编写了 Registration Servlet 的 register 方法。这个方法用 JDBC 来创建一个新的客户号码,注册一个新的客户到数据库。现在你有了在你的 servlets 里访问数据库的基本知识。

答案

以下的代码创建一个 SQL 语句,执行在前一页里定义的 SQL 查询。

//Get next customer number

Statement sqlStatement=conn.createStatement();

ResultSet result=sqlStatement.executeQuery(“SELECT MAX(CUSTNO) FROM”+DBOWNER+”.CUSTOMER”);

查询的结果被放在 ResultSet 对象叫 result 里面。结果的集合包含一个游标,最初指向返回的第一行前面。为了得到查询的值游标必须用 next() 往前移动。用这个方法,游标只能向前移动。下面几行移动游标到返回的值,增加 1 。

int nextId=0;

if(result.next()= =true)

{

nextId=result.getInt(1)+1;

}

if 检查确定是否有行被返回。如果没有,结果为 false 。我们不处理错误的情况,但是它可以简单地用把 nextId 设置为 1 来处理。我们还可以用 ResultSet 的方法 getInt(String) ,列的名字为 ”CUSTNO” ,但是因为我们知道只有一列会被返回,我们选择用 getInt(int)..

· 安全: Servlet安全

这个练习展示你怎样使用 WebSphere 的 Servlet 安全特性来创建一个用户组,一个用户集合,和一个访问控制列表,然后增加一个 servlet 到被这个访问控制列表保护的资源列表。

这个练习将有三个部分。在第一个部分我们将作一些初始设置,包括取得前一个练习 (WebSphere studio lab) 里创建的 servlet ,给它一个名字。第二个部分将展示怎样在 WebSphere 里创建用户和用户组,最后一个部分会介绍创建 ACL 和把资源 ( 包括 servlet) 指派到 ACL 。

第一部分:初始设置和 Servlet 命名

1. 这个练习从你以前完成的 WebSphere studio 练习 ( 练习 5) 的结果开始。如果你没有完成那个练习,解开文件 c:\Lab5Solutions.zip 到 c:\ 。

2. 把文件 ViewCustomersServlet.servlet 从 \WebSphere\Appserver\servlets\JKToys 目录拷贝到 \WebSphere\Appserver\servlets 目录。

3. 下一个任务是让 JKToys.ViewCustomersServlet 类成为一个 named servlet 。 WebSphere 的访问控制特性依靠 servlet 命名――对没有命名的 servlet 它们不工作。为了做到这个,我们将用 WebSphere Application Server 管理工具工作。为此你需要从 IBM HTTP Server 启动 Application Server( 记住首先在 VA Java 里停掉 SERunner) 。在 Web Server 和 Application Server 被启动以后,从你的浏览器用 http://localhost:9527 登录进 WebSphere 管理页面。记住缺省的 WebSphere 管理用户的 ID 和口令为 admin,admin 。当管理页面打开,打开标签为 ”Servlets” 的树节点,选择 ”Configuration” 来打开 Servlet Configuration page 。

4. 按 ”Add” 按钮。我们将命名这个 servlet 为“ ViewCustomersServlet” 。在 ”Servlet Name” 域键入 ”ViewCustomersServlet” 。 View Customers servlet 的类是 ”JKToys.ViewCustomersServlet” 。在 ”Servlet Class:” 域键入这个,按 ”Add” 按钮。(如果你要,按 ”Test” 按钮来测试这个 servelt, 然后释放说测试被通过的对话框。)

5. 我们接着需要作一些整理工作,检验我们的命名是否工作正常。在你的硬盘上的 [x:]\www\html\JKToys\html( 或 jspSolutions) 目录里找到 ”ViewCustomersInputPage.html” 文件。用 notepad 或别的文字编辑器打开那个文件。找到行“ <FORM METHOD=POST ACTION=”/servlet/JKToys.ViewCustomersServlet”> ”改成,“ <FORM METHOD=POST ACTION=”/servlet/ViewCustomersServlet”> ”。保存这个文件。现在,往你的浏览器里输入以下的 URL :” http://localhost/JKToys/html/ViewCustomerInputPage.html”. 。确信 ”View Customers” 按钮出现,一旦按钮被按下,包含客户信息的表出现。

第二部分:增加用户和用户组

1. 既然我们的重命名已经完成,我们可以开始向我们的 ViewCustomersServlet servlet 增加口令保护。回去到 Administration GUI (如果你测试和命名 servlet 用了同样的浏览器,你将需要重新登录进 WebSphere 管理)。从树里选择 ”Security” 节点。你会看到 Security tree 有四个节点:

Users

Groups

Access Control Lists

Resources

我们将在我们的练习里用所有四个 tabs 。

2. 选择“ Users” 。一个表会打开,显示 WebSphere 已经在它的内部数据库里有的用户的列表。一个缺省的 WebSphere 安装会有两个用户,” jeeves” 和 ”admin” 。我们将增加一个新的用户叫 ”sales” 。按 ”Add” 。一个对话框显示出来,问用户的名字和口令,要你确认口令。在用户名域输入“ sales” ,在口令和确认口令域都输入 ”bluefish” 。然后按对话框里的“确定”按钮。用户 ”sales” 将被加进表。在一个实在的应用里,我们显然不用一个可在字典里找到的口令――你可以用字母和数字的随机组合。

3. 我们将增加一个用户组到 WebSphere 。我们要允许销售人员和管理人员都可以列出客户――销售人员会看客户列表,管理员会需要在数据库崩溃时维护客户列表。我们要创建一个新的用户组名字为“ customer-access” 包含所有这些用户。按 ”Group” 。显示器有三个列表。最上边的是” Defined Groups”( 现在忽略 ”realm” 下拉菜单――让它保持 ”DefaulgRealm” 设置 ) 。左边的按钮是增加和删除组。按“ Add ”按钮。一个对话框显示出来,向你要要增加的组的名字。输入 ”customer_access” 按“ Add” 按钮。 ”customer_access” 组将被加进列表。我们现在已经准备好用底部的两个列表。左边的是成员列表,现在还空着。在右边的列表 (“non-memebers”) 里选择 ”admin” 用户,按 ”<Add” 按钮。这个用户会被加到用户组。对 ”sales” 用户作同样的事。我们现在完成了创建用户组的工作。

第三部分:创建 ACL 和增加资源

1. 我们现在准备好向 WebSphere 的 ACL 增加新的 ACL 了。按 ”Access Control List”. 显示的面板和 Groups 的面板相似,最上边的下拉菜单显示 realms( 再一次,让它保持“ defaultRealm”) ,最上边的列表显示 ACL's 的列表。应该有一个 ACL ,简单的叫做 ”defaultAcl” 。我们将创建一个新的 ACL 叫做 ”customer_access_ACL” 。按左边的 Add 按钮。一个对话框会显示出来,要求要加入的新的 ACL 的名字。在文字域输入 ”customer_access_ACL” ,按 ”Add” 。一个新的 ACL 叫做 ”customer_access_ACL” 的 ACL 将被加进列表。

2. 这里我们已经准备好向用户组指派权限。在 ACL 列表下面有一个树形图包含三个分枝: Users,groups,computers 。所有这些分枝应该都是空的 ( 没有儿子 ) 。按中间的分枝 (Groups) ,然后按这个视图左边的 ”Add” 按钮。这个将带出来一个对话框,让你向不同的用户组指派权限。

3. 现在对话框出现了,下一步是在我们的 ACL 里向新的用户组指派权限。在 ”Assign Permission for:” 对话框的上面有两个 radio button 。这两个选择是 ”files and folders” 和 ”servlets” 。你也许以为我们要 ”servlets” ,但是相反我们要选择 ”files and folders” 。 ”servlets “选项是指一个运行的 servlet 拥有的权限,例如打开 sockets ,读文件等。我们要设置访问一个 servlet 的权限;这是 HTTP 协议下的文件访问。另一组 radio buttons 让你选择你是否要为 ”Users”,”Groups”, 或 ”Host” 设置权限。选择” Groups” 。因为只有一个组,它 (customer_access) 应该在第二组 radio buttons 下面的 ”principals” 列表里被选中。在 ”principals” 列表下面是一组 check boxes, 标着 ”GET”,”PUT”,”POST”,”DELETE” 。 check”GET” 和“ POST”check boxes ,按 check boxes 下面的“确定”按钮。这给这个用户组对这个 ACL 保护的文件,文件夹和 servlets 使用” GET “和” POST “方法的权限。

4. 我们现在要结束我们的练习。按 ”Resouces” 。在 ”realm” 下拉菜单下面你将看到一个空的表。按表左边的 ”Add” 按钮。这个会带出来一个对话框,让我们增加资源到我们创建的 customer_access_ACL 保护的资源列表里。

5. 当 ”Protect A Resource” 对话框出现,改变 ACL 下拉菜单为 ”customer_access_ACL” 。然后在 ”Resource to Protect” 下面,选择 ”Servlet” radio button ,从下拉菜单选择 ”ViewCustomers”servlet ,然后按“确定”释放对话框。你会在 Resource 表里看到资源 ”ViewCustomersServlet” 和 ”customer_access_ACL”ACL 之间有一个联系。我们现在结束了编辑我们的 ACL 和资源,准备测试了。

6. 在一个浏览器,输入 URL http://localhost/JKToys/html/ViewCustomersInputPage.html 。 ”View Customers” 按钮出现,按它。一个 challenge dialog 应该出现,向你要名字和口令。如果对话框没有出现,重新看看你在这以前的步骤。如果你不能找到错误,向你的实验辅导员请求帮助。首先输入一个无效的用户名和口令。你应该接着收到 challenge dialog 。输入 ”sales” 和 ”bluefish” 给名字和口令。现在,客户的表应该象在这个练习的开头一样显示出来。如果 challenge dialog 又出现了,重新输入名字和口令。 challenge dialog 通常会给你三次机会输入正确的名字 / 口令对,如果都失败,浏览器会显示错误“ 401 Unauthorized” 。

在这个来年练习里,我们创建用户和用户组,创建一个 ACL 和指派一个 servlet 资源到 ACL 。我们已经展示怎样给一个 servlet 增加口令保护。

(全文完)
安装 WebSphere应用服务器:【上一篇】
WebSphere快速入门(39):【下一篇】
【相关文章】
  • Weblet 安全性教程
  • WEBLOGIC 6.1 使用技巧
  • Java及Web应用
  • Webmail-0.7.7 系统源码浅析
  • Borland推出专供Java使用之Web Services开发工具
  • weblogic6.0使用心得
  • JSP技术生成动态web页面
  • 三种Web开发主流技术ASP-PHP-JSP的评价
  • 推出weblogic+oracle分页
  • 用Tea简化Web开发
  • 【随机文章】
  • 传奇世界 元宝交易记实
  • win32多线程搜索的例子
  • BT种子文件格式
  • 用java写一个专门进行文件操作的类v0.1
  • 深圳市ip 城域网组网方案(3)
  • CSharp_接口的应用
  • 病毒 灰鸽子变种AC(BackDoor.Huigezi.ac)
  • 婚纱摄影客户管理系统 1.3 (ADO连接含源代码)
  • 第一次开始写
  • input高级限制级用法 (转)
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.