jsp---->JavaBean
一、Java 命名规范:
1、包命名:全部字母小写:cn.mldn.lxh
2、类命名:单词的首字母大写:SimpleBean
3、属性名称:第一个单词的首字母小写,之后每个单词的首字母大写:studentName ;
4、方法命名:与属性命名相同:public void sayHello() ;
5、常量命名:全部单词大写:final String DBDRIVER ="MLDN"
二、JavaBean 就是一个Java 类,也就意味着,JAVA 的一切特性,此处都可以使用,此javaBean 没有图形显示代码,只是完成基本业务逻辑。JavaBean 可以使用JAVA 的封装、继承、多态。使用 JavaBean 封装许多可重复调用的代码,使用 JavaBean 可以达到显示与业务的分离
显示:JSP
业务:JavaBean
将 JavaBean 编译好的*.class 文件拷贝到WEB-INF/classes 文件夹之下
三、编写 JavaBean 必须满足以下几点:
· 所有的 JavaBean 必须放在一个包中
· JavaBean 必须声明成public class 类型文件名称与类名称一致
· 所有的属性必须封装(属性私有的,提供get和set 方法)
· 设置和取得属性可以通过setter、getter
· 使用 JSP 标签去调用JavaBean 时必须有一个无参构造方法
四、打包编译:
javac -d . SimpleBean.java (javac后面和-d后面各有一个空格,然后又一个点),点表示当前目录
五、JavaBean在JSP 中的调用过程:
1、使用<%@page import=""%>使用导入指令
实际上 WEB-INF/classes 是一个classpath 路径,所有的class 文件,只要放在此目录都可以被访问到,与其他类的调用方式是一样的
<%@page contentType="text/html;charset=gb2312"%> <%@page import="cn.mldn.lxh.*"%> <% // 实例化对象 SimpleBean sb = new SimpleBean() ; sb.setName("李兴华") ; sb.setPassword("zzzzzz") ; %> <h1>姓名:<%=sb.getName()%></h1> <h1>密码:<%=sb.getPassword()%></h1>
2、使用JSP 的标签指令调用
<jsp:useBean
id="sb" 表示实例化对象的名称
scope="page" 表示使用范围
class="cn.mldn.lxh.SimpleBean"/> 对象所属的包.类名称路径
如果使用此标签,则 JAVABEAN 中必须有一个无参构造方法,此为明确规定
Tomcat 服务器,在默认情况下是不能读取修改后的JavaBean,如要读取有以下两种方法:
1、重新启动服务器
2、配置参数:reloadable="true":<Context path="/test" docBase="f:\testWeb" reloadable="true"/>
六、设置javabean属性值
使用下面代码,可以替代掉一切的 setter 方法调用,表单提交的参数直接被设置到javabean对象上。
<jsp:setProperty name="sb" property="*"/>
· name:已经声明过的JavaBean 对象的(id)
· property:表示要设置的属性,如果为“*”,则表示自动匹配
javabean.html
<form action="javabeandemo.jsp" method="post"> 用户名:<input type="text" name="name"><br> 密 码:<input type="text" name="password"><br> <input type="submit" value="提交"> <input type="reset" value="重置"> </form>
javabeandemo.jsp
<%@page contentType="text/html;charset=gb2312"%> <jsp:useBean id="sb" scope="page" class="cn.mldn.lxh.SimpleBean"/> <jsp:setProperty name="sb" property="*"/> <%-- // 如果有20个数据需要设置,则使用JavaBean的设置属性方式,可以自动完成 --%> <h1>姓名:<%=sb.getName()%></h1> <h1>密码:<%=sb.getPassword()%></h1>
SimpleBean
// 所有的JavaBean必须放在一个包中 package cn.mldn.lxh ; public class SimpleBean { private String name ; private String password ; // 如果没有指定构造方法,则会自动生成一无参的什么都不做的构造方法 public SimpleBean() { System.out.println("** public SimpleBean() .") ; System.out.println("-------------------------------------------") ; } public void setName(String name) { this.name = name ; } public void setPassword(String password) { this.password = password ; } public String getName() { return this.name ; } public String getPassword() { return this.password ; } };
为什么能够通过 property="*"的方式,将内容设置到Bean 中,其根本原因是使用Java 的反射机制,根据传递参数的名称找到相应的方法,比如:参数名称为name,则自动找到setName 方法
原则:使用 JavaBean 自动设置内容时,一定要让参数名称与Bean 中的属性名称一致,这样通过Java 的命名规范,可以达到统一。
当需要指定某个属性设置内容的时候,可以在 property 中指定参数
· <jsp:setProperty name="sb" property="*"/>:自动匹配
· <jsp:setProperty name="sb" property="name"/>:可以根据自己的需要设置需要的属性值
· <jsp:setProperty name="sb" property="name" param="password"/>:可以根据自己的需要,任意选择传递的参数
· <jsp:setProperty name="sb" property="name" value="password"/>:根据用户需要,自己设置参数的值如果输入的值是一个变量,则需要用表达式输出
JSP 取得属性
<jsp:getProperty name="id" property="具体属性"/>
七、javabean范围
page 范围:属性只在当前页有效,如果跳转到其他页面,则需要重新实例化
适用于:JSP 页面操作资源时使用
request 范围:属性只保存在一次服务器跳转中
前提:使用<jsp:forward>跳转才行
session 范围:属性保存在一次会话之中,可以使用任意方式连接其他页面,则此对象只实例化一次
application 范围:属性公有,此对象在整个服务器上只实例化一次
尽量少用,因为 application 会占用资源