编写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表达式获取数据:

  1. Expression Language:主要是用来替换jsp页面上以前用到的脚本表达式。可以从web的各个域中(page,session,request,application)去检索对象,如果获取到数据就直接返回,没有找到对应的数据就返回“”(而非NUll) 。通过pageContext.findAttribute去获取到各个域中的键的名字。如果说pageContext本身没有,就从最小的范围开始找,找到就停止
  2. 语法: 很简单:${}
  3. EL表达式可以进行计算:${1+1-2} ,${1>2?true:false}。在EL表达式中我们可以加入一些计算,如关系运算符、逻辑运算符,算术运算符,三目运算符
  4. EL表达式定义了一些隐式变量。利用这些对象,可以在开发中轻松的获取到web常用的引用对象。从而获取到对象里面的值。
  5. EL操作集合:${list} , ${list[i]}.
  6. EL获取到map集合:${mapObject.AttributeName},属性名不能以数字开头。或者${mapObject[index]},通过数组方式去取

EL表达式做运算

  1. 算术运算:${1+1} 、${2*3}
  2. 关系运算符:${1>2}:返回false。如果写一个不存在的对象${user},会返回空字符串"",如果写${user==null}会返回true。或者${user eq null} 。
    empty表达式:${ empty(object)} 。
    三目运算符:${1>2?"true":"false"}。
  3. 数据的回显:

    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>
posted @ 2017-03-17 16:12  刘秋池  阅读(318)  评论(0)    收藏  举报