编写Java无脚本的JSP页面
编写Java无脚本的JSP页面
- 在JSP页面中使用EL表达式语言
- 在JSP页面中使用JSTL
- 使用JavaBean、EL和JSPL编写Java无脚本JSP页面
JSP表达式语言EL
JSP页面中显示结果jsp:useBean和jsp:getProperty两个元素太过冗长。且无法操作对象包含对象的情况 。此时用到EL表达式
<jsp:useBean id="stuBean" class="bean.StudentBean" scope="request"></jsp:useBean>
//上面这句话都可以不用,在后台request封装的bean引用可以直接获得
${stuBean.name}
${stuBean.cb.name}
EL表达式获取数据:
- Expression Language:主要是用来替换jsp页面上以前用到的脚本表达式。可以从web的各个域中(page,session,request,application)去检索对象,如果获取到数据就直接返回,没有找到对应的数据就返回“”(而非NUll) 。通过pageContext.findAttribute去获取到各个域中的键的名字。如果说pageContext本身没有,就从最小的范围开始找,找到就停止
- 语法: 很简单:${}
- EL表达式可以进行计算:${1+1-2} ,${1>2?true:false}。在EL表达式中我们可以加入一些计算,如关系运算符、逻辑运算符,算术运算符,三目运算符
- EL表达式定义了一些隐式变量。利用这些对象,可以在开发中轻松的获取到web常用的引用对象。从而获取到对象里面的值。
- EL操作集合:${list} , ${list[i]}.
- EL获取到map集合:${mapObject.AttributeName},属性名不能以数字开头。或者${mapObject[index]},通过数组方式去取
EL表达式做运算
- 算术运算:${1+1} 、${2*3}
- 关系运算符:${1>2}:返回false。如果写一个不存在的对象${user},会返回空字符串"",如果写${user==null}会返回true。或者${user eq null} 。
empty表达式:${ empty(object)} 。
三目运算符:${1>2?"true":"false"}。 -
数据的回显:
StudentBean be = new StudentBean();
be.setSex("nan");
request.setAttribute("be",be);<label>男</label><input type="radio" name="sex" ${be.sex=="nan"?checked:""}><label>女</label><input type="radio" name="sex" ${be.sex=="nv"?checked:""}>
EL表达式中使用的隐式变量
JSP:pageContext;
作用域:pageScope:pageScope.attributeName,可以获取到pageContext设置的键值对
request.Scope;session.Scope;applicationScope 。
请求参数:param:可以直接获取到用户传递过来的参数,返回一个map集合,param.参数名
paramValues:用于获取到用户传递过来的多个相同名字的参数
请求头:header:${header.cookie} 。有连字符的时候:${header["user-Agent"]}
headerValues:获取到所有请求头 Cookie:cookie:${cookie}
标准标记库JSTL
JSTL是一个第三方的标签库,称为标准标签库(或标准标记库),使用JSTL是为了弥补html的不足,替换jsp里面出现的java代码。
主要内容:核心库:
表达式标签:out、set、remove、catch;
流程标签:if、choose、when、otherwise;
循环标签:forEach、forTokens;
URL标签:import、url、redirect、param;
引入核心库:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
表达式标签:
1、out:
输出数据:提供三个参数:
value:输出内容
default:默认值
escapeXml:制定一些特殊符号如 <>%&是否进行转码后输出,默认值是false
<c:out value="${user }" default="值为空d"></c:out>
<!-- 两种默认值方式不能同时使用 -->
<c:out value="${null }">第二个默认值</c:out>
<c:out value="<a href=''>百度</a>" escapeXml="false"></c:out>
2、set
将一个对象存在指定域范围内
var:用于要设置的属性名字 :
value:要设置的属性值 :
scope:指定存放在某个域对象中(page request session application。不设置默认放在page)
<c:set var="name" value="xiaoli" scope="request"></c:set>
3、remove
remove标签:用于删除指定域范围内的指定的对象
var:指定要删除的属性名字
scope:指定的范围
<c:set var="name1" value="女盆友" scope="request"></c:set>
<c:set var="name2" value="女盆油2号" scope="request"></c:set>
<c:remove var="name1" scope="page"/>
<c:out value="${name1 }"></c:out>
<c:out value="${name2 }"></c:out>
4、catch
catch标签:捕获标签里面出现的异常
<c:catch var="error">
<%int i=1/0; %>
</c:catch>
<c:out value="${error }"></c:out>
条件判断:
if
if:判断用于替换java中的判断语句。
test里为判断条件
var:指定将判断的结果保存到var设置的变量里去
<c:if test="${2>1 }" var="boo">
<c:out value="小王"></c:out>
</c:if>
choose、when\otherwise
<% request.setAttribute("grade", 85); %>
<c:choose>
<c:when test="${grade>80 && grade<=90 }">
<c:out value="优秀"></c:out>
</c:when>
<c:when test="${grade<=80 && grade>=0 }">
<c:out value="良好"></c:out>
</c:when>
<c:otherwise>
<c:out value="多读书"></c:out>
</c:otherwise>
</c:choose>
循环标签
循环标签 :var:用于储存从集合中取出的元素,
items:指定要遍历的集合
begin、end:指定循环从哪儿开始,默认0、从哪儿儿结束
varStatus:用于存放集合中元素的信息——
index,循环产生对象的下标,
count循环的次数
first:判断当前循环的对象是否是第一个元 素
step:设置步长,控制循环条件
forTokens:主要用来操作字符串,根据指定字符对字符串进行拆分后得到一个数组再循环
<%
List<String> list = new ArrayList<String>();
list.add("张三");
list.add("李四");
list.add("王五");
request.setAttribute("list", list);
%>
<c:forEach var="ele" items="${list }" varStatus="st">
<c:out value="${ele }"></c:out>
<c:out value="${st.count }"></c:out>
<c:out value="${st.index }"></c:out>
<c:out value="${st.first }"></c:out>
<c:out value="${st.last }"></c:out>
</c:forEach>
forTokens
<c:forTokens items="1-2-3-4-5" delims="-" var="ele" begin="2">
<c:out value="${ele }"></c:out>
</c:forTokens>
URL标签
import
可以包含其他文件,包含动态文件或者静态文件。可以包含网络上的资源
<c:import url="text.txt"></c:import>
url
主要构造一个url地址,url重写的目的
<c:url value="/demo04.jsp val="url""></c:url>
<a href="${url }"></a>
redirect
<c:redirect url="/JSTL/demo01.jsp"></c:redirect>
param
用于构造参数
<c:param name="username" value="123"></c:param>