一、 javabean 是什么?

    Bean的中文含义是“豆子”,顾名思义,JavaBean是指一段特殊的Java类,只有有默然构造方法,只有get,set的方法的java类的对象。

    JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。众所周知,属性名称符合这种模式,其他Java 类可以通过自身机制发现和操作这些JavaBean 属性。

    JavaBean可分为两种:一种是有用户界面(UI,User Interface)的JavaBean;还有一种是没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。JSP通常访问的是后一种JavaBean。

 

二、Javabean含义?

      事实上有三层含义。首先,JavaBean是一种规范,一种在Java(包括JSP)中使用可重复使用的Java组件的技术规范。其次,JavaBean是一个Java的类,一般来说,这样的Java类将对应于一个独立的.java文件,在绝大多数情况下,这应该是一个public类型的类。最后,当JavaBean这样的一个Java类在我们的具体的Java程序中被实例之后,我们有时也会将这样的一个JavaBean的实例称之为JavaBean。

    最初,JavaBean的目的是为了将可以重复使用的软件代码打包标准。特别是用于帮助厂家开发在综合开发环境(IDE)下使用的java软件部件。这些包括如Grid控件,用户可以将该部件拖放到开发环境中。从此,JavaBean就可以扩展为一个java web 应用的标准部件,并且JavaBean部件框架已经扩展为企业版的 Bean(EJB)。

 

三、javabean特性

 

     易于维护、使用、编写。

     可实现代码的重用性。

     可移植性强,但仅限于Java工作平台。

     便于传输,不限于本地还是网络。

     可以以其他部件的模式进行工作。

    对于有过其他语言编程经验的读者,可以将其看作类似微软的ActiveX的编程组件。但是区别在于JavaBean是跨平台的,而ActiveX组件则仅局限于Windows系统。总之,JavaBean比较适合于那些需要跨平台的、并具有可视化操作和定制特性的软件组件。

 

四、Javabean的应用原因

    程序中往往有重复使用的段落,JavaBean就是为了能够重复使用而设计的程序段落,而且这些段落并不只服务于某一个程序,而且每个JavaBean都具有特定功能,当需要这个功能的时候就可以调用相应的JavaBean。从这个意义上来讲,JavaBean大大简化了程序的设计过程,也方便了其他程序的重复使用。

    JavaBean传统应用于可视化领域,如AWT(窗口工具集)下的应用。而现在,JavaBean更多地应用于非可视化领域,同时,JavaBean在服务器端的应用也表现出强大的优势。非可视化的JavaBean可以很好地实现业务逻辑、控制逻辑和显示页面的分离,现在多用于后台处理,使得系统具有更好的健壮性和灵活性。JSP + JavaBean和JSP + JavaBean + Servlet成为当前开发Web应用的主流模式。

 

五、JSP中Javabean的实质

    一个引入JavaBeans的语句,其结构应该是,在这当中,我们必须对三个方面的内容进行定义。首先是一个id,这将对应于一个类的实例,如果这个实例已经存在,将直接引用这个实例;如果这个实例尚未存在,将通过我们在class中的定义从这个class中进行示例。这也就是我们要定义的第二个内容。最后,我们还应该在scope中定义id这个实例存在的范围,事实上这定义了这个实例所绑定的区域及其有效范围。

    JavaBean 的范围 Scope 是一个具有生命时间的变量。JavaBean的范围在<jsp:useBean scope=”….>标志中右边进行表示。将产生一个JavaBean的快捷参考。说明:jsp服务器引擎将剥离<jsp。。。。标记。并且在最终用户的浏览器上无法显示实际代码。
 
    存在下面四种范围: 页面page、 请求request、 对话session、 应用application。
 
    对话范围的JavaBean :主要应用于跨多个页面和时间段: 例如填充 用户信息。 添加信息并且接受回馈,保存用户最近执行页面的轨迹。对话范围JavaBean保留一些和用户对话 ID 相关的信息。这些信息来自临时的对话cookie,并在当用户关闭浏览器时,这个cookie将从客户端和服务器删除。
    页面和请求范围的JavaBean:有时类似表单的bean , 这是因为 他们大都用于处理表单。表单需要很长的时间来处理用户的输入,通常情况下用于页面接受HTTP/POST或者GET请求。另外页面和请求范围的bean可以用于减少大型站点服务器上的负载,如果使用对话bean,耽搁的处理就可能会消耗掉很多资源。
    应用范围JavaBean:通常应用于服务器的部件,例如 JDBC 连接池、应用监视、用户计数和其他参与用户行为的类。
 

 在JSP中调用JavaBean有三个标准的标签,那就是<jsp:useBean>, <jsp:setProperty>,以及<jsp:getProperty>。 
a、<jsp:useBean>标签 :可以定义一个具有一定生存范围以及一个唯一id的JavaBean的实例,这样JavaServer Pages通过id来识别JavaBean,也可以通过id.method类似的语句来操作JavaBean。 在执行过程中,<jsp:useBean>首先会尝试寻找已经存在的具有相同id和scope值的JavaBean实例,如果没有就会自动创建一个新的实例。其具体语法如下 
<jsp:useBean id=“name” scope=“page|request|session|application” typeSpec> body 
</jsp:useBean> 
其中,typeSpec定义如下 
typeSpec ::=class=“className” 
| class=“className” type=“typeName” 
| type=“typeName” class=“className” 
| beanName=“beanName” type=“typeName” 
| type=“typeName” beanName=“beanName” 
| type=“typeName” 
下面的表格是<jsp:useBean>标签中相关属性的含义:

id

id属性是JavaBean对象的唯一标志,代表了一个JavaBean对象的实例。它具有特定的存在范围(page|request|session|application)。在JavaServer Pages中通过id来识别JavaBean。

Scope

Scope属性代表了Javabean对象的生存时间,可以是page, request, session, 和 application中的一种。 

Class

代表了JavaBean对象的class名字,特别注意大小写要完全一致。

Type

Type属性指定了脚本变量定义的类型,默认为脚本变量定义和class中的属性一致,一般我们都采用默认值 

b、<jsp:setProperty>标签:它主要用于设置bean的属性值。JavaServer Pages中调用的语法如下: <jsp:setProperty name=“beanName” last_syntax /> 
其中,name属性代表了已经存在的并且具有一定生存范围(scope)的JavaBean实例。last_syntax代表的语法如下: 
property=“*” | 
property=“propertyName” | 
property=“propertyName” param=“parameterName” | 
property=“propertyName” value=“propertyValue” 
下面是<jsp:setProperty>标签的基本属性以及含义 :

Name

Name代表通过<jsp:useBean> 标签定义的JavaBean对象实例。

Property

代表了你想设置值的属性property名字。如果使用property=”*”,程序就会反复的查找当前的ServletRequest所有参数,并且匹配JavaBean中相同名字的属性property,并通过JavaBean中属性的set方法赋值value给这个属性。如果value属性为空,则不会修改Javabean中的属性值。 

Param 

Param属性代表了页面请求的参数名字,<jsp:setProperty>标签不能同时使用param和value。

Value

Value属性代表了赋给Bean的属性property的具体值。

c、<jsp:getProperty>标签 :它可以得到JavaBean实例的属性值,并将他们转换为 java.lang.String, 最后放置在隐含的Out对象中. JavaBean的实例必须在<jsp:getProperty>前面定义. <jsp:getProperty>标签的语法如下:
<jsp:getProperty name=“name” property=“propertyName” /> 
下面是<jsp:getProperty>标签的基本属性以及含义 

Name

Name属性代表了想要获得属性值的Bean的实例,Bean实例必须在前面用<jsp:useBean>标签定义.

Property 

Property属性代表了想要获得值的那个property的名字。

 
六、Javabean的三大构件
 
    Java bean:编程语言java中的术语,行业内通常称为java豆,带点美哩口味,飘零着咖啡的味道,在计算机编程中代表java构件(EJB的构件),通常有Session bean,Entity bean,MessageDrivenBean三大类。
 
    Session bean:会话构件,是短暂的对象,运行在服务器上,并执行一些应用逻辑处理,它由客户端应用程序建立,其数据需要自己来管理。分为无状态和有状态两种。
 
    Entity bean:实体构件,是持久对象,可以被其他对象调用。在建立时指定一个唯一标示的标识,并允许客户程序,根据实体bean标识来定位beans实例。多个实体可以并发访问实体bean,事物间的协调由容器来完成。
 
    MessageDriven Bean:消息构件,是专门用来处理JMS(Java Message System)消息的规范(EIB2.0)。JMS是一种与厂商无关的API,用来访问消息收发系统,并提供了与厂商无关的访问方法,以此来访问消息收发服务。JMS客户机可以用来发送消息而不必等待回应。
 
 
七、Javabean编程开发

    在程序设计的过程中,JavaBean不是独立的。为了能够更好地封装事务逻辑、数据库操作而便于实现业务逻辑和前台程序的分离,操作的过程往往是先开发需要的JavaBean,再在适当的时候进行调用。但一个完整有效的JavaBean必然会包含一个属性,伴随若干个get/set(只读/只写)函数的变量来设计和运行的。JavaBean作为一个特殊的类,具有自己独有的特性。应该注意以下4个方面。

1. 如果类的成员变量的名字是xxx,那么为了更改或获取成员变量的值,即更改或获取属性,在类中可以使用两个方法:

       getXxx(),用来获取属性xxx。
       setXxx(),用来修改属性xxx.。
2. 对于boolean类型的成员变量,即布尔逻辑类型的属性,允许使用"is"代替上面的"get"和"set"。
3. 类中方法的访问属性都必须是public的。
4. 类中如果有构造方法,那么这个构造方法也是public的并且是无参数的。
 
八、一个简单的Javabean与JSP结合
 

    JavaBean--counter.java文件,counter.jsp文件, counter1.jsp文件其中,counter.java主要用来进行计数器的计数操作,counter.jsp和counter1.jsp文件主要用来显示网页的计数。

counter.java:
View Code
 1 package count; 
 2 /** * Title: test * Description: counter Bean * @version 1.0 */ 
 3 public class counter { 
 4     //初始化JavaBean的成员变量 
 5     int count = 0; 
 6     // Class构造器 
 7     public counter() { } 
 8     // 属性Count的Get方法
 9     public int getCount(){
10     //计数操作,每一次请求都进行计数器加一
11        count++; 
12        return this.count; 
13      }
14     //属性Count的Set方法
15     public void setCount(int count) 
16     { 
17         this.count = count;
18     } 
19 }

counter.jsp:

View Code
 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 
 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 4 <HTML>
 5     <HEAD>
 6         <TITLE>counter</TITLE>
 7     </HEAD>
 8     <BODY>
 9         <H1>
10             JBuilder Generated JSP
11         </H1>
12         <!-- 初始化counter这个Bean,实例为bean0-->
13         <jsp:useBean id="bean0" scope="application" class="count.counter" />
14         <%
15             //显示当前的属性count的值,也就是计数器的值,这里我们使用out.println方法,下面的counter1.jsp将使用另一种方法
16             out.println("The Counter is : " + bean0.getCount() + "<BR>");
17         %>
18     </BODY>
19 </HTML>

counter1.jsp:

View Code
 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 
 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 4 <HTML>
 5     <HEAD>
 6         <TITLE>counter</TITLE>
 7     </HEAD>
 8     <BODY>
 9         <H1>
10             JBuilder Generated JSP
11         </H1>
12         <!--初始化counter这个Bean,实例为bean0-->
13         <jsp:useBean id="bean0" scope="application" class="count.counter" />
14         <!-- 使用jsp:getProperty 标签得到count属性的值,也就是计数器的值-->
15         The Counter is :
16         <jsp:getProperty name="bean0" property="count" /><BR>
17     </BODY>
18 </HTML>

   

     首先在Jsp页面中要声明并初始化JavaBean,这个JavaBean有一个唯一的id标志,还有一个生存范围scope(设置为application是为了实现多个用户共享一个计数器的功能,如果要实现单个用户的计数功能,可以修改scope为session),最后还要制定JavaBean的class来源count.counter: 
  <jsp:useBean id="bean0" scope="application" class="count.counter" /> 
接着我们就可以使用JavaBean提供的public方法或者直接使用<jsp:getProperty>标签来得到JavaBean中属性的值: out.println("The Counter is : " + bean0.getCount() + "<BR>");
或者  <jsp:getProperty name="bean0" property="count" /> 
  OK,现在运行一下程序看看,然后多刷新几次,注意看计数器的变化。

 
八、一个用户注册的javabean实例

 

建立一个数据库demodb,其字段如下面所示:

username VARCHAR2(20) 用户名
password VARCHAR2(20) 密码
email VARCHAR2(30) Email地址
homepage VARCHAR2(50) 主页
signs VARCHAR2(200) 签名
regtime DATE 注册时间

接着建立几个JavaBeans和JavaServer Pages文件:

db.java文件(封装数据库连接及一些底层操作)
adduser.java文件(进行用户数据的读取以及添加操作)
newuser.jsp文件(用户新增页面,用于输入用户注册信息)
donewuser.jsp文件(进行用户注册信息添加)
listuser.jsp文件(所有的注册用户信息列表)

1.db.java文件:这个JavaBean封装数据库连接及一些底层操作,派生出的类可以直接调用这些方法,另外提供了一个toChinese方法,主要用来进行中文数据的处理。

View Code
 1 //声明类库文件
 2 package lyf;
 3 
 4 import oracle.jdbc.driver.*;
 5 import java.net.*;
 6 import java.sql.*;
 7 import java.lang.*;
 8 import java.io.*;
 9 import java.util.*;
10 
11 public class db {
12     // 成员变量初始化
13     Connection conn = null; // 数据库连接
14     ResultSet rs = null; // 记录集
15     String Username = ""; // 用户名
16     String Password = ""; // 密码
17     String Email = ""; // email
18     String Homepage = ""; // 主页
19     String Signs = ""; // 签名
20 
21     // db的构建器
22     public db() {
23         try {
24             // 注册数据库驱动程序为Oracle驱动
25             Class.forName("oracle.jdbc.driver.OracleDriver");
26         } catch (java.lang.ClassNotFoundException e) {
27             // 这样写是为了方便调试程序,出错打印mydb()就知道在什么地方出错了
28             System.err.println("mydb(): " + e.getMessage());
29         }
30     }
31 
32     // executeQuery方法用于进行记录的查询操作
33     // 入口参数为sql语句,返回ResultSet对象
34 
35     public ResultSet executeQuery(String sql) {
36         rs = null;
37         try {
38             // 建立数据库连接,使用Oracle的一种thin连接方式,localhost为主机名字,demodb为数据库,后面的两个
39             // demo为用户名和密码
40             conn = DriverManager.getConnection(
41                     "jdbc:oracle:thin:@localhost:1521:orcl", "SYS as SYSDBA", "admin");
42             Statement stmt = conn.createStatement();
43             // 执行数据库查询操作
44             rs = stmt.executeQuery(sql);
45         } catch (SQLException ex) {
46             System.err.println("db.executeQuery: " + ex.getMessage());
47             //ex.printStackTrace();
48         }
49         return rs;
50     }
51 
52     // executeUpdate方法用于进行add或者update记录的操作
53 
54     // 入口参数为sql语句,成功返回true,否则为false
55     public boolean executeUpdate(String sql) {
56         boolean bupdate = false;
57         rs = null;
58         try {
59             // 建立数据库连接,其它参数说明同上面的一样
60             conn = DriverManager.getConnection(
61                     "jdbc:oracle:thin:@localhost:1521:orcl", "SYS as SYSDBA", "admin");
62             Statement stmt = conn.createStatement();
63             int rowCount = stmt.executeUpdate(sql);
64             // 如果不成功,bupdate就会返回0
65             if (rowCount != 0)
66                 bupdate = true;
67         } catch (SQLException ex) {
68             // 打印出错信息
69             System.err.println("db.executeUpdate: " + ex.getMessage());
70             //ex.printStackTrace();
71         }
72         return bupdate;
73     }
74 
75     // toChinese方法用于将一个字符串进行中文处理
76     // 否则将会是???这样的字符串
77 
78     public static String toChinese(String strvalue) {
79         try {
80             if (strvalue == null) {
81                 return null;
82             } else {
83                 strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
84                 return strvalue;
85             }
86         } catch (Exception e) {
87             return null;
88         }
89     }
90     
91     
92     //testing
93     public static void main(String[] args){
94         db a = new db();
95         a.executeQuery("");
96     }
97 
98 }

 

2.adduser.java文件:主要进行用户数据的读取以及添加操作,从db派生出来,addNewUser方法用来进行用户数据的添加,checkUser()方法用来检查用户名是否重复,另外还有一些set/get方法用来对属性进行处理,dousernew.jsp文件将进行调用。

View Code
  1 package lyf;
  2 
  3 //导入java类库
  4 import java.sql.*;
  5 import java.lang.*;
  6 import oracle.jdbc.driver.*;
  7 
  8 //adduser由db派生出来,拥有db的成员变量和方法
  9 public class adduser extends db {
 10     // 构建器
 11     public boolean addNewUser() {
 12         boolean boadduser = false;
 13         try {
 14             // 进行用户注册的记录添加操作,生成sql语句
 15             String sSql = new String(
 16                     "insert into demodb(regtime,username,password,email,homepage,signs)");
 17             sSql=sSql+ " values(SYSDATE,'"+Username+"','"+Password+"','"+Email+"','"+Homepage+"','"+Signs+"')"; 
 18             // 一种调试的方法,可以打印出sql语句,以便于查看错误
 19             System.out.println(sSql);
 20             // 调用父类的executeUpdate方法,并根据成功以否来设置返回值
 21             if (super.executeUpdate(sSql))
 22                 boadduser = true;
 23         } catch (Exception ex) {
 24             // 出错处理
 25             System.err.println("adduser.addNewUser: " + ex.getMessage());
 26         } finally {
 27             // 无论是否出错,都要返回值
 28             return boadduser;
 29         }
 30     }
 31     
 32     public String showParamer(){
 33         return this.Username+this.Password + this.Homepage;
 34     }
 35 
 36     // checkUser()方法用来检查用户名是否重复
 37     // 如果重复返回一个false
 38     public boolean checkUser() {
 39         boolean boadduser = false;
 40         try {
 41             // 构建sql查询语句
 42             String sSql = "select * from demodb where username='" + Username
 43                     + "'";
 44             // 调用父类的executeQuery方法
 45             if ((super.executeQuery(sSql)).next()) {
 46                 // 查询出来的记录集为空
 47                 boadduser = false;
 48             } else {
 49                 boadduser = true;
 50             }
 51         } catch (Exception ex) {
 52             // 出错处理
 53             System.err.println("adduser.addNewUser: " + ex.getMessage());
 54         } finally {
 55             // 返回值
 56             return boadduser;
 57         }
 58     }
 59 
 60     // 属性的set/get方法,同请求的参数一致
 61     // 属性用户名Username的get/set方法
 62     public String getUsername() {
 63         return Username;
 64     }
 65 
 66     public void setUsername(String newUsername) {
 67         // 用户名有可能是中文,需要进行转换
 68         Username = db.toChinese(newUsername);
 69     }
 70 
 71     // 属性密码Password的get/set方法
 72     public String getPassword() {
 73         return Password;
 74     }
 75 
 76     public void setPassword(String newPassword) {
 77         Password = newPassword;
 78     }
 79 
 80     // 属性Email的get/set方法
 81     public String getEmail() {
 82         return Email;
 83     }
 84 
 85     public void setEmail(String newEmail) {
 86         Email = newEmail;
 87     }
 88 
 89     // 属性主页Homepage的get/set方法
 90     public String getHomepage() {
 91         return Homepage;
 92     }
 93 
 94     public void setHomepage(String newHomepage) {
 95         Homepage = newHomepage;
 96     }
 97 
 98     // 属性主页Signs的get/set方法
 99     public String getSigns() {
100         return Signs;
101     }
102 
103     public void setSigns(String newSigns) {
104         // 签名有可能是中文,需要进行转换
105         Signs = db.toChinese(newSigns);
106     }
107     
108 }

 

3.newuser.jsp文件:用户注册页面,有用户名、密码、主页、Email、个人签名等信息,主要用于提供用户输入注册信息,提交Action后的处理页面为donewuse.jsp文件,所有参数将会传递到donewuser.jsp文件进行处理。文件开头< %@ page contentType="text/html;charset=gb2312"%>语句表明这个页面使用gb2312中文字符集,如果不声明的的话在中文显示上就出现乱码。< % response.setHeader("Expires","0"); %>语句是为了让页面能够自动刷新,这句话不要也没有太大影响。

View Code
 1 <%@ page contentType="text/html;charset=gb2312"%>
 2 <% //response.setHeader("Expires","0"); %>
 3 
 4  <html>
 5  <head>
 6  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
 7 
 8  <title>新用户注册</title>
 9  </head>
10 
11  <body bgcolor="#FFFAD9">
12  <p align="center"><font color="#8484FF"><span ><strong><big>新个人用户注册</big></strong></span></font></p>
13         <form method="POST" action="donewuser.jsp">
14             <div align="center">
15                 <center>
16                     <table border="1" width="50%" borderColorDark="#FFFFFF"
17                         borderColorLight="#000000" cellspacing="0">
18                         <tr>
19                             <td width="27%" bgcolor="#DDDDFF" align="center">
20                                 <span>用户名: 
21                             <td width="73%" bgcolor="#DDDDFF">
22                                 <span><input type="text" name="username" size="20"
23                                         tabindex="2"><font color="#FF0000"><b>* 
24                         </tr>
25                         <tr>
26                             <td width="27%" bgcolor="#DDDDFF" align="center">
27                                 输入密码:
28                             <td width="73%" bgcolor="#DDDDFF">
29                                 <input type="password" size="20" tabindex="2">
30                                 <font color="#FF0000"><b>* 
31                         </tr>
32 
33                         <tr>
34                             <td width="27%" bgcolor="#DDDDFF" align="center">
35                                 校验密码:
36                             <td width="73%" bgcolor="#DDDDFF">
37                                 <input type="password" size="20" tabindex="3">
38                                 <font color="#FF0000"><b>*</b>
39                                 </font>
40                         </tr>
41 
42                         <tr>
43                             <td width="27%" bgcolor="#DDDDFF" align="center">
44                                 E-mail
45                             <td width="73%" bgcolor="#DDDDFF">
46                                 <input type="text" size="20" tabindex="4">
47                                 <font color="#FF0000">*</font>
48                         </tr>
49 
50                         <tr>
51                             <td width="27%" bgcolor="#DDDDFF" align="center">
52                                 主页地址:
53                             <td width="73%" bgcolor="#DDDDFF">
54                                 <input type="text" size="20" tabindex="6" value="http://">
55                         </tr>
56                         <tr>
57                             <td width="100%" bgcolor="#DDDDFF" colspan="2">
58                                 <BR>
59                                 <center>
60                                     <span><Font color="red"><B>介绍自己:</B> <span>(介绍自己,不能超过120字)</span>
61                                     </Font>
62                                     </span>
63                                 </center>
64                         </tr>
65                         <tr>
66                             <td width="100%" bgcolor="#DDDDFF" colspan="2">
67                                 <textarea rows="6" name="signs" cols="66" tabindex="9">
68  </textarea>
69                         </tr>
70                         <tr>
71                             <td width="30%" bgcolor="#DDDDFF" colspan="2">
72                                 <center>
73                                     <p>
74                                         <input type="submit" value="递交" onclick="checkmsg();"
75                                             tabindex="10">
76                                     </p>
77                                     <input type="reset" value="清除" tabindex="11">
78                                 </center>
79                         </tr>
80                     </table>
81                 </center>
82             </div>
83         </form>
84 
85     </body>
86  </html>

 

4.donewuser.jsp文件:用户注册操作页面,并根据用户注册成功否显示相应的反馈信息,这个页面主要的特点就是使用了
lyf.adduser这个JavaBean的addNewUser()方法来进行记录的添加。

View Code
 1 <%@ page contentType="text/html;charset=gb2312"%>
 2 <%
 3     response.setHeader("Expires", "0");
 4 %>
 5 <!--生成一个JavaBean:lyf.adduser的实例,id为adduser,生存范围为page-->
 6 <jsp:useBean id="adduser" class="lyf.adduser" scope="page" />
 7 <!--设置JavaBean中各个属性的值,这会调用JavaBean中各个属性的set方法,以便JavaBean得到正确的属性值,”*”代表进行所有属性的匹配-->
 8 <jsp:setProperty name="adduser" property="*" />
 9 <html>
10     <head>
11         <meta http-equiv="Content-Language" content="zh-cn">
12         <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
13         <meta name="GENERATOR" content="Microsoft FrontPage 3.0">
14         <meta name="ProgId" content="FrontPage.Editor.Document">
15         <title>用户添加</title>
16     </head>
17     <body bgcolor="#FFEBBD">
18         <div align="center">
19             <center>
20                 <%
21                     out.println(adduser.showParamer()+"<br/>");
22                     
23                     //调用lyf.adduser的checkUser()方法检查是否有重复的用户名  
24                     //如果有重复就显示对应的信息
25                     if (!adduser.checkUser()) {//页面文字输出信息,使用jsp内置对象out的println方法,相当于asp中的response.write方法
26                         out.println("对不起,这个用户名" + adduser.getUsername()
27                                 + "已经被申请了,请重新选择!");
28                         //return代表返回,运行时候碰到return就不会进行下面的处理了,功能相当于asp中的response.end 
29                         return;
30                     }
31                 %>
32                 <%
33                     //如果没有用户名重复的问题,调用lyf.adduser的addNewUser()方法来将用户数据添加到数据库中,并根据数据添加成功否来显示对应的信息
34                     if (adduser.addNewUser()) {
35                 %>
36 
37                 <H2>
38                     添加用户成功!
39                 </H2>
40                 </P>
41                 <%
42                     } else {
43                 %>
44                 <H2>
45                     添加用户失败,请和管理员联系!
46                 </H2>
47                 </P>
48                 <%
49                     }
50                 %>
51             </center></BODY>
52 </HTML>

 

5.listuser.jsp文件:用户信息列表页面,用于显示注册的所有用户信息,对数据进行了分页显示。为了方便大家使用,采用了通用的分页代码,如果是JDBC2.0以上或者其他支持TYPE_SCROLL_INSENSITIVE游标的数据库驱动程序,可以有更简洁的分页方法。这个页面中导入java.sql.ResultSet的这个类库,因为Jsp页面中间要声明ResultSet;oracle.jdbc.driver.*类库是Oracle专用的Jdbc驱动程序,让Jsp页面可以用来进行Oracle的数据库操作。

View Code
  1 <%@ page contentType="text/html;charset=gb2312"%>
  2 <% response.setHeader("Expires","0"); %>
  3 <%@ page import="java.sql.ResultSet"%>
  4 <%@ page import="oracle.jdbc.driver.*"%>
  5 <!--生成一个JavaBean:lyf.db的实例-->
  6 
  7 <jsp:useBean id="db" class="lyf.db" scope="request" />
  8 <jsp:setProperty name="db" property="*" />
  9 
 10 <% java.lang.String strSQL; //SQL语句
 11  int intPageSize;  //一页显示的记录数 
 12  int intRowCount;  //记录总数 
 13  int intPageCount; //总页数
 14  int intPage;      //待显示页码 
 15  java.lang.String strPage; 
 16  int i,j,k; 
 17   intPageSize = 15;  //设置一页显示的记录数
 18   strPage = request.getParameter("page");  //取得待显示页码 
 19   if(strPage==null){//表明在QueryString中没有page这一个参数,此时显示第一页数据
 20    intPage = 1; 
 21    } 
 22    else{
 23    
 24    intPage = java.lang.Integer.parseInt(strPage); //将字符串转换成整型 
 25    if(intPage<1) 
 26       intPage = 1; 
 27    } //获取记录总数
 28    
 29    strSQL = "select count(*) from demodb";
 30    ResultSet result = db.executeQuery(strSQL); //执行SQL语句并取得结果集 
 31    result.next();     //记录集刚打开的时候,指针位于第一条记录之前
 32    intRowCount = result.getInt(1);
 33    result.close(); //关闭结果集  
 34    
 35    //记算总页数
 36    intPageCount = (intRowCount+intPageSize-1) / intPageSize; //调整待显示的页码
 37    if(intPage>intPageCount) 
 38        intPage = intPageCount;
 39        
 40    strSQL="select * from demodb";//执行SQL语句并取得结果集
 41    result = db.executeQuery(strSQL); //将记录指针定位到待显示页的第一条记录上
 42    i = (intPage-1) * intPageSize;
 43    for(j=0;j<i;j++) 
 44        result.next(); %>
 45 <html>
 46     <head>
 47         <meta http-equiv="Content-Language" content="zh-cn">
 48         <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
 49         <meta name="GENERATOR" content="Microsoft FrontPage 3.0">
 50         <meta name="ProgId" content="FrontPage.Editor.Document">
 51         <title>用户列表</title>
 52     </head>
 53     <body bgcolor="#FFEBBD">
 54         <div align="center">
 55             <center>
 56                 <table border="1" borderColorDark="#FFFFFF"
 57                     borderColorLight="#000000" cellspacing="0" height="22" width="100%">
 58                     <tr bgcolor="#FFEBAD">
 59                         <td height="1" width="691" class="main">
 60<%=intPage%>页 共<%=intPageCount%> 61                             <a href="listuser.jsp?page=0">首页</a>
 62                             <%if(intPage>1){%><a href="listuser.jsp?page=<%=intPage-1%>">上一页</a>
 63                             <%}%>
 64                             <%if(intPage<=1){%>上一页<%}%>
 65                             <%if(intPage<intPageCount){%><a
 66                                 href="listuser.jsp?page=<%=intPage+1%>">下一页</a>
 67                             <%}%>
 68                             <%if(intPage>=intPageCount){%>下一页<%}%>
 69                             <a href="listuser.jsp?page=<%=intPageCount%>">尾页</a> 70                             <input type="text" class="main" name="page" size="3"
 71                                 value="<%=intPage%>" tabindex="1">
 72  73                             <input type="submit" class="main" value="go" name="B1"
 74                                 tabindex="2">
 75                             <class="main">
 76                         </td>
 77                     </tr>
 78                 </table>
 79                 </form>
 80                 <table border="1" width="100%" cellspacing="0"
 81                     bordercolorlight="#000000" bordercolordark="#FFFFFF" class="main">
 82                     <tr bgcolor="#FFEBAD">
 83                         <td>
 84                             <div align="left">
 85                                 用户名
 86                             </div>
 87                         </td>
 88                         <td>
 89                             <p align="center">
 90                                 Email
 91                         </td>
 92                         <td>
 93                             <p align="center">
 94                                 主页
 95                         </td>
 96                         <td>
 97                             <p align="center">
 98                                 登记时间
 99                         </td>
100                         <td>
101                             <p align="center">
102                                 说明
103                         </td>
104                     </tr>
105                     <%      //显示数据
106                      i = 0; 
107                      while(i< intPageSize && result.next()){
108                     %>
109                     <tr bgcolor="#FFEBAD">
110                         <td>
111                             <div align="left"><%=result.getString("username") %></div>
112                         </td>
113                         <td>
114                             <div align="center"><%=result.getString("email") %></a>
115                             </div>
116                         </td>
117                         <td>
118                             <div align="center">
119                                 <font color="#0000CC"><%=result.getString("homepage") %></font>
120                             </div>
121                         </td>
122                         <td>
123                             <div align="center">
124                                 <font color="#FF6666"><%=result.getDate("regtime") %></font>
125                             </div>
126                         </td>
127                         <td>
128                             <div align="center">
129                                 <font color="#0000FF"><%=result.getString("signs") %></font>
130                             </div>
131                         </td>
132                     </tr>
133                     <% 
134                     i++;
135                     }
136                     %>
137                 </table>
138                 <% 
139                 result.close(); //关闭结果集
140                 %>
141             
142     </body>
143 </html>

 

 

posted on 2013-03-05 13:12  烤德  阅读(417)  评论(0编辑  收藏  举报