将用户列表改为动态
目前创建的login.jsp有一个缺陷,假设在数据库后台t_user表中添加其他的用户时,因为用户名下拉框是静态的代码,新创建的用户并不会出现在页面中,因此有必要将用户名列表改为动态的代码,用数据库表t_user的记录动态产生下拉框的数据。
我们通过userlist.ava类来完成这个工作,在工程中创建userlist.java,其代码如下:
代码清单 5 userlist.java
1. package bookstore; 2. import java.sql.*; 3. 4. public class userlist 5. { 6. //获取html下拉框的用户列表代码 7. public static string getuserlisthtml() { 8. connection conn = null; 9. stringbuffer sbuf = new stringbuffer(); 10. try { 11. conn = dbconnection.getconnection(); 12. preparedstatement pstat = conn.preparestatement( 13. “select user_id,user_name from t_user”); 14. resultset rs = pstat.executequery(); 15. while (rs.next()) { 16. sbuf.append(“<option value=” + rs.getstring(“user_id”) + “>” + 17. rs.getstring(“user_name”) + “</option>\n”); 18. } 19. return sbuf.tostring(); 20. } catch (sqlexception ex) { 21. ex.printstacktrace(); 22. return “”; 23. } finally { 24. try { 25. if (conn != null) { 26. conn.close(); 27. conn = null; 28. } 29. } catch (sqlexception ex1) { 30. } 31. } 32. } 33. } |
userlist.java只提供了一个静态的getuserlisthtml()方法,这个方法从后台数据库的t_user表中获取用户记录,并生成html的select组件的选项代码,如第16~17行所示。
在创建这个类后,我们引用该类调整login.jsp的代码,首先在page指令标签中通过import属性引用userlist类,然后将select选项中的内容调整为getuserlisthtml()方法返回的值,如下图所示:
图 7 通过codeinsight编写代码 |
通过表达式标签替换原静态的html代码,值得提起的是,在jsp中也可以象在编写一般的java类中一样使用codeinsight输入代码。调整后的login.jsp的代码如下所示,用粗体表示:
代码清单 6 调整后的login.jsp代码
1. <%@page contenttype=”text/html; charset=gbk” import=”bookstore.userlist”%> 2. <html> 3. <head> 4. <title>login</title> 5. </head> 6. <body bgcolor=”#ffffff”> 7. <表单 name=”表单1″ method=”post” action=”switch.jsp”>用户名: 8. <select name=”userid”> 9. <option value=”” selected>–登录用户–</option> 10. <%=userlist.getuserlisthtml()%> 11. </select> 12. 密 码:<input name=”password” type=”password”> 13. <input type=”submit” name=”submit” value=”登录”> 14. </表单> 15. </body> 16. </html> |
保存login.jsp后,在内容窗格login.jsp文件标签中点击右键,选择web run using defaults,jbuilder 将启动tomcat 5.0应用服务器,运行于8080端口上,编译并运行login.jsp文件,如下图所示:
图 8 在jbuilder中运行login.jsp |
jbuilder自动切换到web view视图页中,显示页面的运行效果。但jbuilder的浏览器对网页的支持效果很弱,也不支持javascript脚本。所以在运行login.jsp后,最好通过ie来查看网页的效果,你只需要打开ie,并将jbuilder中的访问login.jsp的地址拷贝到ie的地址栏中就可以了,如下图所示:
图 9 用ie访问jbuilder中运行的login.jsp |
此时用户名的下拉框中的用户已经是动态的用户列表中,当t_user表中添加、删除用户时下拉框的用户也会相应地改变。
在运行jsp前最好先单独编译一个这个jsp文件:在内容窗格的jsp文件标签上点击右键,在弹出的菜单中选择make “xxx.jsp”,即可完成对jsp文件的编译,及时发现错误。jsp文件和java文件在编辑时,最大的区别是java程序文件一有错误就会在编辑器和结构窗格中列出,但jsp文件的有些错误需要通过编译才能发现。
提示:
由于编译jsp文件需要先将其转换为servlet文件,然后再编译这个中间servlet文件,发生错误后转定向到jsp文件中,所以编译一个jsp文件是比较耗时的,往往比编译一个java文件要花好几倍的时间。在默认的情况下,编译一个工程时,会编译整个工程中所有的jsp,需要消耗大量的时间。所以最好取消在编译工程连带编译jsp文件的设置:通过project->project properties…->build-> 在build设置页中取消check jsps for errors at build-time选项。在确实需要的时候再勾选这个选项,并在编译后及时取消这个选项。通过这样的设置将可以为你的开发赢得不少宝贵的时间。 |