JSP指令和JSP标签 区分?
JSP 指令 Directive
JSP 标签 Action
jsp中六个动作标签
—– 与 JavaBean操作相关 明天学习
效果 等价于 request.getRequestDispatcher().include
效果 等价于 request.getRequestDispatcher().forward
标签 功能 等价于 <%@ include %>
原理:动态包含
语法:
被包含页面不需要完整html,只需要编写html片段
jsp:include 和 @include 区别
@include include指令, 静态包含,在jsp翻译为Servlet时,执行包含动作,包含结果是目标页面翻译Servlet源代码 ,翻译为一个Servlet一起执行
jsp include 标签,动态包含, 在index servlet执行时 完成包含动作,包含结果是目标jsp翻译Servlet生成 html页面结果,每个被包含jsp翻译单独Servlet进行执行
等价于 request.getRequestDispatcher(“/demo11/b.jsp”).forward(request,response);
上面写法用jsp传递一个参数,用jsp如果向传递参数,直接通过setAttribute
EL 表达式语言,来自民间 ,Servlet2.4 之后 EL 被纳入官方规范
功能:
1、EL 获得 JSP四个范围中保存数据 (访问JavaBean的属性)
2、EL 表达式支持运算
3、EL 内置 11个对象 — web开发常用对象
4、EL 调用 java的方法
EL是从javaee1.4版本才被纳入规范,javaee1.3 及以前版本,默认对EL不进行解析
* 如果想 javaee1.3 以及之前版本解析 EL —— 设置 page 属性 isELIgnored = false
1、使用EL 获得 jsp四个范围数据
使用EL指定查找四个范围数据
pageScope.属性名称
{requestScope.属性名称}
sessionScope.属性名称
{applicationScope.属性名}
如果不执定查找数据范围 ${属性名称} —- 调用pageContext.findAttribute 在四个范围依次查找
如果查找属性不存在,返回是一个 “” 空串,而不是null
获得数组、List、Map时 有些情况使用 [] 获得属性值
. 和 [] 有什么区别 ?
答案:. 和 [] 都可以用来取得EL 属性值,.可以实现功能 [] 都可以!
例如:
pageScope.user.name也可以写为
{pageScope.user[“name”]} (获得对象后,访问对象属性时才可以用 [] 取代.效果 )
[] 可以使用特殊标识信息,但是. 不可以
例如:
pageContext.setAttribute(“0”,”itcast”);
pageContext.setAttribute(“aa.bb”,”春生泰克”);
只能通过[] 进行访问 —– 注意:在使用[] 进行属性取值时,加”” , 不加”” 认为是一个变量
在使用EL进行取值时,如果含有特使字符属性,尽量使用[] , 否则都使用. 就可以了
pageContext这个是EL的隐含对象,获得当前工程路径
<%=request.getContextPath()%>
${pageContext.request.contextPath()}
param.name等价于request.getParameter(“name”);
{paramValues.hobby} 等价于 request.getParameterValues(“hobby”)
header.referer等价于request.getHeader(“referer”)
{initParam.name} 等价于 getServletContext().getInitParamter(“name”)
必须掌握cookie隐含对象写法
Cookie[] cookies = request.getCookies();
if(cookies==null){
out.println(“cookie不存在!”);
}else{
for(Cookie cookie : cookies){
if(cookie.getName().equals(“address”)){
out.println(cookie.getValue());
}
}
}
EL就是用来获取数据值,经常需要对取得数据值进行处理—-EL函数
步骤:
第一步:编写java类,提供static方法
第二步:编写tld文件,在tld文件中对函数进行定义描述
sun在JSTL提供了一套EL函数库,这套函数在导入jstl的jar包后,可以直接使用
1.导入jstl 的jar包
2.在jsp页面内,引入函数库名称空间
<%@ taglib uri=”http://java.sun.com/jsp/jstl/functions” prefix=”fn”%>
3.sun提供的EL函数库主要对字符串进行操作 提供了16个函数
语法:${fn:toUpperCase(sadaSDSD)}
jstl1.0 时 EL还没有纳入规范,所有1.0标签默认不支持EL 的
JSTL核心标签库
12个核心标签库标签
1、c:out 用于将内容输出到页面上 ——- 输出EL值、提供默认值、HTML转义输出功能
2、c:set 用于设置一个变量或者属性 —- 向四个数据范围保存一个数据,对四个数据范围一个已经存在对象修改其属性值
3、c:remove 用于移除四个数据范围的数据
4、c:catch 相当于try – catch代码块 —– 捕获异常,将异常对象保存page指定属性中
5、c:if 取代页面if 条件判断
6、c:choose c:when c:otherwise 实现if – else if – else效果 — 实现 switch 效果
7、c:forEach 实现 foreach循环效果 —– 遍历数组、List、Map、控制指定循环次数求和、在特殊次数进行操作
8、c:forTokens 完成字符串切割
9、c:param 不能单独使用,通常与url相关标签一起使用 ,与c:url一起使用完成中文编码
10、c:import 导入目标页面,将目标页面内容保存起来,再进行使用
11、c:url 完成URL重写 (客户端禁用cookie ,URL重写拼接jSessionId),结合param对中文进行url编码
12 c:redirect 标签用于实现请求重定向
常用:c:set c:if c:forEach c:url进行中文url编码 c:redirect
总结:
1、JSP 和Servlet关系
2、JSP运行原理
3、JSP 脚本元素三种 <%! %> <%=%> <% %>
4、JSP三种注释
5、page指令 contentType和pageEncoding区别
6、错误友好页面 web.xml 配置
7、<%@include %> 与 原理区别
8、转发 重定向
9、EL 获取数据 . []用法
10、empty not 使用
11、
pageContext.request.contextPath取得工程名/day08−−−−−
{cookie.name.value } 快速获得cookie值
12、EL 使用 JSTL提供EL函数库
13、JSTL 区分1.0 和 1.1
14、常用core标签
c:set 、c:if 、c:forEach 、c:url和c:param编码、 c:redirect
标签用于输出一段文本内容到pageContext对象当前保存的out 对象中
<%
request.setAttribute(“name”, “nihao”);
%>
有默认值
如果 el没有取到,就会打印默认值
c:out 支持HTML转译
《c:out value=“《a href=‘xxx’》link《/a》”》
c:set 可以将数据保存到jsp四个数据范围
– c:set 可以向一个对象属性赋值,只能改变一个已经存在对象属性,不能将一个对象存入四个范围
<%
Person p = new Person();
p.setName(“zhangsan”);
pageContext.setAttribute(“p”,p);
%>
p.name<request.setAttribute(“name”,”itcast”);
{name }
<%–等价于 request.removeAttribute(“name”)–%>
name被移除后 : ${name }
<%
try{
int d=1/0;
}catch(Exception e) {
out.print(“异常被捕获了!”);
}
%>
– 异常被捕获,将异常对象保存 page范围 e2属性里 –>
<%
int d2 = 1/0;
%>
- 通过e2 异常对象 获得异常信息 –>
异常信息:${e2.message }
<%
int m = 10;
if(m >8){
out.print(“m的值大于8”);
}else{
out.print(“m的值不大于8”);
}
%>
– 将test条件结果 保存指定scope中var变量里 –>
8}” var=”result” scope=”page”>
n的值大于8