JSP总结(二)

一、ER表达式(Expression Language)注意点:

1.作用:减少JSP页面的Java代码的数量,即减少页面脚本.

2.禁用EL表达式:在page标签内设置isELIgnored属性为true,默认值为false(不禁用).

3.ER表达式符号表示:${ }

4.EL表达式不支持字符串串联

5.获取属性的两种表示方式:${xx.xx}   或   ${xx[“xx”]}

6.EL表达式的隐含变量有11个,JSP隐含变量有9个+Exception,两者共有的是pageCongtext

 

二、JSTL(JavaServerPages Standard Tag Library)

1.作用:该技术也是为了减少页面脚本.

2.Jstl主要包含5个部分:

<1>核心标签库(c)

<2>sql标签库(sql)

<3>xml标签库(x)

<4>函数标签库(fn)

<5>国际化(fmt)

3.使用jstl的准备工作:

<1>\WebContent/WEB-INF/lib下要有这3个jar包:jstl.jar、juli-6.0.14.jar、standard.jar

<2>页面配置信息部分要导包:

如:使用核心标签库 <%@ taglib prefix="c"uri="http://java.sun.com/jsp/jstl/core" %>

Ⅰ.核心标签库:<c:….>

条件动作

<1><c:if test=”el表达式”>

条件满足下的内容

</c:if>

如:

<c:if test="${sessionScope.numguess.answer!=sessionScope.numguess.guess}">

<!-- c:if标签中间是if条件满足下的内容-->

</c:if>

<2><c:choose>、<c:when>、<c:otherwise>嵌套使用,相当于switch…case语句、if…else语句:

<c:choose>

<c:when test="">

 

</c:when>

<c:otherwise>

 

</c:otherwise>

</c:choose>

注:当<c:when></c:when>有多个时,相当于switch…case语句,此时<c:otherwise>相当于default的作用。

<3><c:out>页面输出

如:<c:out value="${header['Accept1']}" default="ddd"></c:out>      <!—value为页面要输出的内容;value值找不到,就输出default里的值 -->

<c:out value="${'<a>超链接</a>'}" escapeXml="true"></c:out> 

<!-- escapeXml设为true()时对特殊字符转义直接打出来,false时不转义即此时为超链接模式 -->

<4><c:set> 页面赋值 <c:remove> 移除

如:

<!-- var:暴露出的变量名 value:变量值   scope:变量范围,默认为page -->

<c:set var="uname" value="z3"scope="request"></c:set>  <!-- 赋值 -->

<c:out value="${requestScope.uname}"></c:out>         <!-- 取值方式一-->

${requestScope.uname}<br>                               <!--取值方式二 -->

 

<c:remove var="uname" />

移除后的值:${requestScope.uname}<br>

 

<jsp:useBean id="user" class="com.zh.jstl.User"  scope="request"></jsp:useBean>

<!-- target:对象名(必须用el表达式表示) property:属性名    value:属性值 -->

<c:set target="${user}" property="age"value="23"></c:set>      <!-- 赋值 -->

${requestScope.user.age}<br>

<c:out value="${user.age}"></c:out>            <!-- 取值:注意此处 requestScope.age取不到值-->

<5><c:catch> 异常处理

<c:catch var="ex">

<%=3/0 %>

</c:catch>

<c:out value="${ex}"></c:out>               <!-- 打印出异常 -->

<6><c:forEach> 迭代(遍历)

a.       Map的迭代

<!-- Map:键值对 -->

<%

Map map=new HashMap();

map.put("name","z3");                   

map.put("pwd","123");

request.setAttribute("m",map);

%>

<c:forEach items="${m}" var="entry">

<c:out value="${entry }"></c:out><br>

key:<c:out value="${entry.key}"></c:out><br>

value:<c:out value="${entry.value}"></c:out><br>

</c:forEach>

b.      数组的迭代

<%

User[] users=new User[2];

User u1=newUser();

u1.setName("z3");

u1.setAge(23);

users[0]=u1;

User u2=newUser();

u2.setName("l4");

u2.setAge(32);

users[1]=u2;

request.setAttribute("users",users);

%>

<c:forEach items="${users}" var="user">

<c:out value="${user.name }"></c:out><br>

<c:out value="${user.age }"></c:out><br>

</c:forEach>

c.      遍历的状态信息 <c:varStatus>

<%

int[]a={1,2,3,4,5,6};

request.setAttribute("a", a);

%>

<c:forEach items="${a}" var="num"varStatus="status">   <!-- varStatus指向的变量类型为LoopTagStatus-->

<c:out value="${status.index}"></c:out><br>               <!-- 索引 -->

<c:out value="${status.count}"></c:out><br>          <!-- 已经遍历的记录数 -->

<c:out value="${status.first}"></c:out><br>          <!-- 是否为第一条记录 -->

<c:out value="${status.last}"></c:out><br>               <!-- 是否为最后一条记录-->

</c:forEach>

d.      遍历范围:begin=”开始索引值” end=”结束索引值”

<%

int[]arr={1,2,3,4,5,6};

request.setAttribute("a",arr);

%>

<h1>遍历前三条记录:</h1>

如:

<!-- begin:从指定索引开始,end:从指定索引结束 -->

<c:forEach items="${a}" var="i"begin="0" end="2">

<c:out value="${i}"></c:out>

<c:if test="${status.last}">

总数是:<c:out value="${status.count}"></c:out>

</c:if>

</c:forEach>

<7><c:forTokens>  切割字符串

如:

<!-- 切割字符串 forTokens -->

<!-- forTokens是用来分割字符串的,items为要分割的字符串,delims为分隔符,此处为空格,var为分割每个字符的"指针" -->

<c:forTokens items="I am a student" delims=" " var="word">  <!-- 分割单个字符 -->

<c:out value="${word }"></c:out><br>

</c:forTokens>

 

<c:forTokens items="I'm a student,my name is z3." delims=" '," var="word"><!-- 分割多个字符 -->

<c:out value="${word }"></c:out><br>

</c:forTokens>

<8><c:redirect url=”...”></c:redirect>重定向:地址栏转为指定的url

如:<c:redirecturl="http://www.baidu.com"></c:redirect>

<9><c:import url=”…”></c:import>外部包含,可以导入本项目之外的资源,而<jsp:include page=””>(动态包含)和<%@include file=””%>(静态包含)不可以导入外部资源。

如:<c:importurl="http://www.baidu.com"></c:import>

<9><c:url var=”…” value=”…” scope=”…”></c:url>动态url

如:

<%

request.setAttribute("name", "z3");

%>

<c:url var="myurl" scope="request"value="c_set.jsp">

<c:param name="name" value="${name}"></c:param>

</c:url>

${myurl }

 

Ⅱ. Sql标签库:<sql:...>

SQL动作:

<1>数据库连接:<sql:setDataSource>

<sql:setDataSourceuser="用户名" password="密码" url="jdbc:mysql://localhost:3306/test"driver="com.mysql.jdbc.Driver" var="ds"/>

<1>更新插入:<sql:update>

<sql:update var="res" dataSource="${ds}" sql="insertinto tbuser values(?,?)">

<sql:paramvalue="23"></sql:param>    <!--赋值方式一 -->

<sql:param>tw</sql:param>                <!-- 赋值方式二-->

</sql:update>

<!-- 结果:返回受影响的行数 -->

受影响的行数为:${res}

注:sql语句也可以放在标签中间,如:

<sql:updatevar="res" dataSource="${ds}">

insert into tbuservalues(?,?)        

<sql:paramvalue="24"></sql:param>   

<sql:param>xb</sql:param>                

</sql:update>

<!-- 结果 -->

受影响的行数为:${res}

<2>查询:<sql:query>

<!-- maxRows:如果没有指定或指定为-1,那么不限制返回结果集

        maxRowsstartRow配合起来可以进行分页

 -->

<sql:query var="rs" dataSource="${ds}"startRow="1" maxRows="-1"sql="select * from tbuser"></sql:query>

<c:forEach items="${rs.rows}" var="row">

<c:out value="${row}"></c:out><br>                 <!-- 取出一行中所有值-->

<c:out value="${row['name']}"></c:out><br>            <!-- 取出一行中某属性的值-->

<c:out value="${row['id']}"></c:out><br>

</c:forEach>

<3>事务:<sql:transaction>

<4>插入日期:<sql:dateParam>

如:

<%

Date now=newDate();

request.setAttribute("now",now);

%>

传参时:<sql:dateParamvalue="${now}"/>   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值