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 会占用资源

原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5637584.html