posts - 37, comments - 8, trackbacks - 0, articles - 0

jsp程序设计:JavaBean

Posted on 2008-08-17 10:41 梦与桥 阅读(645) 评论(0)  编辑  收藏 所属分类: jsp程序设计

一、JavaBean简介:JavaBean是一个可重复使用的软件部分,应用JavaBean的主要目的是代码重用,便于维护和管理。它实质上是一个类,具有如下特性:
        1、JavaBean是公共和具体的类。
        2、构造函数没有输入参数。
        3、属性必须声明为private,方法必须声明为public。
        4、用一组set方法设置内部属性。
        5、用一组get方法获取内部属性。
        6、JavaBean是一个没有主方法的类,一般的Java类默认继承自Object类,而Bean不需要这种继承。
二、编写JavaBean:同编写Java类很相似,然后编译成为一个class文件,此文件将被JSP程序进行调用。
    例子程序:

package mybean;
public class TestBean
{
    
private String  string1 = null;
    
private String  string2 = null;
    
public TestBean()
    
{
    }

    
public void setString1(String value)
    
{
        string1 
= value;
    }

    
public void setString2(String value)
    
{
        string2 
= value;
    }

    
public String getString1Value()
    
{
        
return string1;
    }

    
public String getString2Value()
    
{
        
return string2;
    }

}

三、JSP中使用JavaBean:JavaBean和JSP技术的结合不仅可以实现表现层和商业逻辑层的分离,而且可以提高JSP程序的运行效率和代码重用程序,还可以实现并行开发,是JSP编程中常用的技术。在JSP中提供了<jsp:useBean>、<jsp:setProperty>和<jsp:getProperty>动作元素实现对JavaBean的操作。
    1、<jsp:useBean>可以定义一个具有一定生存范围以及一个唯一id的JavaBean的实例,JSP页面通过指定的id来识别JavaBean,也可以通过id.method语句来调用JavaBean中的方法。在执行过程中,<jsp:usebean>首先尝试寻找已经存在的具有相同id和scope值的JavaBean实例,如果没有就会自动创建一个新的实例。其语法如下:

<jsp:userBean id="beanName"  scope="page|request|session|appplication" class="packageName.className"/>

      注:属性scope之四种范围: 页面、 请求、 对话、 应用。
      对话范围:
      对话范围的JavaBean 主要应用与跨多个页面和时间段: 例如填充用户信息。 添加信息并且接受回馈,保存用户最近执行页面的轨迹。对话范围JavaBean保留一些和用户对话 ID 相关的信息。这些信息来自临时的对话cookie,并在当用户关闭浏览器时,这个cookie将从客户端和服务器删除。
      页面/请求范围:
      页面和请求范围的JavaBean有时类似表单 的bean , 这是因为 他们大都用与处理表单。表单需要很长的时间来处理用户的输入,通常情况下用于页面接受HTTP/POST或者GET请求。另外页面和请求范围的bean可以用于减少大型站点服务器上的负载,如果使用对话bean,耽搁的处理就可能会消耗掉很多资源。
      应用:
      应用范围通常应用于服务器的部件,例如 JDBC 连接池、应用监视、用户计数和其他参与用户行为的类。
      在Bean中限制HTML的产生:
      理论上,JavaBean 将不会产生任何HTML,因为这是jsp层负责的工作;然而,为了动态消息提供一些预先准备的格式是非常有用的。产生的HTML将被标注的 JavaBean方法返回。
      这里有一些非常重要的事情:
      (1.)不要试图在JavaBean返回的HTML中放置任何字体尺寸。
      并不是所有的浏览器都相同。很多浏览器无法处理完整的字体尺寸。 
      (2).不要试图在JavaBean返回的HTML中放置任何脚本或者DHTML。
      向页面直接输出脚本或者DHTML相当于自我毁灭,因为某些浏览器版本在处理不正确的脚本时会崩溃(非常少但是有)。如果用户的JavaBean在运行时是动态的推出复杂的HTML语言,用户将陷入调试的噩梦。另外,复杂的HTML将限制JavaBean的寿命和灵活性。
      (3).不要提供任何的选择。
      如果用户使用不同的系统浏览页面,可以提供一种可以替换的方法。
     2、<jsp:setProperty>:可以设置Bean的属性值,基本语法格式如下:

<jsp:setProperty 
name="beanInstanceName" 

property
= "*" |
property
="propertyName" [ param="parameterName" ] |
property
="propertyName" value="{string / <%= expression %>}" 

/> 
   3、<jsp:getProperty>:可以得到Bean的属性值,基本语法格式如下:
<jsp:getProperty name="beanInstanceName" property="propertyName" /> 
注意:§在Tomcat服务器中使用JavaBean,必须将Bean文件存放在一个包中,否则JSP无法访问,所以第一条语句有类似package myBean的形式。
            §在Tomcat服务器中使用JavaBean,必须将编译好的Bean存放在应用程序文件夹下的classes文件夹中。
            §如果javaBean进行了修改,必须重新启动Tomcat服务器,JavaBean才能被正确地调用。
四、JavaBean与HTML表单的交互:jsplogin.htm提供用户录界面;jsploginBean.jsp通调用LoginBean中的check方法实现登录验证;LoginBean.java为登录Bean。
jsphogin.html code:
<html>
<head>
<title>用户登录</title>
</head>
<body>
<form name="form1" onsubmit="return check()"  method="post" action="jsploginBean.jsp">
  
<table width="80%"  border="0" align="center" bgcolor="#0099FF">
    
<tr>
      
<th colspan="2" scope="col">&nbsp;用户登录</th>
    
</tr>
    
<tr bgcolor="#FFFFFF">
      
<th scope="row">用户名:</th>
      
<td><input name="name" type="text" id="name"></td>
    
</tr>
    
<tr bgcolor="#FFFFFF">
      
<th scope="row">密码:</th>
      
<td><input name="pass" type="password" id="pass"></td>
    
</tr>
    
<tr bgcolor="#FFFFFF">
      
<th scope="row">&nbsp;</th>
      
<td><input type="submit" name="Submit" value="提交">
      
<input type="reset" name="Reset" value="重置"></td>
    
</tr>
  
</table>
</form>
</body>
</html>
<script type="text/javascript">
function check()
{
  
if (form1.name.value=="")
  
{
    alert(
"请输入用户名!!!");
    form.name.focus();
    
return false;
  }

  
if (form1.pass.value=="")
  
{
    alert(
"请输入密码!!!");
    form.pass.focus();
    
return false;
  }

}

</SCRIPT>

jsploginBean.jsp code
<%@ page contentType="text/html; charset=GB2312"%>
<jsp:useBean id="login" scope="page" class="mybean.LoginBean" />
<jsp:setProperty name="login" property="*" />
<%
int iResult = login.check();
if(iResult==1){ 
%>
<h2>欢迎<%=login.getName()%>进入Easy_Buy电子商城</h2>
<%
}
if(iResult==0){
%>
<h2>登录失败!点击<href="javascript:history.back(-1);">这里</a>重新登录!</h2> 
<%
}
%>
//LoginBean.java code
    package mybean;
public class LoginBean
{
    
private String name=null;
    
private String pass=null;
    
public LoginBean()
    
{
    }

    
public void setName(String value)
    
{
        name
=value;
    }

    
public void setPass(String value)
    
{
        pass
=value;
    }

    
public String getName()
    
{
        
return name;
    }

    
public String getPass()
    
{
        
return pass;
    }

    
public int check()
    
{
        
try
        
{
            Class.forName(
"sun.jdbc.odbc.JdbcOdbcDriver");
            String strConn
="jdbc:odbc:shopData";
            String strUser
="sa";
            String strPassword
="";
            conn
=DriverManager.getConnection(strConn,strUser,strPassword);
            Statement stat
=conn.createStatement();
            String strSql
="SELECT COUNT(*) FROM admin WHERE a_name='"+name+"' and a_pass='"+pass+"'";
            ResultSet result
=stat.executeQuery(strSql);
            result.next();
            
if(result.getInt(1)==1)
            
{
                
return 1;
            }

            
else
            
{
                
return 0;
            }

        }

        
catch(ClassNotFoundException e)
        
{
            out.println(e.getMessage());
        }

        
catch(SQLException e)
        
{
            out.println(e.getMessage());
        }

        
finally
        
{
            
try
            
{
                
if (conn!=null)
                    conn.close();
            }

            
catch(Exception e){}
        }
        
    }

}
JSP页面中调用JavaBean的一般操作方法:
        (1)编写实现特定功能的JavaBean
        (2)应用<jsp:useBean>在JSP页面中声明并初始化JavaBean
        (3)调用JavaBean提供的public方法或者直接使用<jsp:getProperty>来得到JavaBean中属性的值
        (4)调用JavaBean中的特定方法完成指定的功能    
附:
    set path=%path%; d:/wzz/bin   设置path变量,只对当前窗口有效
    jar cf class.jar *.class 将当前目录下的所有.class文件打包成jar文件
    jar cf class.jar wzz/w/z/*.class 将wzz/w/z/目录下的所有.class文件打包成jar文件
    把类文件拷到Tomcat安装目录的"common/classes"目录中,则对WEB站点中的所有WEB应用都有效(需要重启Tomcat);如果把jar包拷到web应用的"WEB-INF/classes"目录中,则此web应用有效。
    把jar包拷到Tomcat安装目录的"common/lib"目录中,则对WEB站点中的所有WEB应用都有效(需要重启Tomcat);如果把jar包拷到web应用的"WEB-INF/lib"目录中,则此web应用有效。

只有注册用户登录后才能发表评论。


网站导航: