EL表达式和JSTL(一)
一. 初始JavaBean
在软件开发时,有些数据时经常要用到的,为了方便进行移植,Sun公司提出了一种JavaBean技术,使用JavaBean对这些数据进行封装,做到一次编写,到处开发。
JavaBean是Java web程序的重要组成部分,是用Java语言编写的,遵循一定标准的类,它封装了数据和业务逻辑,供JSP或者Servlet调用,完成数据的封装和数据处理
1.什么是JavaBean
是一个遵循特定写法的Java类:
(1).它必须要有一个公共的,无参数的构造方法,这个可以是构造器自动默认产生的。
(2).它提供公共的getter和setter方法,用于外部获取JavaBean的属性。
(3).属性必须私有化。
(4).在JavaBean中,需要对每个属性提供两个公共的方法,假设JavaBean中的一个属性为xxx,那么这个属性的公共方法就为:
setXxx():用来设置属性xxx的值
getXxx():用来得到属性Xxx的值。
如下,是一个用户类的JavaBean:
public class UserBean implements java.io.Serializable{ private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public UserBean(String username, String password) { super(); this.username = username; this.password = password; }
2.在JSP中使用JavaBean
在JSP中使用JavaBean,可以通过脚本代码直接访问JavaBean,也可以通过JSP的动作标签来访问JavaBean,采用后一种方法,可以减少JSP页面的程序代码,使它更接近于HTML代码。
访问JavaBean的JSP动作标签有:
<jsp:useBean id="name" class="className" scope="page|request"/>
在指定的作用范围内,调用由class所指定类的无参构造函数创建对象实例,若该对象已存在,就不生成新的对象,而是直接使用该对象。
id是指JavaBean实例的名字,而class是用来指定JavaBean的类的名,必须是完整的类名,包名也需要写进去,scope是用来指定该JavaBean的作用域,通常的指定域有四个:
page:该JavaBean只在此页面有效。
request:该JavaBean在此次的request中有效
session:该JavaBean在整个会话中有效。
application:该JavaBean在本应用中一直都有效。
<jsp:setProperty id="name" proterty="propertyname" value=""/>
name是确认需要设定的JavaBean的实例名,proterty是用来确定需要设置的属性名,value是用来设置属性值。
<jsp:getProperty id="name" proterty="protertyname" />
name属性用来确定需要输出的JavaBean的实例名,property属性确定需要输出的属性名,并把结果显示到页面上。
实例:设计一个Web程序,计算两个整数的和值,并在网页上显示结果,要求:要在JavaBean中实现数据的求和操作,
JavaBean页面:
package cn.it.gan.javaBeanAdd;
/**
* 该JavaBean是获取两个整数的数值,并且在JavaBean中实现数据的求和操作
* @author 12428
*
*/
public class Add {
private int num1;
private int num2;
private int add;
public Add() {
}
public Add(int num1, int num2) {
super();
this.num1 = num1;
this.num2 = num2;
}
public int getNum1() {
return num1;
}
public void setNum1(int num1) {
this.num1 = num1;
}
public int getNum2() {
return num2;
}
public void setNum2(int num2) {
this.num2 = num2;
}
//设置一个方法,用来求和,并返回求和值
public int getAdd() {
return num1+num2;
}
}
input.jsp页面:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>此页面接受两个参数</title> </head> <body> <form action="show.jsp" method="post"> <table> <tr >获取两个整数的值</tr> <tr> <td>第一个整数的值:</td> <td><input type="text" name="num1"></td> </tr> <tr> <td>第二个整数的值:</td> <td><input type="text" name="num2"></td> </tr> </table> <input type="submit" value="提交"/> </form> </body> </html>
show.jsp页面:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>显示和</title> </head> <jsp:useBean id="add1" class="cn.it.gan.javaBeanAdd.Add"></jsp:useBean> <%--接受所有的参数给add1赋值,但要求参数是对应的类型,Java进行自动转换 --%> <jsp:setProperty property="*" name="add1" /> <%=add1.getAdd() %> <body> </body> </html>
jsp:setProperty一共有四种用法:
<jsp:setProperty>标签用于设置和访问JavaBean对象的属性。
语法格式一:
<jsp:setProperty name="beanName" property="propertyName" value="string字符串"/>
语法格式二:
<jsp:setProperty name="beanName" property="propertyName" value="<%= expression %>" />
语法格式三:
<jsp:setProperty name="beanName" property="propertyName" param="parameterName"/>
语法格式四:
<jsp:setProperty name="beanName" property= "*" />
将所有的属性和请求参数关联,实现自动赋值并自动转换数据类型。
name属性用于指定JavaBean对象的名称。
property属性用于指定JavaBean实例对象的属性名。
value属性用于指定JavaBean对象的某个属性的值,value的值可以是字符串,也可以是表达式。为字符串时,该值会自动转化为JavaBean属性相应的类型,如果value的值是一个表达式,那么该表达式的计算结果必须与所要设置的JavaBean属性的类型一致。
param属性用于将JavaBean实例对象的某个属性值设置为一个请求参数值,该属性值同样会自动转换成要设置的JavaBean属性的类型。
<jsp:setProperty>标签使用范例1:使用jsp:setProperty标签设置person对象的属性值
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%-- 3 在jsp中使用jsp:useBean标签来实例化一个Java类的对象 4 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/> 5 ┝<jsp:useBean>:表示在JSP中要使用JavaBean。 6 ┝id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。 7 ┝class:此对象对应的包.类名称 8 ┝scope:此javaBean的保存范围,四种范围:page、request、session、application 9 --%> 10 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/> 11 12 <%-- 13 使用jsp:setProperty标签设置person对象的属性值 14 jsp:setProperty在设置对象的属性值时会自动把字符串转换成8种基本数据类型 15 但是jsp:setProperty对于复合数据类型无法自动转换 16 --%> 17 <jsp:setProperty property="name" name="person" value="白虎神皇"/> 18 <jsp:setProperty property="sex" name="person" value="男"/> 19 <jsp:setProperty property="age" name="person" value="24"/> 20 <jsp:setProperty property="married" name="person" value="false"/> 21 <%-- 22 birthday属性是一个Date类型,这个属于复合数据类型,因此无法将字符串自动转换成Date ,用下面这种写法是会报错的 23 <jsp:setProperty property="birthday" name="person" value="1988-05-07"/> 24 --%> 25 <jsp:setProperty property="birthday" name="person" value="<%=new Date()%>"/> 26 <!DOCTYPE HTML> 27 <html> 28 <head> 29 <title>jsp:setProperty标签使用范例</title> 30 </head> 31 32 <body> 33 <%--使用getXxx()方法获取对象的属性值 --%> 34 <h2>姓名:<%=person.getName()%></h2> 35 <h2>性别:<%=person.getSex()%></h2> 36 <h2>年龄:<%=person.getAge()%></h2> 37 <h2>已婚:<%=person.isMarried()%></h2> 38 <h2>出生日期:<%=person.getBirthday()%></h2> 39 </body> 40 </html>
运行效果如下:
<jsp:setProperty>标签使用范例2:使用请求参数为bean的属性赋值
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%-- 3 在jsp中使用jsp:useBean标签来实例化一个Java类的对象 4 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/> 5 ┝<jsp:useBean>:表示在JSP中要使用JavaBean。 6 ┝id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。 7 ┝class:此对象对应的包.类名称 8 ┝scope:此javaBean的保存范围,四种范围:page、request、session、application 9 --%> 10 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/> 11 12 <%-- 13 jsp:setProperty标签可以使用请求参数为bean的属性赋值 14 param="param_name"用于接收参数名为param_name的参数值,然后将接收到的值赋给name属性 15 --%> 16 <jsp:setProperty property="name" name="person" param="param_name"/> 17 18 <!DOCTYPE HTML> 19 <html> 20 <head> 21 <title>jsp:setProperty标签使用范例</title> 22 </head> 23 24 <body> 25 <%--使用getXxx()方法获取对象的属性值 --%> 26 <h2>姓名:<%=person.getName()%></h2> 27 </body> 28 </html>
运行结果如下:
<jsp:setProperty>标签使用范例3:用所有的请求参数为bean的属性赋值
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%-- 3 在jsp中使用jsp:useBean标签来实例化一个Java类的对象 4 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/> 5 ┝<jsp:useBean>:表示在JSP中要使用JavaBean。 6 ┝id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。 7 ┝class:此对象对应的包.类名称 8 ┝scope:此javaBean的保存范围,四种范围:page、request、session、application 9 --%> 10 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/> 11 12 <%-- 13 jsp:setProperty标签用所有的请求参数为bean的属性赋值 14 property="*"代表bean的所有属性 15 --%> 16 <jsp:setProperty property="*" name="person"/> 17 18 <!DOCTYPE HTML> 19 <html> 20 <head> 21 <title>jsp:setProperty标签使用范例</title> 22 </head> 23 24 <body> 25 <%--使用getXxx()方法获取对象的属性值 --%> 26 <h2>姓名:<%=person.getName()%></h2> 27 <h2>性别:<%=person.getSex()%></h2> 28 <h2>年龄:<%=person.getAge()%></h2> 29 </body> 30 </html>
运行结果如下所示:
<jsp:getProperty>标签
<jsp:getProperty>标签用于读取JavaBean对象的属性,也就是调用JavaBean对象的getter方法,然后将读取的属性值转换成字符串后插入进输出的响应正文中。
语法:
<jsp:getProperty name="beanInstanceName" property="PropertyName" />
name属性用于指定JavaBean实例对象的名称,其值应与<jsp:useBean>标签的id属性值相同。
property属性用于指定JavaBean实例对象的属性名。
如果一个JavaBean实例对象的某个属性的值为null,那么,使用<jsp:getProperty>标签输出该属性的结果将是一个内容为“null”的字符串。
范例:使用jsp:getProperty获取bean对象的属性值
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%-- 3 在jsp中使用jsp:useBean标签来实例化一个Java类的对象 4 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/> 5 ┝<jsp:useBean>:表示在JSP中要使用JavaBean。 6 ┝id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。 7 ┝class:此对象对应的包.类名称 8 ┝scope:此javaBean的保存范围,四种范围:page、request、session、application 9 --%> 10 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/> 11 12 <%-- 13 使用jsp:setProperty标签设置person对象的属性值 14 jsp:setProperty在设置对象的属性值时会自动把字符串转换成8种基本数据类型 15 但是jsp:setProperty对于复合数据类型无法自动转换 16 --%> 17 <jsp:setProperty property="name" name="person" value="白虎神皇"/> 18 <jsp:setProperty property="sex" name="person" value="男"/> 19 <jsp:setProperty property="age" name="person" value="24"/> 20 <jsp:setProperty property="married" name="person" value="false"/> 21 <%-- 22 birthday属性是一个Date类型,这个属于复合数据类型,因此无法将字符串自动转换成Date ,用下面这种写法是会报错的 23 <jsp:setProperty property="birthday" name="person" value="1988-05-07"/> 24 --%> 25 <jsp:setProperty property="birthday" name="person" value="<%=new Date()%>"/> 26 <!DOCTYPE HTML> 27 <html> 28 <head> 29 <title>jsp:getProperty标签使用范例</title> 30 </head> 31 32 <body> 33 <%--使用jsp:getProperty标签获取对象的属性值 --%> 34 <h2>姓名:<jsp:getProperty property="name" name="person"/></h2> 35 <h2>性别:<jsp:getProperty property="sex" name="person"/></h2> 36 <h2>年龄:<jsp:getProperty property="age" name="person"/></h2> 37 <h2>已婚:<jsp:getProperty property="married" name="person"/></h2> 38 <h2>出生日期:<jsp:getProperty property="birthday" name="person"/></h2> 39 </body> 40 </html>
运行结果如下: