恁诸位新年好哇!

记录一下怎么在JSP中使用JavaBean来避免写重复代码。

什么是JavaBean

JavaBean 是特殊的 Java 类,使用 Java 语言书写,并且遵守 JavaBean API 规范。

为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。

JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。

以上来自百度百科。总之,JavaBean就类似你事先写好一个类然后可以在多个不同的文件里引入而不需要在每个JSP文件里都单独声明这个类,可以减少很多的重复代码。

怎么写一个JavaBean

JavaBean的特征在上面已经有所提及了,下面以一个操作JDBC连接MySQL的JavaBean文件来示范如何写JavaBean。

package src; //包名

import java.sql.*; //引入必需的库

public class MysqlBean implements java.io.Serializable { //必须继承序列化接口
    //以下为字段,全是私有的,这边的内容在使用时都不会改,所以没有getter和setter
    String DBDriver = "com.mysql.jdbc.Driver";
    String ConnStr = "jdbc:mysql://localhost:3306/$DBNAME";
    String MyUser = "$USERNAME";
    String MyPassword = "$PASSWORD";
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;

    public MysqlBean() {
        try {
            Class.forName(DBDriver);
        } catch (java.lang.ClassNotFoundException e) {
            System.err.println("DBconn (): " + e.getMessage());
        }
    }

    public ResultSet executeQuery(String sql) {
        rs = null;
        try {
            conn = DriverManager.getConnection(ConnStr, MyUser, MyPassword);
            Statement stmt = conn.createStatement(
                    java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,
                    java.sql.ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery(sql);
        } catch (SQLException ex) {
            System.err.println("aq.executeQuery:" + ex.getMessage());
        }
        return rs;
    }

    public int executeUpdate(String sql) {
        {
            int count = 0;
            try {
                conn = DriverManager.getConnection(ConnStr, MyUser, MyPassword);
                Statement stmt = conn.createStatement();
                count = stmt.executeUpdate(sql);
                stmt.close();
                conn.close();
            } catch (SQLException ex) {
                System.err.println("aq.executeQuery:" + ex.getMessage());
            }
            return count;
        }
    }

    public boolean closeConn() {
        try {
            if (rs != null)
                rs.close();
            if (stmt != null)
                stmt.close();
            if (conn != null)
                conn.close();
            return true;
        } catch (SQLException ex) {
            System.err.println("closeConn:" + ex.getMessage());
            return false;
        }
    }
}

在文件里完成必要的自定义(比如数据库名等)之后,将其保存为MysqlBean.java,然后使用javac命令将其编译为class文件(注意使用的Java版本需要与你运行tomcat的JRE版本相同),得到MysqlBean.class文件。这样,你就成功生成了一个JavaBean的类文件。

如何在JSP里面使用JavaBean

部署JavaBean

跟据你写的包名(比如我的是src包),将class文件放在<JSP 项目>/WEB-INF/classes/包名/文件夹中,例如本示例,class文件的位置为<JSP 项目>/WEB-INF/classes/src/MysqlBean.class

调用JavaBean

在JSP文件中,你可与使用<jsp:useBean />标签来声明一个Bean。在声明一个Bean之后,这个JavaBean对象就变成脚本变量,可以在JSP里面直接使用。例如,要在JSP里使用上文提到的Bean,可以在JSP的开头加上:

<jsp:useBean id="MySQL" class="src.MysqlBean"/>

其中,id代表Bean生成的对象的脚本变量的名字,class代表class文件所在的包和类名。

然后,你就可以在JSP中使用对象名(id).方法名的方式来使用Bean内的方法了,例如我想使用上文的Bean中的execute方法,我可以使用MySQL.execute("");

特殊的getter、setter使用方法

JavaBean中对于getter,setter函数使用特殊的标签来调用:

<jsp:setProperty name="bean的id" property="属性名" value="value"/> //调用setter()
<jsp:getProperty name="bean的id" property="属性名"/> //调用getter()

上面那个类我没写getter和setter,就不演示了~


先这样,JSP其实好像用的不多,以后还是Servlet吧。