JavaBean规范:
JavaBean 是一种JAVA语言写成的可重用组件(类)
必须遵循一定的规范
(1):类必须用public修饰
(2):必须保证有公共无参数构造器
(3):包含属性的操作手段(给属性赋值,获取属性值)
分类:
(1)复杂:UI:如Button,Panel,Window类
(2)简单:domain,dao,service组件,封装数据,操作数据库,逻辑运算
成员:
(1)方法:method
(2)事件:event
(3)属性:property
-----------------------------------------------------------------
属性:
(1)attribute:表示状态,java中没有这个概念,很多人把字段(Field)称之为属性(attribute)
(2)property:表示状态,但不是字段,是属性的操作方法(getter/setter)决定的,框架中使用的大多数属性
设置属性值:writeableMethod:setter方法
public void setXxx(数据类型 变量){
赋值操作
}
若:setName--------------->属性:name
若:setUserName --------------->属性:userName
若:setISBN----------------------->属性:ISBN
获取属性值:readableMethod:getter方法
public 数据类型 getXxx(){
返回一个结果值
}
若:getName--------------->属性:name
若:getUserName --------------->属性:userName
若:getISBN----------------------->属性:ISBN
若:数据类型是boolean类型,则不叫get方法,而是is方法
标准的属性:一般提供字段,Eclipse生成getter/setter,字段和属性同名
是否需要同时提供getter/setter
public class User{
private String firstName;
private String lastName;
public void setFullName(String fullName){}
}
JavaBean和EJB的区别:
EJB:企业级javabean
内省(自省)机制(Ubtrispector):操作JavaBean中的方法/属性/事件
//static BeanInfo getBeanInfo(class<?> beanClass);
//获取指定字节码对应的javaBean信息对象
BeanInfo beanInfo = Introspector.getBeanInfo(Person.class,Object.class);
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
for(PropertyDescriptor pd: pds){
System.out.println("属性名称:"+pd.getName());
System.out.println("属性类型"+pd.getPropertyType());
System.out.println("写入方法"+pd.getWriteMethod());
System.out.println("属性get"+pd.getReadMethod());
System.out.println("-------------------");
}
开发(框架)中,经常使用apache common 的BeanUtils工具来操作JavaBean
-------------------------------------------------------------------------------------------------
准备:
commons-beanutils-1.9.2.jar
EL:
在el中访问javabean属性方式:
方式一:使用“ . ”来访问
方式二:使用[]访问
${ 对象.属性名}----------------->对象.getXXX,属性必须提供get方法
若操作的是map :${ 对象.key}
${ u.userName} 等价于${u["userName"]}
-----------------------------------------------------------------------
l获取上下文路径:
Servlet:reques.getContextPath();
pageContext.getRequesr().getContextPath();
jsp:${pageContext.request.contextPath}
在el中 ==比较的是值不是对象引用地址
---------------------------------------------------------
从tomcat7开始,el中不仅支持属性访问还支持获取上下文路径
${pageContext.getRequest(),getContextPath()}
el目的:获取作用域中的共享数据
JSTL:为了完全在jsp中消除java代码,学习java标签库
java标签库:java stander tag lib
(1)自定义标签库
(2)标准标签库(sun预先提供,我们可直接使用)
学习mvc(Strusts/spring mvc)框架都会学习一套标签
--------------------------------------------------------------------------------------
准备:
(1)准备jstl相关的jar包(tomcat/webapps/example/web-inf/lib)
jstl.jar el-api.jar
standard.jar jsp-api.jar
使用JSTL 的jsp页面,引入标签库:
引入核心jstl
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
JSTL核心常用标签:
(1)逻辑判断(添加选择)标签:(if-else if-else)
<c:if test="${bool表达式}" var="变量" scope="page作用域"/>
<c:if test="${num==0 }">
表达式为true显示内容
</c:if>
--------------------------------------------------------------------------------------】
多条件判断:choose标签
<c:choose>
<c:when test="${num>0 }">ee222</c:when>
<c:when test="${num==0 }">000</c:when>
<c:when test="${num<0 }">-282</c:when>
</c:choose>
-----------------------------------------------------------------------------------------
迭代循环标签:(foreach)
(1) 迭代集合对象
<%
pageContext.setAttribute("arrs", Arrays.asList("a","b","c","d"));
%>
迭代集合中所有数据:
底层:会把每一个迭代的元素,存放在pageContext作用域中
varStatus--z迭代状态--index 索引
pageContext.setAttribute("e",每一个迭代的元素);
<br>
<c:forEach items="${arrs}" var="e" varStatus="vs">
${vs.count}----------- ${e} <br>
</c:forEach>
输出11-20
<c:forEach begin="11" end="20" var="num" step="2" >
${num}
<br>
</c:forEach>
Date时间格式
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%
pageContext.setAttribute("date",new java.util.Date());
%>
${date}
<fmt:formatDate value="${date}" pattern="yyyy-MM-dd HH:mm:ss"/>
定义共同的内容放在lib的jsp中
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
再使用 <%@ include file="lib.jsp" %>添加