简介
概念:可以运行在服务器端的动态显示页面技术
作用:负责动态数据展示,替代servlet中view的servlet程序
书写:在HTML标签中,个别嵌套java代码
JSP脚本元素
可以书写Java代码标签
表达式脚本
1.作用:运行java代码,并产生结果 将结果显示给浏览器
2.语法给是:<%= java的表达式%>
3.注意事项:不能再java表达式结尾写 ;
声明脚本
1.作用: 声明变量(相当于view的servlet的属性),定义函数
2.语法格式: < %! 代码%>
普通脚本
1.作用: 书写并运行流程控制普通java代码
2.语法格式: <% 普通java代码 %>
3.注意问题: JSP中java脚本标签不能嵌套
JSP执行原理
浏览器-->ABC.jsp---->tomcat将jsp翻译成servlet ABC.java ----(编译)----ABC.class---调用service方法
JSP指令元素
page页面指令 语法: <%@ 指令名 属性名=‘值’%> <%@page 属性名=‘值’%> 常用指令属性: pageEncoding:tomcat读取jsp翻译成servlet时,使用字符流编码 import:导包 isErrorPage:boolean类型,是否为错误页面(true为错误页面,内置java对象exception) erroPage:指定错误页面(指定错误页面的rul-pattern) contentType:设置浏览器解析内容响应类型 session:boolean类型(true 饿汉式 相当于req.getSession(); falst 懒汉式 相当于没有) 包含指令 语法: <%@include file="被包含文件的url-pattern"%> 作用:复用部分jsp代码 原理: 源代码包含(静态包含)。存在java变量冲突问题
动作指令 语法: <jsp:动作名称 属性名=“属性值”/> <jsp:include page="被包含的jsp的url-pattern“/> 作用:复用jsp的效果 原理:动态包含
JSP内置对象(9个)
- 概念: 可以直接在java脚本中使用的对象(不需要创建和声明)
- 原理:service方法的局部变量
- 注意:内置对象只能在表达式脚本和普通脚本中使用
常见内置对象
- 1.exception:只能在isErrorPage=‘true‘
- 2.request:代表请求对象,service方法的形参
- 3.session:代表HttpSession
- 4.application:servletContext对象
- 5.response:代表响应对象response
- 6.page: this 当前jsp翻译后的servlet的对象
- 7.out:JspWriter(相当于PrintWriter),面向浏览器的输出流对象
- 8.config:相当于ServletConfig 配置常量信息 init加载时
- 9.PageContext(重要):
作用域:当前JSP页面内的生命周期 存:pageContext.setAttribute("name",值); 取:pageContext.getAttribute("name");
管理4个作用域: 存值:
pageContext.setAttribute(String 名字,Object 值,int); int参数: PageContext.PAGE_SCOPE;将命名属性存入PageContext作用域 PageContext.REQUEST_SCOPE;存入request作用域 PageContext.SESSION_SCOPE;存入session作用域 PageContext.APPLICATION_SCOPE;存入application作用域 取值:
pageContext.getAttribute(String 名字,int 作用域常量值);
管理其他8个内置对象 动态获得项目名: req.getContextPath(); 借助于pageContext动态获得项目名 pageContext.getRequest().getContextPath();
EL表达式
- 作用:执行表达式,并且将表达式结果,响应输出浏览器
- 语法:${el 表达式}
获得作用域中的值
EL内置对象:
获得PageContext作用域: ${pageScope.命名属性的name}
获得request作用域:${requestScope.命名属性的name}
获得session作用域:${sessionScope.命名属性的name}
获得application作用域:${application.命名属性的name}
访问对象的属性
语法:${对象.属性名}
${对象.属性名.属性的属性名}
原理(重点):${对象.get属性的方法名取消get,首字母小写}
el内置对象:pageContext
动态获得项目名
方法:pageContext.getRequest().getContextPath();
EL:${pageContext.request.contextPath}
获得请求参数
请求参数:浏览器发送servlet的请求数据(超链接、form提交、地址栏)
servlet接收:req.getParameter("name");
JSP: ${param.请求参数名字}
访问list和map集合
EL访问List集合
访问list集合中i下标的元素:${list集合[i]} //相当于list.get(i)
EL访问Map集合
根据map的key获得对应的值
要求:key必须是数字或者字符串类型
语法:${map.key} key不能为数字
${map["key"]} 通用
访问cookie中值
${cookie.cookie的name.value}//得到对应name的cookie对象
JSTL标签库
第三方提供的标签库
语法:<前缀:if 属性名=‘值‘></前缀:标签名>
使用:
1.导入jstl标签库jar
2.在jsp中引入标签库
<%@taglib uri="****" prefix =‘ c 前缀名‘%>
3.使用标签库
<c: 标签名 属性名 = ‘值‘></c:标签名>
常见的jstl标签
1.单条件判断
<c:if test = "el表达式写条件">
条件成立后执行的代码
</c:if>
2.多条件分支
<c:choose>
<c:when test="条件1">条件1成立运行的代码</c:when>
<c:when test="条件2">条件2成立运行的代码</c:hwen>
<c:otherwise>所有条件都不成立,执行的代码</c:otherwise>
</c:choose>
3.循环遍历
List集合遍历:
<c:forEach var="p" items="被遍历的list集合">
被循环执行的代码
获得当前遍历对象//将p自动存入pageContext作用域中
${p}
</c:forEach>
常用属性:
items:被遍历的集合
var:当前被遍历对象的名字
begin:起始下标
end:截止下标
step:步长
varStatus:描述下标和序号 varStatus=“**”
${**.count}//序号 从1开始的序号
${**.index}//下标 从0开始的下标
Map集合遍历:
<c:forEach items="被遍历的map集合" var = "en">
${en} //Map.Entry 包含key-value
en.key
en.value
</c:forEach>
4.c:set标签
作用:可以向作用域中存入数据(命名属性:name value)
本质:pageContext.setAttribute("name",value,int作用域);
语法:<C:set var="name" value="值" scope="那个作用域"></c:set>
scope可选值: page request session application
<c:set var="命名属性的name" scope="作用域">
值
</c:set>
5.c:remove标签
作用:从作用域中删除某个值
语法:<c:remove var="命名属性的name" scope="那个作用域">
6.c:url标签
作用:1.自动追加项目名
2.在cookie被禁用的情况下,自动url重写
语法:
<c:url value="url-pattern路径"></c:url>
7.日期格式化显示标签
需要先导入fmt标签路径
语法:
<fmt:formatDate value="" pattern=""/>
value:需要格式化显示的日期
pattern:格式