MVC的概念
MVC不是一种应用,而是一种开发理念
许多大公司都不允许JSP文件中存在JS代码,和Java代码(也就是JSP的:<% %>),因为这将使得前端和后端都合为一体,开发虽然方便,但是修改的话将会很难处理,阅读性会很差.
这不仅仅是阅读性的问题,当前端工作人员处理前端页面时,也会非常困扰,因为他们很可能仅仅只懂得前端代码
因此,催生出了MVC这种理念,前端页面可以允许少量的后端代码(EL表达式,以及引用JSTL标签资源库),但这些代码仅仅用于将后端发送的数据输出到前端显示
MVC:
- M:Model,模型。JavaBean * 完成具体的业务操作,如:查询数据库,封装对象
- V:View,视图。JSP * 展示数据
- C:Controller,控制器。Servlet * 获取用户的输入 * 调用模型 * 将数据交给视图进行展示
优缺点:
- 优点:
- 耦合性低,方便维护,可以利于分工协作
- 重用性高
- 缺点:
1. 使得项目架构变得复杂,对开发人员要求高
EL表达式的概念
EL表达式,就是MVC开发理念下催生的一种产物,它能够通过少量的代码,将后端传过来的数据输出到前端.
替换和简化jsp页面中java代码的编写
EL表达式的应用
应用须知
jsp页面默认支持el表达式的。
如果要忽略el表达式,有两种方案
方案一: 设置jsp中page指令中isELIgnored的属性,将值设置为’true’,则忽略当前jsp页面中所有的el表达式
方案二:在目标表达式添加斜杆’’ ${表达式} :则忽略当前单个的el表达式
EL表达式必须写在<body>
标签内
应用
定义格式:${EL表达式}
算数运算符
格式:${变量或常量 算符运算符号 变量或常量}
算数运算符号:
+ 加
- 减去
* 乘以
/ (或div) 除以
% (或mod) 取模
列如:
<h1>算术运算符</h1>
${5+2}<br>
${12/6}<br>
${10%2}<br>
比较运算符
格式:${变量或常量 逻辑运算符号 变量或常量}
逻辑运算符号:
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于
列如
<h1>比较运算符</h1>
${5>6}<br>
${10<20}<br>
逻辑运算符
格式:${变量或常量 逻辑运算符号 变量或常量}
逻辑运算符号:
&& (或and)并且
|| (或or) 或者
! (或not) 不为
列如:
<h1>逻辑运算符</h1>
${6>4 && 5<6}<br>
${5>6 || 6<5}<br>
空运算符 empty(重要)
用途:判断字符串、集合对象、数组的长度,和是否为空
条件:
需要先将要数据作为共享数据进行域共享,才能进行判断
方式一:判断字符串,集合对象,数组的对象是否为null(空),或者长度是否为0,如果是则输出true
,不是则输出false
格式:${empty 字符串的共享数据名/集合对象的共享数据名/数组的共享数据名}
列如:
${empty mapparam}
方式二:判断字符串、集合、数组对象是否不为null(空),并且长度大于0,是则输出false
,不是则输出true
格式:${not empty 字符串的共享数据名/集合对象的共享数据名/数组的共享数据名}
列如:
${not empty mapparam}
用EL从共享域获取数据
既然EL的目的主要是为了将后端传递的数据输出,那么它必须具备获取共享数据的功能(如request的共享数据,cookie的共享数据.
获取request共享数据
格式:${requestScope.共享数据名}
获取pageContext共享的数据
格式:${pageScope.共享数据名}
获取session共享的数据
格式:${sessionScope.共享数据名}
获取ServletContext共享的数据
格式:${applicationScope.共享数据名}
搜索符合条件的数据(重要)
输入一个你要获取的共享数据名,依照以上四种共享数据的范围大小顺序,判断每个共享域中是否有该’共享数据名’,如果有,则将其数据输出到页面
格式:${要获取的共享数据名}
获取对象中的数据
本质上,是调用对象中的get方法
条件:
一.本方法多用于信息对象中的数据(如uesr,person,phone),也就是说,必须具有get/set方法的对象
二.当然,首先是需要通过四种共享域的方式将信息对象作为共享数据共享,才能获取到
三.将对象中的get方法名,去掉’get’,然后将第一个字母变为小写
如:
原始get方法名:getName
--> 去掉’get’:Name
—> 变为小写:name
方式一(推荐):
格式:${域类型对应的获取方法.对象的共享数据名.对象中的get方法的简化名字}
列如:
${requestScope.person.name}
方式二
格式:${对象的共享数据名.对象中的get方法的简化名字}
列如:
${person.sex}
获取list集合中的数据
条件:
1.同样是需要先将list集合作为共享数据进行域共享,才能获取
方式一(推荐):
格式:${域类型对应的获取方法.list集合的共享数据名[索引值]}
列如:
${requestScope.listparam[0]}
方式二:
格式:${list集合的共享数据名[索引值]}
列如:
${listparam[0]}
获取Map集合中的数据
条件:
1.同样是需要先将MAP集合作为共享数据进行域共享,才能获取
方式一(推荐)
格式:${域类型对应的获取方法.map集合的共享数据名.map集合中的键名}
列如:
${requestScope.mapparam.呵呵}<br>
方式二
格式:${map集合的共享数据名.map集合中的键名}
列如:
${mapparam.是吧}<br>
获取隐式的内置对象(重要)
el表达式中有11个隐式对象
那么如何获取呢?通过pageContext获取
获取格式: ${pageContext.欲获取的内置对象名.其内置对象对应的方法}
列如:
${pageContext.request.contextPath}
推荐使用:${pageContext.request.contextPath}
动态地获取配置中的虚拟目录