第11天jsp el与jstl标签库.docx
《第11天jsp el与jstl标签库.docx》由会员分享,可在线阅读,更多相关《第11天jsp el与jstl标签库.docx(26页珍藏版)》请在冰豆网上搜索。
第11天jspel与jstl标签库
第11天jspel表达式与jstl标签库
【教学内容】
JSP
◆jsp回顾
◆jsp指令介绍
◆page指令
◆include与taglib指令
◆jsp内置对象介绍
◆pageContext对象
◆jsp动作标签
EL表达式
◆El表达式介绍与作用分析
◆El表达式获取数据
◆El表达式执行运算
◆El表达式内置对象
◆El函数使用
JSTL标签库
◆Jstl标签介绍
◆Jstl核心标签
【教学总结】
【第一阶段】
【学习目标】
【内容:
JSP】
jsp回顾
jsp作用
将内容的生成和显示进行分离
用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面,并使用JSP标识或者小脚本来生成页面上的动态内容
jsp原理
jsp注释
在jsp页面中可以使用三种注释
Ø可以使用html中注释
--html的注释-->
Ø可以对jsp脚本内容使用java注释
//单行注释/*多行注释*/
Ø可以使用jsp注释
<%--jsp注释--%>
jsp脚本
有三个基本的脚本元素,作用是使JAVA代码可以直接插入java代码
Ø声明标签
格式<%!
inta=1;%>
声明的变量在类的成员位置上
Ø脚本片断
格式<%inta=1;out.println(a);%>
内容会生成在_jspService()方法中
Ø脚本表达式
<%="hello"+a%>
它就相当于是out.println()将内容直接输出到页面中,注意表达式不能以分号结尾
jsp指令介绍
什么是指令及其作用
当我们创建一个jsp页面时,在页面第一行有一段代码如下:
<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%>
这个就是指令,对于指令它有以下作用
Ø用于指示JSP执行某些步骤
Ø用于指示JSP表现特定行为
指令格式
指令的格式<%@指令名attr1=””attr2=””%>
其中attr1和attr2表示指令中的属性,通常我们将JSP指令写在JSP文件的的最上方,但是这不是必须的。
Jsp中三种指令介绍
JSP中有三大指令,分别是以下三个:
●page
●include
●taglib
其中这三个指令中,page是最复杂的,后面我们会详细讲解;include指令表示静态包含,我们之前学习的请求包含属于动态包含;taglib指令是用来导入标签库,后面会学习一些标签库,在这里只做简单介绍。
page指令
重点属性
Øimport
作用是在jsp页面上导包操作.
这个属性可以有多个.
ØpageEncoding
该属性的作用是:
指定当前jsp页面的编码。
这个编码是给服务器看的,服务器需要知道当前页面的编码,否则服务器无法正确的把jsp翻译成Java文件。
ØcontentType
在jsp文件中有如下指令:
<%@pagelanguage="java"import="java.util.*"contentType="text/html;charset=ISO-8859-1"%>
其中contentType属性的作用等同于response.setContentType(“text/html;charset=ISO-8859-1”)的作用。
response的setContentType()方法这里我们就不再多说,当我们在jsp文件中提供了contentType属性,那么jsp对应的java文件中就会存在response.setContentType(“text/html;charset=ISO-8859-1”)这句代码。
contentType属性的默认值就是“text/html;charset=ISO-8859-1”,但是我们知道iso-8859-1并不支持中文,所以我们需要将charset的值修改为“utf-8“。
pageEncoding与contentType的区别与联系
pageEncoding与contentType都是page指令的属性,它们都是用来设置编码,有如下联系:
如果这两个属性只提供了其中一个,那么没有提供的那个属性的编码值就是提供的这个属性的编码值,例如:
在jsp页面中设置了contentType=”text/html;charset=utf-8”,那么没有设置的pageEncoding的值就为utf-8,反之亦然;
如果两个属性都没有提供,那么两者的默认编码就是ISO-8859-1。
根据对这两个属性的讲解,它们有如下区别:
pageEncoding是设置当前页面的编码,该编码是给服务器看的,可以让服务器正确的将jsp文件翻译成Java文件;
contentType有两个作用:
一是设置响应字符流的编码,二是设置Content-Type响应头,即通知浏览器使用什么编码方式解码响应信息。
了解属性
Ølanguage
代表在jsp脚本中可以写的语言只有一个值java
Øextends
它用于设置jsp翻译后的java类的父类.要求必须是HttpServlet或其子类.
ØSession
面上是否禁用session。
可取值为true/false如果值为false,在页面上不能使用session。
ØisELIgnored
用是否忽略el表达式.可取值为true/false如果值为true,那么页面上的el表达式就不会被解析.
ØautoFlush与buffer
用于设置jsp中out流的默认缓冲区大小以及是否自动刷新.
ØerrorPage
设置错误页面,当jsp中如果出现了异常,会自动跳转到指定的错误页面
ØisErrorPage
指示当前页面是一个错误页面,这时就可以使用一个内置对象exception,
通过这个内置对象就可以获取异常信息.
include与taglib指令
include指令
Øinclude指令作用
include指令的作用是在JSP页面中静态包含一个文件,同时由JSP解析包含的文件内容
Øinclude指令格式
<%@includefile=“filename”%>
Øinclude指令功能分析
包含的是目标文件的源码;包含过来,一起翻译
main.jsp
<%
Strings=“abc”;
%>
<%includefile=“part.jsp”%>
part.jsp
<%=s%>没有定义变量s
尽管part.jsp本身会有错误
但是运行main.jsp就可以正确引入part.jsp
taglib指令
Øinclude指令作用
作用:
是用于导入标签库.
Øinclude指令格式
<%@taglibprefix=""uri=""%>
uri标签文件的URI地址
prefix标签组的命名空间前缀
jsp内置对象介绍
jsp九个内置对象及其类型
requestHttpServletRequest
responseHttpServletResponse
sessionHttpSession
applicationServletContext
configServletConfig
pagethis(HttpServlet)
pageContextPageContext
exceptionThrowable(所有异常父类)
outJspWriter
jsp九个内置对象创建过程
我们可以创建一个demo1.jsp页面,启动服务器,在浏览器中访问demo1.jsp页面,在tomcat下的work目录中查找到它翻译后的demo1_jsp.java文件,在java文件中我们可以查找到每一个内置对象的创建。
request,response这两个对象是_jspService的参数
finaljavax.servlet.jsp.PageContextpageContext;
javax.servlet.http.HttpSessionsession=null;
finaljavax.servlet.ServletContextapplication;
finaljavax.servlet.ServletConfigconfig;
javax.servlet.jsp.JspWriterout=null;
finaljava.lang.Objectpage=this;
pageContext
pageContext=_jspxFactory.getPageContext(this,request,response,null,true,8192,true);
excepption
java.lang.Throwableexception=org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
if(exception!
=null){
response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
注意:
exception对象只有在jsp页面上设置了page指令的isErrorPage才会有exception对象。
jsp中四个域/对象
jsp有四个域对象,分别是:
●application:
域范围是整个应用;
●session:
域范围是整个会话,注意一个会话中只有一个用户,如果要统计站点的访问次数,使用的域是ServletContext,因为这个时候统计的是多个用户,而非一个用户;
●request:
域范围是整个请求链;
●pageContext:
域范围是一个jsp页面,在一个页面中存数据再取数据没有任何意义,所以这里所说的域指的是在当前jsp页面和当前jsp页面中使用的标签之间共享数据。
pageContext对象
pageContext对象作用
Ø获取其它内置对象
可以通过pageContext对象获取jsp中其他的内置对象.PageContext类中定义了如下八个方法:
getPage()、getRequest()、getResponse()、getServletConfig()、getServletContext()、getException()、getSession()等方法,其中getOut()放是在其父类中定义的,有了这些方法,pageContext对象自然能够获取其他八个内置对象了。
Ø操作四大作用域
首先来了解pageContext对象的域功能:
⏹voidsetAttribute(Stringname,Objectvalue)
⏹ObjectgetAttribute(Stringname);
⏹VoidremoveAttribute(Stringname);
可以利用pageContext对象向request、session、application域中存取数据。
⏹ObjectgetAttribute(Stringname,intscope):
该方法的第一个参数是域属性的名称,第二个参数指定是从那个域中取出域属性;在PageContext中已经定义了如下几个静态常量作为scope的可选值:
◆intAPPLICATION_SCOPE:
当参数为这个常量时,表示从application域中获取数据;
◆intPAGE_SCOPE:
当参数是这个常量时,表示从page域中获取数据;
◆intREQUEST_SCOPE:
当参数是这个常量时,表示从request域中获取数据;
◆intSESSION-SCOPE:
当参数是这个常量时,表示从session域中获取数据。
⏹voidsetAttribute(Stringname,Objectvalue,intscope):
该方法的第一个参数指的是域属性的名称,第二参数指的是域属性的值,第三个参数指定域属性保存的域,scope的取值同上;
⏹voidremoveAttribute(Stringname,intscope):
该方法的第一个参数指的是域属性的名称,第二个参数指的是将指定域属性从哪个域中移出,scope的取值同上;
有了以上三个方法,pageContext对象就可以操作其他三个域对象了,例如:
pageContext.setAttribute(“name”,”zhangsan”,PageContext.SESSION_SCOPE).
Ø便捷查询域中数据
PageContext类的父类中定义了如下方法:
ObjectfindAttribute(Stringname):
该方法是从jsp的四个域page、request、session、application依次查找指定名称的域属性,如果找到就停止,这说明如果这四个域中存在同名的属性,那么返回的数据是从page范围中获取的。
即表示谁的域范围越小,谁的优先级越高。
注意:
这里说的page范围和九大内置对象中的page对象不是一个意思,page范围可以理解为是pageContext对象的域范围,即一个jsp页面。
jsp动作标签
什么是标签及其作用
JSP标签也称之为JspAction(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。
Jsp中常用动作标签
Øjsp:
forward
forward>标签是用来做请求转发,它与RequestDispatcher接口的forward()方法一样,唯一不同的是它是在jsp页面中使用。
Øjsp:
include
include>标签的作用使用来包含其他jsp页面,之前学习的include指令属于静态包含,而include动作标签是动态包含,它和RequestDispatcher接口的include()方法一样,是运行级别的包含
Øjsp:
param
param>标签作为forward>标签和include>标签的子标签,用来给转发或包含的页面传递数据。
静态包含与动态包含的区别
include标签与inclue指令区别:
1.include指令是静态包含,包含文件中包含了被包含文件的内容.
include标签是动态包含,它包含的是被包含文件执行后的结果.
2.include指令不能带参数
include标签是可以带参数的
【笔试面试题】
Jsp中九个内置对象及其类型
Jsp中静态包含与动态包含的区别
【重点总结】
大家掌握jsp中九个内置对象,并理解jsp中四个域对象,掌握四个域对象的使用其常用API
【第二阶段】
【学习目标】
【内容:
EL表达式】
El表达式介绍与作用分析
什么是EL表达式
EL是ExpressionLanguage的缩写,它是jsp内置的表达式语言,从jsp2.0开始,就不让再使用java脚本,而是使用el表达式或动态标签来代替java脚本。
EL表达式的格式如下:
${表达式}
EL表达式代替的是java脚本中的<%=…%>,也就是说EL表达式也是向浏览器端输出数据。
例如${1+2}会向浏览器端输出3。
为什么使用EL表达式及其作用
为了使JSP写起来更加简单,更加安全,可以通过EL表达式来替换我们jsp页面上的脚本
EL主要作用:
◆获取数据:
EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域中检索java对象、获取数据。
(某个web域中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)
◆执行运算:
利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。
${user==null}
◆获取web开发常用对象
EL表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
◆调用Java方法
EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。
EL表达式使用时注意事项
EL表达式是JSP2.0(JavaEE1.4)规范中的一门技术。
因此,若想正确解析EL表达式,需使用支持Servlet2.4/JSP2.0技术的WEB服务器。
注意:
有些Tomcat服务器如不能使用EL表达式
(1)升级成tomcat6
(2)在JSP中加入<%@pageisELIgnored="false"%>
El表达式获取数据
EL表达式之域查找
1.page-----------------------------${pageScope.xxx}
2.request--------------------------${requestScope.xxx}
3.session--------------------------${sessionScope.xxx}
4.application----------------------${applicationScope.xxx}
通过el获取时,如果没有查找到,会返回"".
关于.与[]区别
[]与.在使用方式上是一样的.但是如果名称中包含了"."或"_"等特殊字符,就必须使用[]来获取.例如
request.setAttribute("login.message","登录失败");
${requestScope.login.message}
错误的
${requestScope["login.message"]}正确的
如果没有写范围,会默认从page,request,session.application依次查找
Øpage域查找
Ørequest域查找
Øsession域查找
Øapplication域查找
Ø全域查找
EL表达式获取复杂数据
Ø获取数组中数据
Ø获取List中数据
Ø获取Map中数据
EL表达式之javaBean导航
如果在域中保存的是javaBean对象,那么也可以使用EL表达式来访问javaBean的属性,因为EL表达式只做读操作,所以javaBean一定要为属性提供get方法,而对set方法没有要求。
使用EL表达式获取javaBean属性就是javaBean导航。
El表达式执行运算
常用运算符介绍
算术运算符
Ø关系运算符
Ø逻辑运算符
Ø三元运算符
关于运算符使用注意事项
ØEL表达式不可以嵌套
${a+${b}}这种是不允许的。
ØEL中的加号问题
EL表达式中加号两边必须是数字
empty运算符介绍
empty我们在开发中检查对象是否为null或“空”或判断容器size是否为0
El表达式内置对象
EL表达式11个内置对象介绍
EL表达式的11个内置对象。
11个内置对象如下所示:
●pageScope
●requestScope
●sessionScope
●applicationScope
●param;
●paramValues;
●header;
●headerValues;
●initParam;
●cookie;
●pageContext;
其中,pageScope,requestScope,sessionScope,applicationScope是域相关的内置对象,这里我们就不再多说。
这11个内置对象中,有10个内置对象的类型是Map类型,只有pageContext的类型不是Map类型,它的类型是PageContext。
关于pageContext内置对象介绍
EL表达式的11个内置对象中,有10个内置对象的类型是Map类型,只有pageContext的类型是PageContext。
它的使用类似于我们jsp的内置对象pageContext,.通过pageContext对象可以获取其他内置对象的任意的属性值。
常用操作:
${pageContext.request.contextPath}
关于请求参数相关内置对象介绍
请求参数相关的内置对象是:
●param:
该内置对象的类型是Map,可以用来获取值为单值的请求参数,其中key指的是请求参数的名称,value指的是请求参数的值,使用param获取请求参数与request.getParameter()方法一样。
●paramValues:
该内置对象的类型是Map,可以用来获取值为多值的请求参数,其中key是参数名,value是多个参数值组成的字符串数组。
注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。
这一点与使用request.getParameter()方法是不同的。
关于请求头相关内置对象介绍
与请求头相关的内置对象是:
●header:
该内置对象的类型是Map,用来获取值为单值的请求头信息,其中key代表的是请求头名称,value代表的是请求头的值;
●headerValues:
该内置对象的类型是Map,用来获取值为多值的请求头信息,key代表的是请求头名称,value代表的是请求头的多个值。
关于全局初始化参数相关内置对象介绍
我们再学习Servlet时,讲过在web.xml文件中配置全局初始化参数,并且全局初始化参数可以使用ServletContext对象获取,现在在EL表达式中内置了一个与初始化参数相关的对象:
●initParam:
该内置对象的类型是Map,用来获取web.xml文件中标签的参数值,其中key代表的是参数名,value代表的是参数值。
关于cookie相关内置对象介绍
EL表达式也内置一个名为cookie的对象,该内置对象与cookie相关,如下:
●cookie:
该内置对象的类型为Map,其中key是Cookie的名字,value是Cookie对象本身。
El函数使用
El函数库介绍
EL函数库是由第三方对EL的扩展,我们现在学习的EL函数库是有JSTL提供的,JSTL我们会在后面的课程中详解。
EL函数库就是定义了一些有返回值的静态方法,然后通过EL表达式来调用它们
在jsp页面中使用taglib指令导入EL函数库,就可以在页面中使用函数库中的方法。
另外,导入的函数库可以使用的前提是,我们的项目中有相关的jar包
El函数库使用
要使用E