JSP技术-02-内置对象/作用域/EL表达式/JSTL标签库

一.九大内置对象

几乎每个JSP页面在处理数据时都要用到request,response,context等对象,所以,JSP2.0规范中定义9个内置对象(隐式对象),将在JSP中常用的对象封装成了内置对象。在JSP页面中,内置对象是由JSP默认创建的,可以直接在JSP页面中直接使用,不需要创建
9个内置对象的类型及功能:

名称类型功能
outjavax.servlet.JspWriter用于在页面中输出内容
requestjavax.servlet.http.HttpServletRequest获取用户的请求信息
reponsejavax.servlet.http.HttpServletResponse服务器返回信息给浏览器
configjavax.servlet.ServletConfig封装了服务器的配置,可以用来获得初始化参数
sessionjavax.servlet.http.HttpSession可以用来获取服务器端存储的信息
applicationjavax.servlet.ServletContext所有请求共享的信息
pagejava.lang.Object当前页面经过转换后的Servlet类的实例
pageContextjavax.servlet.jsp.PageContextJSP页面容器,可以用来或取该JSP页面中的属性和对象的值
exceptionjava.lang.ThrowableJSP页面的异常信息

pageContext对象:

pageContext对象的功能:

1)可以用来获取其他内置对象

在JSP页面中,使用pageContext对象的getXXX方法可以获取JSP页面中的其他8个内置对象,如想要获取当前页面的request对象,可以调用pageContext的getPageContext( )方法。pageContext对象是javax.servlet.jsp.PageContext类的实例对象,它代表当前JSP页面的运行环境

2) 可以用来存储数据,pageContext对象存储数据是通过操作属性来实现的

方法功能
void setAttribute(String name,Object value,int scope)用于设置pageContext对象的属性
Object getAttribute(String name ,int scope)用于获取pageContext对象的属性
Object findAttribute(String name)从4个域对象中查找名称为name的属相

参数name指定属性名称,参数scope指定属性作用范围,作用范围参数可以是下面4个值(对应4大域,下面会细讲)

属性值作用范围
PageContext.PAGE_SCOPE整个页面
PageContext.PEQUEST_SCOPE一次请求
PageContext.SESSION_SCOPE一次会话
PageContext.APPLICATION整个web应用

使用findAttribute( )方法查找域中的属性时,会按照page,request,session和application的顺序(范围越小,优先级越高)进行查找

二.四大域

“域”的本质是一块存储数据的区域,底层是一个map集合,集合的键是属性名,值是属性值。由于这个map集合是属于JSP中的对象的,而不同对象的生命周期和作用范围又不同,所以“域”的作用范围也不同,只能在固定的范围内存取值。
JSP页面中有4个对象常被用来存取,传递数据,它们被称为4大域
4大域的名称,类型及作用范围:

属性值作用范围域名称域对象类型
PageScope当前页面pageContextPageContext
RequestScope即从浏览器发出请求到服务器收到请求开始处理,通常只涉及一个页面,如果有请求的转发,则涉及多个页面requestHttpServletRequest
SessionScope浏览器和服务器的一次会话,可以在多个请求间共享数据sessionHttpSession
Application整个项目范围,可以在多次会话间共享数据applicationServletContext

三.EL表达式

EL全名为Expression Language,是一种简单易用的数据访问语言,EL表达式简化了获取Servlet域对象中数据的方式,使JSP页面中的代码更加简洁

3.1 EL的语法

EL表达式的形式:${ 表达式 }

3.2 EL表达式与内置对象

3.2.1 EL表达式可以获取4大域中的属性的值(直接调用域对象)

例如:获取页面中的name属性的值 { pageScope.name }

范例:使用EL表达式获取内置对象中的数据

<%=pageContext.getAttribute("name")%>
<%=request.getAttribute("name")%>
<%=session.getAttribute("name")%>
<%=application.getAttribute("name")%>

${pageScope.name}
${requestScope.name}
${sessionScope.name}
${applicationScope.name}

EL表达式获取其他内置对象中属性的值:

分类使用的方法获取的值
请求参数param获得一个请求参数
请求参数paramValues获得一组请求参数
请求头header获得一个请求头
请求头headerValues获得一组请求头
JSP上下文对象pageContext
全局初始化参数initParam
cookiecookie

3.2.2 获取请求参数:

请求路径:
/e3mall/userServlet?method=login&username=xxx&password=123&password=111
获取参数:

功能EL表达式
获取一个参数${param.username}
获取一组参数${paramValues.password}
获取一组参数中的一个${paramValues.password[0]}

3.2.3 获取请求头

功能EL表达式
获取请求头中的host参数${header.accept}
获取请求头中的编码参数(参数只有一个)${header[‘accept-Encoding’]
获取请求头中的编码参数(参数为一个数组)${headerValues[‘accept-Encoding’][0]}

3.2.4 获取pageContext中的属性的值

获取项目路径:

使用JSP标签使用EL表达式
<%=((HttpServletRequest)pageContext.getRequest()).getContextPath()%>${ pageContext.request.contextPath }

3.2.5 获取项目的初始化参数(web.xml文件中的配置信息)

web.xml文件的配置

<context-param>
        <param-name>namespace</param-name>
        <param-value>/e3mall</param-value>
    </context-param>

获取namespace参数的值: intitParam.person5.cookie { cookie.loginUser }
EL获取cookie不是直接调用底层的方法,而是对底层方法进行了部分封装和加强。cookie没有根据属性名操作属性值的API,EL的底层使用request.getCookies( )获得所有cookie,然后遍历并存放到Map中(Map < name,obj >)

四.JSTL技术:

JSTL全名为JSP Standard Tag Library ,即JSP标准标签库。使用JSP标签可以降低JSP页面的复杂度,增强代码的重用性,所以经常使用JSP的人就制作了很多自定义的JSP标签,但是制作这些标签的人并不属于同一个团队,所以有很多标签功能相同,导致学习和使用很不方便,为了方便开发者的使用,sun公司制作了一套标准标签库,即JSTL
JSTL是由5个不同功能的标签库组成的:

标签库对应的URL标签前缀
Corehttp://java.sun.com/jsp/jstl/corec
I18Nhttp://java.sun.com/jsp/jstl/fmtfmt
SQLhttp://java.sun.com/jsp/jstl/sqlsql
XMLhttp://java.sun.com/jsp/jstl/xmlx
Functionshttp://java.sun.com/jsp/jstl/functionsfn

常用的JSTL标签:

4.1 if标签

用于执行判断

语法:

例一:
<c:if test="Boolean">
    ${param}
</c:if>

Boolean的值为true则执行标签体中的内容,查找4大域中param属性的内容并显示

例二:
<c:if test="Boolean" var="param" scope="Scope" [scope="{page|request}"]>
    ${param}
</c:if>

将Boolean的值(true或false)赋给param属性,并存放到指定的作用域,若Boolean的值为true执行标签体中内容

属性名功能
test属性用于设置逻辑表达式,逻辑表达式的计算结果为true则执行标签体中内容,为false则不执行
var属性用于指定逻辑表达式的结果的名称
scope属性用于指定var属性声明的变量的作用范围,默认值为page

4.2 forEach标签

用于迭代集合中的元素

1)基本语法:

例一:
<c:forEach var="item" varStatus="status" items="${pageBean}">
    <td align="center" width="18%">${status.count}</td>    
    <td align="center" width="17%">${item.pname}</td>                  
</c:forEach>

迭代pageBean集合,并输出元素的序号(从1开始),及元素的pname属性的值

属性名功能
var属性指定当前迭代到的元素保存到page域中的名称
items属性指定被迭代的集合对象
varStatus属性指定存有当前迭代到的元素的信息的对象保存到page域中的名称
begin属性指定从集合的第几个元素开始迭代,默认从0开始
step属性指定迭代因子的增量

2)varStatus属性:

用于设置一个javax.servelt.jsp.jstl.core.LoopTagStatus类型的变量,这个变量包含了从集合中取出的元素的状态信息

属性名返回值类型功能
countint元素在集合中的序号,从1开始计数
indexint元素在集合中的索引,从0开始计数
firstboolean是否是集合的第一个元素
lastboolean是否是集合的最后一个元素

3)迭代Map集合:

例二:
<c:forEach var="item" items="${pageBean}">
    <td align="center" width="18%">${item.key}</td>    
    <td align="center" width="17%">${item.value}</td>                  
</c:forEach>

迭代pageBean(Map集合)中的元素,将每个元素的key和value的值输出

迭代List和Set集合时,var声明的对象就是集合中的元素。而在迭代Map集合时,var声明的则是键和值的关系对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值