分类: Java
2008-01-21 10:31:43
图1. 系统框图 |
图2. 系统中各部分的协作关系 创建数据库 首先以system用户登录oracle数据库,创建数据库用户:
用户信息表T_USER,该包括三个字段,其表的结构如下:
以test用户登录数据库,运行以下语句SQL,创建用户信息表:
往表中插入两条用户信息:
创建项目工程 创建工程:File->New Project出现下面的界面:
项目取名为loginPro,放置在D:/loginPro路径中,一路按Next就可以了。 创建完项目工程后,在工程下创建一个Web模块:File->New...->左边树选择Web->双击右边窗口的Web Module(WAR)项目->在弹出的窗口中点选Create empty Web Module,按Next->在弹出的窗口中按以下设置:
web模块的名称为loginWeb,放置在项目路径下的loginWeb子文件夹中,设置Servlet和JSP的版本。在设置完后直接点击Finish完成Web模块的创建。 特别提醒读者,如果您开发的是Web项目,一定要创建Web模块,只有这样,在工程中开发的Java类在Rebuild后,JBuilderX才会调用Ant工具,将编译后的class文件同步到web模块的WEB-INF目录中。笔者曾经有一个朋友向我报怨说用JBuilder开发WEB程序很麻烦,原来他没有在工程中创建Web模块,每次更改类后,都不辞辛苦地将编译后的类手工拷到到WEB应用的WEB-INF\classes目录下,殊不知,金光大道已经开通,而自己还在羊肠小道里挣扎。 编写类
本项目中包括两个类,一个是用户信息类UserBean.java,另一个是获取数据库连接类DSBean.java。下面我们来编写这两个类: 首先编写UserBean.java类:File->New Class...弹出如下的窗口:
在类向导的窗口界面上录入类的名字UserBean,包名默认的是项目的名称,您可以更改其他更用意义的包名,我们简单地接受默认的包名。按OK后,在编辑窗口中得到如下的类代码:
下面我们给UserBean类添加3个属性:在UserBean的编辑窗口的底部点击Bean标签页->选择Bean标签下的Properties的子标签页->在Properties页面中通过Add Property来添加类的属性,点击该按钮弹出属性窗口->在此窗口中添加属性。 不过笔者以为这种常规的给类添加属性的方法比较笨拙,效率很低,您可以直接通过在类中键入全局变量,然后再按上面的步骤切换到Properties标签页,JBuilderX会自动将全局变量列在这个页面中,通过钩选Getter和Setter列中的复选框,变量的set和get方法就自动产生了,笔者在编写程序的时候选择采用这种方法。添加全局变量后,UserBean代码如下(其中粗体红色为新增的代码,下同):
切换到Properties页面,钩选所有的Getter和Setter
编写好UserBean后我们再来编写获取数据连接的DSBean,在编写这个类之前,因为该类需要用到Oracle的JDBC包,所以我们需要将oracle JDBC的jar包加载到类库中,再将其引入项目工程里。 目前oracle最新的版本是oracle10g,如果您安装了oracle10g,则JDBC包位于[ORACLE_HOME]\jdbc\lib\classes12.jar,如果您未安排数据库,您可以到下载JDBC驱动包,它是向下兼容的。假设我们已经将其下载到D:\extra目录中,我们通过以下操作将其加载到JBuilderX的类库中:Tools->点击Configure Libraries弹出Configure Libraries窗口,如图6,首先点击Configure Libraries窗口左下方的New...弹出New Library Wizard窗口,在窗口中给该类取一个名字叫jdbcLib,再点击该窗口的Add...按钮弹出Select One or More Directories窗口,定位到D:\extra目录,选取class12.jar,然后确认即可。
接下来我们需要在项目中引用类库中这个新的jar包,这样项目才可以访问这个JDBC的jar包:Project->Project Properties在弹出的窗口左边的树中选择Paths,按照图7的操作完成引用的任务:
需要指出的是,如果项目需要引用大量的外部jar包,则可以将这些jar包组织到一个目录下,然后将整个目录加入到类库,在项目工程中引用该目录对应的类库名就可以在项目中调用这些包了。当Rebuild项目时,JBuilderX还会将这些包同步到WEB应用的目录中。 现在万事俱备了,我们开始编写DSBean.java:
我的数据库装在IP为192.168.0.189的机器上,数据库的SID是ora9i,读者在编写时必须根据您的数据库的具体情况作相应的更改。 编写完这两个类后,我们可以在项目工程面板中右击loginPro.jpx,选择Rebuild,来编译这两个类,编译完后的类不但会输出到D:\loginPro\classes目录下,同时还将同步到D:\loginPro\loginWeb\WEB-INF\classes目录中,并且将会将项目中引用的外部包拷贝一份到D:\loginPro\loginWeb\WEB-INF\lib目录下。值得注意的是,如果用Make命令来编译,则类只会输出到D:\loginPro\classes中,而不会同步到D:\loginPro\loginWeb\WEB-INF\classes目录。对J2EE的web目录结构的探讨超越本文内容,请自行阅读相关资料。 登录页面和处理页面 编写用户登录的页面login.htm:File->New File...弹出以下对话框:
在编辑窗口键入以下的页面代码:
该登录页面接受用户输入的用户id和密码,提交给execute.jsp页面处理,下面我们来编写execute.jsp:File->New...->在Object Gallery窗口中左边的树中选择Web->在右边窗口中双击JavaServer Page图标将弹出如下的对话框:
在该对话框中的Name中键入JSP页面的名字:execute,点击Next,在弹出的页面中再点击Next,进入向导的第3步,在这步中,允许您设置页面引用的JavaBean:
点击OK后,loginpro.UserBean类被定义为该页面的一个JavaBean,其id默认名为bean0,我们将其改为userBean,列表中还允许您指定这个JavaBean的作用域,我们选择session。直接点击Finish得到execute.jsp文件的代码:
需要指出的是<jsp:setProperty name="userBean" property="*" />以参数名匹配的方式接收客户端发送过来的参数值,在这里,当login.htm提交后userBean的userID和password两个将被设置为login.htm页面表单中两个输入框的值。 接收到客户端的值后,程序将其和数据库中T_USER表中的记录作比较,以便查明是否是合法用户,现在我们给execute.jsp添加代码,完成这些处理工作:
我们只是简单地将userID和password的值发送到数据库中进行比较,在真正的应用中,一定事先要检查userID和password的值是否有单引号(’),如果有,必须将其转换成两个单引号(‘’),否则将产生安全漏洞问题,有兴趣的朋友可以在网上查找相关资料。 最后的一个JSP是处理错误和异常的error.jsp,它的代码如下:
当execute.jsp发现数据库操作或其他的异常时,将会跳转到该错误处理页面,打印出可读性强的错误信息。 由于JBuilderX对页面可视化的支持不强,您也可以在Dreamweaver中完成HTML及JSP可视化内容的开发,而在JBuilderX中完成逻辑处理部分的开发,毕竟这个世界永远需要协作。 在JBuilderX中运行WEB程序 至此我们已经完成了项目中所有程序的开发工作,下面我们将在JBuilderX中运行该WEB程序。在运行程序之前,必须保证已经设置了WEB服务器。Project->Project Properties...->在弹出窗口左边树中设置Server:
更进一步,我们将不在JBuilderX中运行Tomcat测试,而是通过外部的Tomcat来测试,否则当JBuilderX开启测试的WEB服务后会给更改程序带来了不便。关于tomcat配置讨论已经超出了本文范围,有兴趣的朋友可以自行研究。为了简单,本文将在JBuilderX环境中完成测试。 在编辑窗口中鼠标右击login.htm的标签,选择Web Run using “execute”:
JBuilderX将自动完成WEB配置信息的设置并在8080端口启动WEB服务,login.htm登录页面展示出来接受用户的录入,我们以zhangshang/123456登录:
如果此时数据库还没有启动则execute.jsp转到error.jsp,错误页面输出以下内容:
在保证数据库启动及连接正常后,将得到正确登录的页面:
您也可以启动IE,在IE的地址栏中键入正确的地址来运行程序。 |