javaweb实训第四天上午——员工管理系统-JavaBean&EL&JSTL&MVC思想

Posted dearQiHao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaweb实训第四天上午——员工管理系统-JavaBean&EL&JSTL&MVC思想相关的知识,希望对你有一定的参考价值。

1.课程介绍

  1. 项目需求分析; (了解)
  2. JavaBean; (掌握)
  3. El表达式; (掌握)
  4. JSTL标签; (掌握)
  5. MVC思想; (掌握)

2.项目需求分析

1.在前面我们已经学习了javaWeb的一些基础的知识了,从今天开始我们会花两天的时间通过javaWeb的知识做一个小型的项目;
2.在开发直接我们需要获取数据来展示,所以我们还需要掌握javaBean、El、JSTL等知识点,并且我们项目需要使用MVC开发模式,所以今天我们先把这些知识搞定,明天才来真正做这个小型项目;

3.JavaBean

3.1.什么是JavaBean

1.JavaBean是一种JAVA语言写成的可重用组件。可重复使用,减少代码冗余,方便维护;
2.简单一点:JavaBean是一种特殊的类,或者说满足一定规范的类;

3.2.JavaBean的规范

我们开发一个JavaBean,需要满足一定的规范:
必须有包; – 编程规范/良好的编程习惯
必须是具体的和公共的; – 访问权限最大化,非抽象的
必须有公有无参构造; – 方便框架或底层通过反射创建对象
必须有相应公有的setter、getter方法; – 方便设置和获取属性/el表达式
建议对象属性私有化; – 控制直接操作对象属性
建议对象属性使用包装类; – 控制直接操作对象属性

3.3.Bean属性与对象属性

1.Bean属性 == JavaBean属性:getter和setter方法上的属性,其中getter方法上的属性称之为可读属性,setter方法上面的属性称之为可写属性;
2.对象属性 == 字段,即实例变量;
【例子】
在这里插入图片描述

3.一般情况下bean属行和对象属性拥有相同的名字,当然也可以不一样,甚至没有对象属性;
4.我们接下来要学得el表达式就是使用的getter方法上的Bean属性获取值的;

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

引入:有人对JavaBean做了一整套的解决实施方案,有些时候需要用到属性的拷贝,而且很多框架都是在用这个属性的拷贝的功能。需要导入对应的jar包:
commons-beanutils-1.9.2.jar
commons-logging-1.2.jar
commons-collections-3.1.jar

用法1:同一个类之间的属性拷贝:
在这里插入图片描述

用法2:不同类之间属性拷贝
在这里插入图片描述

用法3:把Map里面的元素拷贝到对象中去(但是不能把对象的元素拷贝到map)
在这里插入图片描述

4.EL表达式

4.1.什么是EL表达式

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

4.2.EL表达式的使用

1.搭建登录环境:
在这里插入图片描述

以前的写法:
在这里插入图片描述

以前我们用jsp的表达式从作用域里拿到值,并且判断为空,需要这么写:
在这里插入图片描述

现在使用EL表达式的写法: e r r o r 语 法 : {error} 语法: error{key} :会到依次从四个作用域里面去找到key对应的value,如果key不存在,显示为空字符串,而不会显示null值(体验度好);
(1)登录失败取值:
在这里插入图片描述

(2)登录成功取值:
在这里插入图片描述

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

搭建环境:分别从各大作用域里面取值
在这里插入图片描述

EL取值的顺序:在作用域范围我们的名字取成一样了,怎么去找到特定的一个作用域中的值呢??
在这里插入图片描述

结论:它查询找的顺序 -> 从小至大,先取小的范围的值,小的没有,在取到大的范围的值:
pageContext --> request --> session --> application
以后我们常用的是request和session,有时候如果没有一个规范的时候,我们取的名字会重复:
第一种解决方案:前面添加一个前缀,确定到哪个作用域拿,比如下面:
${pageScope.msg}
${requstScope.msg}
${sessionScope.msg}
${applicationScope.msg}

例子:
在这里插入图片描述

第二种解决方案:名字规范比如:XXX_IN_SESSION

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

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

4.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?"男":"女"}

在这里插入图片描述

4.6.EL注意事项

4.6.1.注意一

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

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

4.6.2.注意二

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

5.JSTL

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

5.1.JSTL是什么

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

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

5.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” %>

5.3.JSTL常用标签

5.3.1.if标签(判断)

在这里插入图片描述

5.3.2.foreach标签(循环)

Java代码:

在这里插入图片描述
在这里插入图片描述

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

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

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

在这里插入图片描述

6.MVC

6.1.Model1模型

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

6.2.Model2模型

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

6.3.什么是MVC

1.MVC是程序设计的一种思想,与三层架构并没有直接的联系。全名是Model View Controller
  M:业务模型Model javaBean
  V:页面视图View jsp
  C:控制器Controller
2.在MVC 模式中,Web 用户向服务器提交的所有请求都由控制器接管。接受到请求之后,控制器负责决定应该调用哪个模型来进行处理或直接跳转页面;
  (1)可能直接跳转到视图;
  (2)也有可能调用模型根据用户请求进行相应的业务逻辑处理,并返回数据。最后控制器跳转到相应的视图并将数据呈现给用户;
3.MVC职责
  (1)控制器C:整个过程中,控制器即要与前端界面交互,也要与后台Java代码(Model)进行交互,起到核心控制作用。
  (2)模型M:后台Java代码,包括业务代码、持久化层代码、实体Model/domain等
  (3)视图V:页面,只显示内容

注意:Model是不能直接与视图交互的

6.4.三层架构和MVC的区别

1.三层架构和MVC并没有直接的联系,MVC是一种设计模式,而三层架构是一种软件架构。目的都是解耦,提高代码复用,适用于团队开发;
  (1)表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得;
  (2)业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理;
  (3)数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等;

7.课程总结

7.1.重点

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

7.2.难点

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

7.3.如何掌握

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

7.4.排错技巧

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

8.常见问题

9.课后练习

1.课堂代码1-2遍;

10.面试题

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

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

11.1.扩展知识

11.2.课外阅读

以上是关于javaweb实训第四天上午——员工管理系统-JavaBean&EL&JSTL&MVC思想的主要内容,如果未能解决你的问题,请参考以下文章

javaweb实训第四天上午——MySQL基础

javaweb实训第四天下午——员工管理系统-JSP&Servlet&JDBC综合练习-CRUD

javaweb实训第四天下午——JDBC深入理解

javaweb实训第二天上午——jQuery笔记

javaweb实训第二天上午——jQuery笔记

javaweb实训第三天上午——Servlet