05 Jsp_day2

Jsp笔记 第二天

一. 复习

在这里插入图片描述

二. 动作元素(包含,转发)

1. 包含动作 【重点】

1)语法: <jsp:include page=“被包含网页资源的网名” />
2)功能: 将其他网页资源的“输出结果”包含到当前jsp页面里 — 合并输出结果 , 也称为“动态包含”或者“编译 后包含”
3)作用:做复杂网页的显示 ( 可能是由多个jsp包含完成)

2. 转发动作 【了解】

1)语法: <jsp:forward page=“下一个资源的网名”/>

​ servlet — request.getRequestDispatcher(“网名”).forward(request,response);

​ 重定向 — <% response.sendRedirect("…") %>

2 ) 功能: 与servlet里的forward完全一致( forward动作一般发生在servlet Action程序中 )

在这里插入图片描述

三. 隐含对象(内置对象)

1. 概念

jsp页面里创建好,一直存在的,定义好名字的,可以直接使用的 对象

2. 九大隐含对象

1) request ---- HttpServletRequest ( servlet程序中使用过的request对象)
2) response ---- HttpServletResponse
3) session ---- HttpSession ( tomcat采用饿汉式为jsp创建session对象)
4) application ---- ServletContext
5) config ---- ServletConfig (关于一个servlet的描述信息,是application的一部分)
6) out ---- JspWriter(等价于servlet里使用过的PrintWriter)
7) page ---- this
8) exception ---- Exception (只有isErrorPage=true的jsp页面里有 )
9) pageContext ---- PageContext (jsp特有的,功能最强大的隐含对象)

​ 注意: 这些隐含对象只能在 表达式脚本 里 和 普通脚本里使用,不能在声明脚本里使用

3. 隐含对象的本质

隐含对象本质就是servlet程序service方法的局部变量,在当前页面代码翻译前,tomcat为service方法创建
和初始化了这些局部变量。(声明脚本代码不属于service方法,不能使用service方法的局部变量)

4. PageContext对象

1)是一个作用域,可以存放命名属性

​ 存: pageContext.setAttribute(“name”,value);

​ 取:Object value = pageContext.getAttribute(“name”);

​ 生命周期短,只在当前jsp页面中生效

​ 作用: 用来在jsp页面 与 嵌入的其他技术(EL JSTL) 之间做数据传递

2)管理其他三个作用域里的数据

在这里插入图片描述

3)可以获取其他八个隐含对象

​ getRequest() getSession() getApplication() getResponse() getOut() …

4) 可以 include 和 forward

四. EL技术

1. 干净的jsp页面(无脚本标签 — 尽量减少)

1)声明脚本 — 函数定义成普通java类 , 里面的变量线程不安全(不建议定义)
2)表达式脚本 ---- 输出java中的数据 (使用EL技术替换)
3) 普通脚本 ---- 用来定义一般的java代码(使用JSTL替换 )

2. EL技术使用前的准备

1)使用页面指令声明当前页面支持EL技术 <%@page isELIgnored=“false” %>
2)语法: ${ el代码 }
3) 功能: 计算表达式的值, 并且默认输出浏览器

3. 功能一 :做运算

​ ${ 1+1 } ${ 3>4 } <==> ${ 3 gt 4 } ${ empty xxxx } ${ !empty xxxx }

4. 功能2 : 可以访问请求参数并打印

语法 ---- 使用关键字param访问
${ param.请求参数名 } 《===》 <%= request.getParameter(“name”) %>

5. 功能3 : 可以访问作用域里的命名属性

1)基础语法 — 使用关键字 pageScope requestScope sessionScope applicationScope 访问
${ xxxScope.命名属性名 }
2) 特殊的写法: ${ 变量名 } — el认为变量是一个命名属性,el会去所有作用域里查找这个变量的value,按
照生命周期由短到长的顺序查找,找到第一个返回。 等价于 pageContext.findAttribute("…")

6. 功能4:可以访问对象的属性

1)前提: 如果获取的 ”命名属性“ 值是一个对象,可以使用el进一步访问对象的属性
2)语法: ${ 对象 . 属性名 }
3)建议: 在将对象存入作用域时,命名属性的名最好与 变量(对象名)保持一致
4)原理: el在执行时,会将给定的属性名首字母变大写,前面加get,去类里访问getXxx()
5)扩展: el访问的是类里的getXxx() , 根本不在乎是否有这个实例变量。
反之如果类里的功能函数不是以get开头,则el无法访问调用
6)特例: 在el技术里,只承认jsp页面中的pageContext隐含对象(其他八个不认识)

​ — 请使用el技术调用request对象中的getContextPath()

​ ${ pageContext.request.contextPath }

​ — 请使用el技术访问并打印当前client对应的session的id值

​ ${ pageContext.session.id }

在这里插入图片描述

五. JSTL — jsp标准标签库

1. 用户自定义标签

1)写程序 实现特定的接口
2) 写配置文件 xxx.tld (这是一种特殊的xml文件)
3) 发布使用

2. Jstl使用

1) apache组织定义的一组 ”用户自定义标签“
2)使用标签库需要引入相关当 jar包 和 配置文件
3)标签的构成: core(课堂使用) fmt sql …
4) 准备: 在jsp页面中明确导入核心(core)标签库

​ <%@taglib uri=" http://java.sun.com/jsp/jstl/core" prefix=“c” %>

3. 条件判断标签

 ~~~xml

<c:if test=“boolean值”> 标签体 </c:if>
如果test的值为true,则执行标签体;反之不执行。 这个标签没有对应的else
~~~

4. 循环标签

1)遍历集合(所有的集合 List Set Map )
     ~~~jsp

遍历List或者Set集合
<c:forEach var=“变量名” items=“${ 集合对象 }” varStatus=“循环状态变量”>
如果需要打印得到的数据,可以通过 ${ 变量名.属性名 }
</c:forEach>

注意: 在标签属性赋值的过程中,只有String,数字和boolean类型值可以直接通过字面值来赋值,其他类型的数
据必须先通过el获取值,然后再赋值

varStatus:循环状态变量,可以通过访问它的count属性,来做循环计数 ${ vs.count }
~~~

   遍历Map集合
   <c:forEach  var="变量名"  items="${Map集合对象}"  varStatus="">    --- 底层采用键值遍历
         如果需要打印获取到的数据,可以通过 ${ 变量名.key }   ${变量名.value }
   </c:forEach>

vs.count }
~~~

   遍历Map集合
   <c:forEach  var="变量名"  items="${Map集合对象}"  varStatus="">    --- 底层采用键值遍历
         如果需要打印获取到的数据,可以通过 ${ 变量名.key }   ${变量名.value }
   </c:forEach>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值