title: JSP+EL+JSTL
JSP
jsp执行原理
JSP页面指令
-
language :值要写一个编程语言的名字(java,python…),默认值为java,指明该页面所使用的脚本的语言类型
-
session : 值 false/true,当用户访问该页面是否自动生成该用户对应的session
-
isELIgnored :值false/true, 该页面是否忽略el表达式,如果值为true,代表忽略el表示(不能使用)
-
import :和java中的import作用相同,导入包
<%@page import="java.util.Date" %> 在该jsp页面导入java.util.Date类 导入多个包 1. <%@page import="java.util.Date" %> <%@page import="com.baizhi.entity.User" %> <%@page import="com.baizhi.entity.User" %> <%@page import="com.baizhi.entity.User" %> <%@page import="com.baizhi.entity.User" %> 2. <%@page import="com.baizhi.entity.User,java.util.Date,....." %>
-
pageEncoding :设置jsp—>java时,所使用的编码集,通常使用UTF-8
-
contentType:设置java—》浏览器时所使用的编码集,通常使用UTF-8
-
isErrorPage :设置该页面用不用向客户端报告异常信息 。值为true,需要向客户端发送异常信息
-
errorPage :设置一旦该jsp报错,需要跳转到哪个页面
JSP内置对象
-
request:就是我们在serlvet中使用的request对象
-
session:就是serlvet中的session对象
-
application:就是serlvet中的ServletContext
-
response:就是serlvet中的response
-
out:标准输出流对象
-
page:相当于java中的this关键字,代指本jsp页面
-
exception:错误对象,其中保存了jsp页面的所有报错信息,只有在页面指令 isErrorPage=true时,才能使用
-
config (ServletConfig):servlet主配置对象
-
pageContext(最重要):
1.可以通过pageContext获取其他八个内置对象
pageContext.getRequest() ----->request内置对象 pageContext.getResponse() pageContext.getSession() pageContext.getServletContext ------->application ........
2.pageContext是一个作用域
request:一次请求
session:一次会话
serlvetContext:一次服务
pageContext:本页面之内
3.pageContext可以控制其他三个作用域
EL表达式
引言:目前,为了完成动态页面的展示,我们的做法是在JSP页面中嵌套java代码,这是我们不希望实现的效果,最终的实现效果应该是java与html标签分别写在不同的地方,不应该混在一起
为了实现这个效果,需要学习el表达式+jstl标签库
el表达式:展示数据
jstl:逻辑运算(循环,判断)
el表达式获取对象
${内容所在的作用域代称.对象的key} ----->整个对象 ${对象.属性名.属性的属性名.属性的属性名} ----->获取对象的属性 el执行原理 ${对象.属性名} el表达式中,第一个点前面的内容不变,之后的内容前面拼接get后面加上(), ${user.username} user.getUsername() 获取项目名 request.getContextPath(); el: ${pageContext.request.contextPath} --->动态获取项目名
el表达式获取list
获取指定下标的元素 ${list[下标]}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dfDjx2Ys-1603802834266)(C:\Users\王鹏\Desktop\Blog\第二阶段笔记\JSP+EL+JSTL\image-20200921111242090.png)]
el表达式获取map
获取对应的键的元素值 ${map.key} ---key不能为数字或者字符串类型的数字 ${map["key"]} --->如果key为数字类型,那么必须是long类型
el表达式的运算
弱类型语言
数学运算
包括: + - * / %
由于el是弱类型语言
${8/3} ----->2.666666666666666666666
逻辑运算
包括:> < >= <= != == & |
由于el是弱类型语言
${1=="1"} ------->true
补充
el获取请求参数
请求参数:页面通过form表单,a标签,直接在url中拼接方式,向另一个serlvet发送的参数
${param.key}
JSTL表达式(c标签)
单条件判断
需求:person.sex1 页面显示男 person.sex0 页面显示女
if(person.sex==1){ 男 }else if(person.sex==0){ 女 }
1.导入jar 2.在页面引入jstl标签 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3. <c:if test="${判断条件 }"> 如果条件成立,展示的内容 </c:if>
多条件判断
需求:小于20,青少年 大于20小于40,青年 大于40小于60,中年 大于60老年
if(age<20){ 青少年 }else if(age<40){ 青年 }else if(age<60){ 中年 }else{ 老年 }
<c:choose> <c:when test="${判断条件1}"> 当条件一成立时,展示的内容 </c:when> <c:when test="${判断条件2}"> 当条件一不成立,条件二成立时,展示的内容 </c:when> 。。。。。。 <c:otherwise>所有条件都不成立时,展示的内容</c:otherwise> </c:choose>
循环展示
需求;遍历list
for(User u : list){ u.getName()----->获取名字 u.getId()------》获取主键 }
<c:forEach var="每次循环出来的对象的临时名(u)" items="${被遍历的集合}"> 获取整个被循环的------ ${u} 获取对象属性 ------ ${u.属性名} </c:forEach>
map的循环
<c:forEach var="每次被遍历出的Entry起的临时名(p)" items="${被遍历的map}"> ${p}------>键值对 ${p.value}-->值 ${p.key}---->键 </c:forEach>
循环的补充
<!-- begin:循环开始的元素下标 end:循环结束的元素下标 step:步长 varStatus:状态对象 index:当前元素下标 count:当前循环次数 first:判断是否为第一次循环 last:判断是否为最后一次循环 -->
MVC开发思想
M:模型
- 作用:在项目开发过程中,为功能的实现提供组件
- entity,dao,serivce
C:控制器
- 作用:控制箱目的跳转流程
- servlet
V:视图
- 作用:动态展示信息,搜集用户输入的数据
rStatus:状态对象
index:当前元素下标 count:当前循环次数 first:判断是否为第一次循环 last:判断是否为最后一次循环
–>
MVC开发思想
M:模型
- 作用:在项目开发过程中,为功能的实现提供组件
- entity,dao,serivce
C:控制器
- 作用:控制箱目的跳转流程
- servlet
V:视图
- 作用:动态展示信息,搜集用户输入的数据
- 包括:JSP+EL+JSTL