05.jsp,EL表达式,jstl和mvc开发模式
[TOC]
1. JSP
即,java server page,java服务器端页面。
一个特殊的html页面,里面既可以包含html代码,也可以写java代码。
简化书写:
jsp本质是一个servlet.
1.1 jsp注解
1 | 1.html注释: |
1.2 jsp脚本语法
1 | java代码直接放到service方法中的 |
1.3 jsp九大内置对象
jsp页面中的不需要创建,就可以直接使用的对象。
一共有九个!
变量名 | 类型名 | 作用 |
---|---|---|
pageContext | PageContext | ==当前页面内部共享数据==,通过当前对象可以获取其他的8个内置对象。 |
request | HttpServletRequest | 一次请求创建一个request对象,==在一次请求中共享数据== |
session | HttpSession | ==一次会话中多个请求共享数据== |
application | ServletContext | 全局共享数据的对象 |
response | HttpServletResponse | 响应的对象 |
exception | Throwable | 异常对象 |
config | ServletConfig | 获取servlet配置信息的 |
out | JspWriter | 输出对象,数据输出到页面上 |
page | Object | this,指代的就是当前的servlet对象 |
response.getWriter()和jsp中out的区别:
tomcat服务器给客户端做出响应的时候,会先去找response缓存区的数据,然后在去找out缓存区的数据。
1.4 jsp指令
作用:用于配置jsp页面,导入资源文件
<%@指令名称 属性名=属性值 属性名1=属性值1 %>
page指令
1 | <!-- |
include指令
1 | include指令 |
taglib 导入资源指令
taglib 导入资源的指令
<%@ taglib uri="" prefix="c" %>
uri="http://java.sun.com/jsp/jstl/core"";
2. MVC演变过程
- 早期开发的时候用servlet来做动态页面响应,效率太低。
- jsp技术出现了,让动态页面写起来变得简洁了。在过度的过程中,jsp页面中不仅仅只有html的内容,还有大量的java代码,维护特别难,很难分工合作。
- java的web开发,借鉴了mvc的开发模式,让程序的设计变得更加的合理。
1 | graph TD; |
1.获取用户的输入
2.调用模型
3.将数据移交给视图进行展示==???????????????????????????????????????????????????????????????????????????????????/==
2.1 mvc优缺点
优点:
- 耦合度低,方便维护,分工协作。
- 代码的复用性变高。
缺点:
- 结构变得复杂了。
3.EL表达式
概念:JSP内置的Expression language 表达式语言。
作用:用来简化jsp页面中的java代码的编写。
语法结构:==${el表达式};==
3.1 EL表达式使用注意点
jsp默认支持el表达式,如果想要当前页面不支持el表达式,
- page指令中设置 ==isELIgnored=”true”==忽略当前页面中的所有的el表达式。
- ${el}:忽略当前这个el表示。
运算
- 数学运算符:+-
- 比较运算符:> < =
- 逻辑运算符:&& || ! and or not
- 空运算符:empty 判断字符串集合,数组的对象是否为null或者是否他们的长度为
JSP2.0开始,不让再使用Java脚本,而是使用EL表达式和动态标签来代替Java脚本。EL替代的是<%=… %>,也就是说EL只能做输出
3.2 EL表达式中的11个隐式对象
内置对象 | 作用 | 等效于 |
---|---|---|
pageScope | 获取pageContext域属性 | ==pageContext.getAttribute(“xxx”)== |
requestScope | 获取request域属性 | ==request.getAttribute(“xxx”)== |
sessionScope | 获取session域属性 | ==session.getAttribute(“xxx”)== |
applicationScope | 获取application域属性 | ==application.getAttribute(“xxx”)== |
param | 对应参数,它是一个Map,其中key是参数,value是参数值,适用于单值的参数 | ==request.getParameter(“xxx”)== |
paramValues | 对应参数,他是一个Map,其中key是参数,value是多个参数值,适用于多值的参数 | request.getParameterValues(“xxx”) |
header | 对应请求头,它是一个Map,其中key表示头名称,value是单个头值,适用于单值的请求头 | request.getHeader(“xxx”) |
headerValues | 对应请求头,它是一个Map,其中key表示头名称,value是多个头值,适用于多值的请求头 | request.getHeaders(“xxx”) |
initParam | 获取web.xml中 |
|
cookie | 用于获取cookie,Map<String,Cookie>,其中key是cookie的name,value是cookie对象, | ${cookie.JSESSIONID.value }就是获取sessionId |
pageContext | 可以获取JSP九大内置对象,相当于使用该对象调用getxxx()方法。 | pageContext.getRequest()可以写为==${pageContext.request)== |
4. jstl
java Server tag library jsp的标准标签库。
作用:简化和替换jsp页面上的java代码。
JSTL的表达式中,不能随意出现空格,否则会导致整个语句false;
4.1 使用步骤:
- 导入jstl的相关jar包。
- 引入标签库:taglib指令 <%@ taglib uri=”” prefix=”” %>
- 使用标签。
4.2 常用的jstl标签
if:
相当于java代码的if语句。
- 属性:test 必须有的属性,接收boolean类型的表达式。
- 一般情况下,test属性值会和el表达式混合使用。
2.注意:
c:if标签中没有else方法,如果想要使用else方法,可以重新在添加一个c:if语句。
chooses:
choose 相当于java中的switch声明。
使用when标签页做判断,相当于是case.使用otherwise标签做其他情况的声明:相当于 default;
forEach:
相当于java代码中的for语句
foreach语句:
- (遍历集合)
items:容器对象。 var:容器中遍历的每一个元素 varStatus:循环状态的对象。 index:索引号,集合从0开始 count:计数器:从1开始
- (遍历常量)
begin:开始值 end:结束的值 var:循环遍历到的每一个值 step:步长,由当前值到下一个值变化的量。 varStatus: index: var里面的值count:循环次数,计数器,从1开始。