最近休息了两天,为什么休息?因为老师也需要休息,因为传智播客的授课很人性化,因为学的知识很多很多,怕学生们吸收不掉,就给学生们休息时间缓存一下,吸收一下,这样你才能有能力跟着老师的进度去学。咱们传智播客给我的感觉就是,忙忙碌碌的为的就是让我们不要白学,为的就是让我们学有所成,为的就是让我们出去好找工作,为的就是让我们能找个高薪的工作,这真的是一切为学生,为学生一切,着想!如果有想培训的,我真心的建议大家来传智播客,不花一点冤枉钱,就能学到话很多钱都学不到的技术啊!!!
继续给大家晒晒我学到的知识喔!!!
JSP 两种开发模式:
JSP model1 : JSP + JavaBean 组合 ,适合开发中小型简单应用,JSP负责业务流程控制、页面显示;JavaBean 负责数据封装和处理
JSP model2 : Servlet + JSP + JavaBean 组合,符合MVC 设计模式,适合开发业务流程复杂大型应用,JSP
只负责页面显示,JavaBean负责数据封装和处理,Servlet负责业务流程控制,JavaBean、JSP调度 --------- 分工明确,便于维护
什么是JavaBean : javaBean就是一个Java类,必须满足下面特点:
1、public 的无参数构造函数
2、属性必须 private
3、为属性提供public 的 getter和setter方法,方法遵循一定命名规则
如果有属性属性 name ----- 那么方法名必须是getName setName (属性首字母大写,在前面加上 get和set )
属性 age ----- 方法 getAge setAge
在JSP中三个操作JavaBean 的动作标签:
(1)<jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件。
(2)<jsp:setProperty>标签:用于在JSP页面中设置一个JavaBean组件的属性。
(3)<jsp:getProperty>标签:用于在JSP页面中获取一个JavaBean组件的属性。
1)<jsp:useBean id="p" class="cn.itcast.domain.Person" scope="page"></jsp:useBean>
翻译为
cn.itcast.domain.Person p = null;
synchronized (_jspx_page_context) {
p = (cn.itcast.domain.Person) _jspx_page_context.getAttribute("p", PageContext.PAGE_SCOPE);
if (p == null){
p = new cn.itcast.domain.Person();
_jspx_page_context.setAttribute("p", p, PageContext.PAGE_SCOPE);
}
}
属性scope=page是指在指定范围中查找 p 对象,如果存在,直接使用,不存在则创建新的Person对象 ,保存到page范围
2)通过 jsp标签setProperty设置javabean对象的属性
<jsp:setProperty property="name" name="p" value="李四"/>
<jsp:setProperty property="age" name="p" value="20"/>
property:要设置的javaBean属性
name="p":要设置属性的对象
value="李四":要设置的值
3)通过jsp标签取出 javabean 属性getProperty
<jsp:getProperty property="name" name="p"/>
<jsp:getProperty property="age" name="p"/>
*****<jsp:setProperty name="p" property="*" /> 自动从请求参数中获取 变量与 指定javabean对象的属性 进行匹配 赋值
JSP model2开发 : Servlet + JSP + JavaBean
JSP 负责页面显示将数据处理后的结果显示给用户
JavaBean 负责数据封装和处理
Servlet 负责业务流程 控制、JavaBean JSP调度
model2程序开发步骤
1、客户端提交请求给Servlet
2、Servlet接收数据,封装数据到JavaBean中
3、Servlet调用JavaBean处理数据,得到处理结果
4、Servlet将数据处理结果传递给JSP
5、JSP生成响应页面,返回客户端
*Servlet 来接收客户端请求,将请求封装到java对象代码,在Servlet中编写
注意<jsp:setProperty property="*" name="calculator" /> 不能在Servlet代码中使用
什么内省:内省是JDK提供一套用来操作JavaBean 的 API -------- 内省底层是通过反射实现的
那么内省是如何识别JavaBean对象有哪些属性?
因为所有成员变量都是private,识别javabean属性不是通过成员变量,而是通过setter和getter方法
内省编程的步骤:
1、通过Introspector 获得 JavaBean对象 BeanInfo
BeanInfo beanInfo = Introspector.getBeanInfo(Person.class);
2、通过BeanInfo 获得JavaBean对象 所有属性描述器 PropertyDescriptor
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
3、遍历每个属性描述器,可以获得属性名称 getName()
4、通过属性描述器 获得属性读写方法
Method setter = propertyDescriptor.getWriteMethod();
Method getter = propertyDescriptor.getReadMethod();
* 通过内省技术 实现 setProperty="*" 相同效果代码(存在的问题是:没有处理类型转换问题)
在JSP模式二中要想实现请求数据向JavaBean自动封装可以使用BeanUtils框架来完成
* BeanUtils是Apache commons 组件包一个 是开源组件
使用BeanUtils需要下载开发包:
1、去官网下载开发包
下载commons-beanutils 同时下载 commons-loggin
2、将两个jar包 复制 WEB-INF/lib
3、编写BeanUtils 程序
BeanUtils.populate(person, parameterMap);
person是要分装数据的javaBean对象,
parameterMap是request.getParameterMap()获取到提交上来的所有key和value,
注意value是一个字符串数组因为一个key是可以对应多个value的
如果 JavaBean的属性是一个特殊类型,自定义转换器步骤:
1、编写类实现Converter接口
实现 convert(Class type, Object value) 方法
2、在BeanUtils.populate 封装之前,必须对转换器进行注册
通过 ConvertUtils 的 register(Converter converter, Class clazz) 注册转换器
MVC是设计模式,MVC是一种思想、程序架构思想
* 与23种常用设计模式无关
* MVC 规定整个web应用程序 架构思想
MVC 将web应用中程序分为三个部分 Model、View 、Controller
Model : 模型(数据封装处理)
View:视图 (web应用界面展示)
Controller:控制器 (调度模型和视图,完成调度和跳转 )
* 分工明确、条理清晰
JSP model2 就是符合MVC设计模式,JavaBean就是Model、JSP就是View 、Servlet就是Controller