A034_员工管理系统_JavaBean_EL_JSTL_MVC思想

1.内容介绍

1. JavaBean; (了解)
2. JavaBean自省机制; (了解)
3. El表达式; (掌握)
4. JSTL标签; (掌握)
5. MVC思想; (掌握)

2.JavaBean

2.1.什么是JavaBean
  1. JavaBean是一种JAVA语言写成的可重用组件。可重复使用,减少代码冗余,方便维护;
  2. 简单一点:JavaBean是一种特殊的类,或者说满足一定规范的类;
2.2.JavaBean的规范 标准的类
  • 我们开发一个JavaBean,需要满足一定的规范:
    必须有包; – 编程规范/良好的编程习惯
    必须是具体的和公共的; – 访问权限最大化,非抽象的
    必须有公有无参构造; – 方便框架或底层通过反射创建对象
    必须有相应公有的setter、getter方法; – 方便设置和获取属性/el表达式
    建议对象属性私有化; – 控制直接操作对象属性
  • 封装的时候
    1.所有字段私有化
    2.所有字段提供getset方法
    3.提供一个无参数的构造方法
2.3.Bean属性与对象属性
  1. Bean属性 == JavaBean属性:getter和setter方法上的属性,其中getter方法上的属性称之为可读属性,setter方法上面的属性称之为可写属性;
  2. 对象属性 == 字段,即实例变量;
  3. get 或者set 后面的名字首字母小写: 称之为Bean【对象】属性
    【例子】
    在这里插入图片描述
    4.EL表达式取值的时候:通过属性取值user.id
    5.一般情况下bean属行和对象属性拥有相同的名字,当然也可以不一样,甚至没有对象属性;
    6.我们接下来要学得el表达式就是使用的getter方法上的Bean属性获取值的;
2.4.JavaBean的内省机制
  • 1.什么是JavaBean内省机制?
    (1)内省也叫自省。内省(IntroSpector)是Java语言对 Bean类属性、事件(GUI,这里不学)的一种缺省(默认)处理方法;
    (2)我们拿到一个JavaBean,就可以拿到它的读写属性和读写方法,然后通过反射完成读写操作;
    (3)内省是基于JavaBean规范对反射进行了封装,可以很容易的获取javaBean的属性、方法和事件;
    参考:
    图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口;是一种人与计算机通信的界面显示格式;
    JavaBean是一种特殊的类,主要用于传递数据信息。如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为"值对象"(Value Object),或"VO"。这些信息可以通过setter、getter方法操作。内省机制是通过反射来实现的,BeanInfo用来暴露一个bean的属性、方法和事件,以后我们就可以操纵该JavaBean的属性;
  • 2.JavaBean的API:
Introspector类:
Static BeanInfo getBeanInfo(Class<?> beanClass):在 Java Bean 上进行内省,了解其所有属性、公开的方法和事件。如果 Java BeanBeanInfo 类以前已经被内省,则从 BeanInfo 缓存中检索 BeanInfo 类;
BeanInfo getBeanInfo(Class<?> beanClass, Class<?> stopClass) :获取Java Bean的信息,指定不获取哪些父类中的信息;
BeanInfo类:
PropertyDescriptor[] getPropertyDescriptors():获取Bean属性的描述器,即使没有对象属性都可以获取,只要有bean属性;
PropertyDescriptor类:(属性描述器):
构造:PropertyDescriptor(String propertyName,<?> beanClass) ,获取指定属性名的属性描述器;
getPropertyType(),获得属性的Class对象;
getReadMethod(),获得用于读取属性值的方法/获取可读属性的方法;
getWriteMethod(),获得用于写入属性值的方法/获取可写属性的方法;

3.内省操作步骤:

1.一般的做法是通过类Introspector来获取某个对象的BeanInfo信息;
2.通过BeanInfo来获取属性的描述器(PropertyDescriptor);
3.通过这个属性描述器就可以获取某个属性对应的getter/setter方法;
4.然后就可以通过反射机制来调用这些方法;

getBeanInfo(Student.class):包含父类Object的信息
在这里插入图片描述
getBeanInfo(Student.class,Object.class):不包含父类Object的信息
在这里插入图片描述

2.5.BeanUtils的使用(主要进行属性的拷备)

引入:有人对JavaBean做了一整套的解决实施方案,有些时候需要用到属性的拷贝,而且很多框架都是在用这个属性的拷贝的功能。需要导入对应的jar包:
commons-beanutils-1.9.2.jar
commons-logging-1.2.jar
commons-collections-3.1.jar
用法1:同一个类之间的属性拷贝:
在这里插入图片描述
用法2:不同类之间属性拷贝
在这里插入图片描述
用法3:把Map里面的元素拷贝到对象中去(但是不能把对象的元素拷贝到map)
在这里插入图片描述

3.EL表达式

3.1.什么是EL表达式

EL就是一种表达式语言:可以获取四大作用域中的共享数据:
pageContext
request
session
application
注意:el表达式获取作用域中的属性要依靠JavaBean的可读属性即需要有getter方法,否则无法获取;

3.2.EL表达式的使用

1.搭建登录环境:
在这里插入图片描述
以前的写法:
在这里插入图片描述
以前我们用jsp的表达式从作用域里拿到值,并且判断为空,需要这么写:
在这里插入图片描述
现在使用EL表达式的写法:${error}
语法:${key} :会到依次从四个作用域里面去找到key对应的value,如果key不存在,显示为空字符串,而不会显示null值(体验度好);
(1)登录失败取值:
在这里插入图片描述
(2)登录成功取值:
在这里插入图片描述

3.3.EL表达式访问四大作用域的绑定值

搭建环境:分别从各大作用域里面取值
在这里插入图片描述
EL取值的顺序:在作用域范围我们的名字取成一样了,怎么去找到特定的一个作用域中的值呢??
在这里插入图片描述
结论:它查询找的顺序 -> 从小至大,先取小的范围的值,小的没有,在取到大的范围的值:
pageContext --> request --> session --> application
以后我们常用的是request和session,有时候如果没有一个规范的时候,我们取的名字会重复:
第一种解决方案:前面添加一个前缀,确定到哪个作用域拿,比如下面:
${pageScope.msg}
${requstScope.msg}
${sessionScope.msg}
${applicationScope.msg}
例子:
在这里插入图片描述
第二种解决方案:名字规范比如:XXX_IN_SESSION

3.4.EL表达式访问JavaBean中的属性

方式一:${对象名.属性名} – 常用
方式二:${对象名["属性名"]} – 一般在属性名有特殊字符时才使用
注意:
1.对象名可以从四大作用中获取;
2.对象名写错显示空字符串,属性名写错要报错;

3.5.EL其他特性
1.EL算术运算符
	(1)${1+2} ${2-1} ${2*3} ${16/5}
2.EL关系运算符
	(1)${16>5}		或	${16 gt 5}
	(2)${16<5}		或	${16 lt 5}
	(3)${16>=5}		或	${16 ge 5}
	(4)${16<=5}		或	${16 le 5}
	(5)${1==2}		或	${1 eq 2}
	(6)${2!=1}		或 	${2 ne 1}
3.EL逻辑运算符
	(1)${true && true}:结果 true
	(2)${true and true}:结果true
	(3)${true || false} ${true or false}:结果 true
	(4)${!true} 或 ${not true}:结果false
4.EL其他运算符
	(1)${empty param.name} :如果param.name 为空返回true否则false
5.EL三目运算符
	(1)${A?B:C},比如:${user.sex?"男":"女"}

在这里插入图片描述

3.6.EL注意事项
3.6.1.注意一

特殊的写法:session.setAttribute(“KEY.IN.SESSION”, “你是session”)
错误写法:${sessionScope.KEY.IN.SESSION}
代码如下:
在这里插入图片描述

正确写法:${sessionScope[“KEY.IN.SESSION”]}
这样才拿得到值:
在这里插入图片描述

3.6.2.注意二

${pageContext.request.contextPath} :拿到上下文路径,页面上的href,src等属性可以使用这种方式制定绝对路径;
比如下面的代码:
在这里插入图片描述

4.JSTL

引入:页面上的Java代码,对于前端开发人员无疑是一种累赘,而且大量的java代码也会破坏页面的整体效果。所以为了将页面中Java代码替换掉,可以使用JSTL帮助我们我们去消除Java代码,那么以后将不会再页面中出现:<% %>、<%! %>、<%= %>

4.1.JSTL是什么

JSTL(JavaServer Pages Standard Tag Library):JSP标准标签库,标签库由标签库和EL表达式语言两个部分组成,用来消除JAVA代码:
在这里插入图片描述

上面的代码就可以使用<c:if>标签代替,但是这个标签不能随便写,Java已经给我统一一套标签这个标签叫JSTL;
所以要使用JSTL,必须使用标签,所以也必须导入Java提供好的标签库;

4.2.怎么使用JSTL标签库

第一步:导入相关的jar包
在这里插入图片描述
这里面找到JSTL的jar包
servlet-api.jar
jstl.jar
standard.jar
el-api.jar
jsp-api.jar
第二步:引用JSTL标签库,标签库介绍:
在这里插入图片描述
我们学习的是core标签库:需在进行导入:
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>

4.3.JSTL常用标签
4.3.1.if标签(判断)

在这里插入图片描述

4.3.2.foreach标签(循环)

Java代码:
c在这里插入图片描述
在这里插入图片描述

前台页面展示jstl.jsp:
在这里插入图片描述

items:要循环的集合或数组,必须通过el表达式获取作用域中的数据;
var:用于接收集合中的每一个对象;
varStatus:当前循环的状态 (s 它是个javabean,里面有属性 index(循环索引,从0开始),count(计数,从1开始))
begin:表示从那里开始展示,从0开始;
end:表示从那里结束展示;
页面结果:
在这里插入图片描述

4.3.3.choose标签(选择 - 了解)

在这里插入图片描述

5.MVC

5.1.Model1模型

JSP + JavaBean开发也称作JSP模式:以JSP为中心的设计模型
优点:架构简单,比较适合小型项目开发
缺点:JSP 职责不单一,职责过重,不便于维护,不适合团队开发
在这里插入图片描述

5.2.Model2模型

Model2就是MVC的一种实现:JSP + Servlet + JavaBean
优点:职责清晰,适合团队开发,好维护,较适合于大型项目架构
缺点:分层较多,不适合小型项目开发

5.3.什么是MVC
  1. MVC是程序设计的一种思想,与三层架构并没有直接的联系。全名是Model View Controller
    M:业务模型Model: User类—User表
    V:页面视图View: 视图展示给我们看的JSP
    C:控制器Controller: 控制器Servelt

  2. 在MVC 模式中,Web 用户向服务器提交的所有请求都由控制器接管。接受到请求之后,控制器负责决定应该调用哪个模型来进行处理或直接跳转页面;
    (1)可能直接跳转到视图;
    (2)也有可能调用模型根据用户请求进行相应的业务逻辑处理,并返回数据。最后控制器跳转到相应的视图jsp页面并将数据呈现给用户;
    (3)可能跳转到其他的Servlet

  3. MVC职责
    (1)控制器C:整个过程中,控制器即要与前端界面交互,也要与后台Java代码(Model)进行交互,起到核心控制作用。
    (2)模型M:后台Java代码,包括业务代码、持久化层代码、实体Model/domain等
    (3)视图V:页面,只显示内容
    在这里插入图片描述
    注意:Model是不能直接与视图交互的

5.4.三层架构和MVC的区别

在这里插入图片描述

  1. 三层架构和MVC并没有直接的联系,MVC是一种设计模式,而三层架构是一种软件架构。目的都是解耦,提高代码复用,适用于团队开发;
    (1)表现层(UI):Servlet+JSP通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得;
    (2)业务逻辑层(BLL):Service针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理;
    (3)数据访问层(DAL):Dao该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等;
    在这里插入图片描述
    MVC
M 	model		模型 	 我的的实体类--对应数据库的表  和数据交互
V  	view  		视图    	负责页面的展示  jsp
C  controller  控制器   			servlet

三层架构(推荐)

   Ui            表现层    jsp +controller(servlet) 等于 mvc中的 VC
   业务逻辑层(BLL)  主要用来处理业务逻辑的  等于mvc 中的model的部分功能
   数据访问层(DAL)  dao  主要负责和数据库交互  (jdbc)
        Dao 
              Domain  这个是实体类--对应数据库
              DAO  这里里面写接口
                |---impl  接口实现
     业务逻辑层 service
         Service     接口 这是专门负责处理java的业务的。(判断)  service要调用dao 层
             |
             |------impl   接口的实现
     UI   controller  接受前台的请求   controller  调用service
        我们现在一般用servlet来接收请求  

6.课程总结

6.1.重点

1.EL表达式访问作用域中绑定值;
2.EL表达式获取Bean属性值;
3.JSTL标签的使用步骤;
4.JSTL标签的使用:c:if、c:foreach
5.什么是MVC,有什么作用;

6.2.难点

1.c:foreach的使用;
2.对MVC和三层架构的理解;

6.3.如何掌握

1.课上认真听课;
2.完成课后练习;
3.抓住课程重点;

6.4.排错技巧

1.通过异常和错误找出问题,分析问题,解决问题;
2.注意el表达式获取要根据后台的getter方法;

7.常见问题

8.课后练习

1.课堂代码1-2遍;

9.面试题

1.什么是MVC?各部分职责是什么? (预计5分钟完成)
2.JDBC是什么?JDBC编程步骤? (预计10分钟完成)

10.扩展知识或者课外阅读推荐(可选)

10.1.扩展知识

扩展标签:frameset

<html>
	<frameset rows="20%,80%">
		<!-- 头部页面 -->
		<frame src="/xxx/top.jsp">
		<!-- 中间区域 -->
		<frameset cols="25%,75%">
		     <frame src="/xxx/menu.jsp">
		     <frame src="" name="frame_main">
		</frameset>
	</frameset>
</html>

注意:

1.<frameset></frameset>和<body></body>不能一起使用,即不能出现在同一个html页面中
2.该标签在H5中不推荐使用,如果用html4.01,可以使用以下声明,消除警告线:
<!DOCTYPE   HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"   "http://www.w3.org/TR/html4/frameset.dtd">
10.2.课外阅读
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值