`
hyshucom
  • 浏览: 802710 次
文章分类
社区版块
存档分类
最新评论

JSTL和EL的基础

 
阅读更多

1 EL
2 JSTL

**************************************************************

1 EL
Expression Language

1)语法
表达式 VS EL表达式语言(JSP2.0)
<%= %><=>${}
<%=name%><=>${name}

2)文字
在 EL 表达式中,数字、字符串、布尔值和 null 都可以被指定为文字值(常量)。
字符串可以用单引号或双引号定界。布尔值被指定为 true 和 false 。
例子:
表达式 值
${100} 100
${-168.18} -168.18
${3.8E18} 3.8E18
${3.8e-18} 3.8e-18
${3.14159265} 3.14159265

${"Hello JSP EL!"} Hello JSP EL! 等价于 <%="Hello JSP EL!"%>
${'Hello JSP EL...'} Hello JSP EL...

${true}//can be TRUE? true
${false}//can be FALSE? false

${str==null} true

3)EL 运算符
类别 运算符
算术运算符 +、-、*、/(或 div)和 %(或 mod)
关系运算符 ==(或 eq)、!=(或 ne)、<(或 lt)
>(或 gt)、<=(或 le)和>=(或 ge)
逻辑运算符 &&(或 and)、||(或 or)和 !(或 not)
验证运算符 empty
empty 判断一个变量是否为null或是否包含有效数据
if(name==null||name.equlas(""))等价于
${empty name} -> true
表达式 值
${3+5} 8
${3+5.1} 8.1
${"Hello"+",narci!"} error,没有重载

${5*2} 10

${9.3/3} 3.1
${9.3 div 3} 3.1
${8 div 0} Infinity

${9%2} 1
${9 mod 2}
1
<% String name="";
request.setAttribute("name",name);
%>
${empty name} true

${8*6>68?"Yes":"No"} No

4)变量和JavaBean属性数据输出
表达式语言输出变量,是到范围对象(pageContext,request,session,
application)中查找相应属性。而非直接在页面中查找实例或局部变量.

表达式语言查找变量的顺序是:
pageContext -> request -> session->application,
所有范围都未找到时,赋值null

5)存取器
[] ->输出对象属性值,输出数组或集合中对应索引值
. ->输出对象属性值

<%
Student stu=new Student();
stu.setName("Alice");
session.setAttribute("stu",stu);
%>

${stu["name"]} ${stu['name']} ${stu.name}

List aList = new ArrayList();
aList.add("China");
aList.add(88);
aList.add(168.18);

session.setAttribute("aList", aList);

${aList[0]}
${aList[1]}
${aList[2]}


Map map = new HashMap();
map.put("name", "Kitty");
map.put("age", "25");
map.put("date", new Date());
map.put("aList", aList);
session.setAttribute("map", map);

${map.date}
${map["date"]
${map['date']
${map.aList[0]}
${map["aList"][0]}

6)隐式对象(内建对象)
el提供了自己的一套内建对象,方便在页面内对各种常用数据信息的访问.
(脚本时用)

pageScope pageContext
requestScope request
sessionScope session
applicationScope application
param request.getParameter("name")=parm.name
paramValues 在提交表单里,有多个输入域同名getParameterValues
headerrequest.getHeader()
按照key value的形式取出 value:是一个String类型的值
headerValues
按照key value的方式取出
但是request header里面的value是一个String类型的数组
cookierequest.getCookies()
initParam context param

例子:
用户登录
<input type="text" name="stuName"/>
<input type="text" name="stuSex"/>
<input type="text" name="stuAge"/>
<--提交-->
<jsp:useBean id="stu" scope="session" class="vo.Student"/>
<jsp:setProperty name="name" property="name" value="${param.stuName}"/>
<jsp:setProperty name="sex" property="password" value="${param.stuSex}"/>
<jsp:setProperty name="sex" property="password" value="${param.stuAge}"/>


<%
pageContext.setAttribute("name", "page");
request.setAttribute("name", "request");
session.setAttribute("name", "session");
application.setAttribute("name", "application");
%>
${name} //pageContext -> request -> session->application
${pageScope.name}
${requestScope.name}
${sessionScope.name}
${applicationScope.name}

兴趣 <input type="checkbox" name="habit" value="Reading"/>看书
<input type="checkbox" name="habit" value="Game"/>玩游戏
<input type="checkbox" name="habit" value="Travel"/>旅游
<input type="checkbox" name="habit" value="Music"/>听音乐
<input type="checkbox" name="habit" value="Tv"/>看电视

//提交
${paramValues.habit[0]}"
${paramValues.habit[1]}"
${paramValues.habit[2]}"
${paramValues.habit[3]}"
${paramValues.habit[4]}"
web.xml
...
<context-param>
<param-name>server</param-name>
<param-value>Tomcat5.5</param-value>
</context-param>
...
${initParam.server}

${header["host"]}
${header["accept"]}
${header["user-agent"]}

可以自由设置是否支持表达式语言
<%@page isELIgnored="false"%> : default:false可以使用EL
${name}
配置web.xml也可达到同样的效果(同时存在,那种起作用?)
(禁用脚本和EL)
...
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored> //不能用EL
<scripting-invalid>true</scripting-invalid>//true不能用脚本
</jsp-property-group>
</jsp-config>
....
在页面设置

2 JSTL
JSP Standard Tag Library

1)如何使用JSTL
a、复制jstl的jar包(jstl.jar,standard.jar)到/WEB-INF/lib
b、在使用jstl功能的jsp页面中增加指令
<%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
<%@taglib prefix=“x” uri=“http://java.sun.com/jsp/jstl/xml”%>
<%@taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt>
<%@taglib prefix=“sql” uri=“http://java.sun.com/jsp/jstl/sql”%>
<%@taglib prefix=“fn”uri=“http://java.sun.com/jsp/jstl/functions”%>


2)core:
一般用途
在JSTL中,一般用途的标签主要是指具有输出,设置变量,
和错误处理等功能的标签,他们在jsp中使用很频繁,它们有:
a、<c:set>
语法:<c:set value=”value” var=”varName”
[scope= “{page|request|session|application}”]/ >

<c:set value=”value” target=”target” property=”propertyName”/ >
这个标签用于在某个范围(page,request,session,application)里面设置特定的值
(默认为page),或者设置某个已经存在的javabean的属性。
例子:
<c:set var="counter" value="200"/>
${counter}//输出

<c:set var="china">
the People's Replublic of China
</c:set>
${china}

可以指定范围,默认是page
<c:set value="20" var="maxIdelTime" scope="session"/>
${maxIdelTime}

设置JavaBean的值
<jsp:useBean id="stu" class="vo.Student"/>
<c:set value="Sofei" target="${stu}" property="name"/>
${stu.name}

b、<c:remove>
语法:
<c:remove var=”varName” [scope= “{page|request|session|application}”]/ > //撤除的范围
它的作用是删除某个变量或者属性。
例子:
<c:set value="10000" var="maxUser" scope="application"/>
<c:set value="10" var="count" scope="session"/>
<c:set value="10" var="count"/>
${maxUser}
${count}
<c:remove var="maxUser" scope="application"/>
<c:remove var="count" scope="session"/>
${maxUser}
${count}

c、<c:out>
语法:<c:out value=”value” [escapeXml]=”{true|false}”
[default=”defaultValue”]/>
注意:escapeXml的作用是是否将代码交给xml解析器解释,
true为交给xml解析器解释,false为交给浏览器解释
例子:
<c:set var="sessionAttr" value="sessionValue" scope="session"/>
<c:set var="pageAttr" value="pageValue" scope="page"/>
<c:set var="requestAttr" value="requestValue" scope="request"/>
<c:out value="以下输出的是前面设置的属性<br>" escapeXml="false"/>

<c:out value="${sessionAttr}"/><br>
<c:out value="${pageAttr}"/><br>
<c:out value="${requestAttr}"/><br>
<c:out value="${nodefined}" default="没有nodefined这个变量"/>

d、<c:catch>
它的作用是捕捉由嵌套在它里面的标签所抛出来的异常。类似于<%try{}catch{}%>
语法:<c:catch [var=”varName”]>nested actions</c:catch>
例子:
<c:catch var="error">
<%
Integer.parseInt("abc");
%>
</c:catch>

<c:out value="${error}"/>
<c:out value="${error.message}"/>
<c:out value="${error.cause}"/>

循环
a、 <c:if>
语法:
<c:if test=”testCondition” var=”varName”
[scope=“{page|request|session|application}”]>
Body内容
</c:if>
例子:
<c:set var="age" value="16"/>
<c:if test="${age<18}">
<h1 align=center>您尚未成年,不能进入游戏中心!</h1>
</c:if>

b、<c:choose>(相当于if{}elseif{}else{})
例子:
<c:set var="tax" value="5000" />
<c:choose>
<c:when test="${tax <=0}">
<hr>您今年没有纳税!
</c:when>
<c:when test="${tax<=1000&&tax>0}">
<hr>您今年缴纳的税款为${tax},加油!
</c:when>
<c:when test="${tax<=3000&&tax>1000}">
<hr>您今年缴纳的税款为${tax},再接再励哦!
</c:when>
<c:otherwise>
<hr>您今年纳税超过了3000元,多谢您为国家的繁荣富强作出了贡献!
</c:otherwise>
</c:choose>

c、<c:forEach>
语法: <c:forEach [var=”varName”] items=”collection” [varStatus=”varStatusName”]
[begin=”begin”] [end=”end”] [step=”step”]>
Body 内容
</c:forEach>
例子:
<%
List aList=new ArrayList();
aList.add("I");
aList.add("am");
aList.add("an");
aList.add("excellent");
aList.add("student");
request.setAttribute("aList",aList);
%>
<center>
<table border=1>
<c:forEach var="word" items="${aList}">
<tr><td>${word }</td></tr>
</c:forEach>
</table>
</center>

<c:forEach items='${header}' var='h'>
<ul>
<li>Header name:<c:out value="${h.key}"/>
<li>Header value:<c:out value="${h.value}"/> //h.value是一个字符串
</ul>
</c:forEach>
等价于:
<c:forEach items='${headerValues}' var='hv'>
<ul>
<li>Header name: <c:out value='${hv.key}'/></li>
<c:forEach items='${hv.value}' var='value'>//hv.value是一个字符串的数组
<li>Header Value: <c:out value='${value}'/></li>
</c:forEach>
</ul>
</c:forEach>

另外一种用法:
<c:forEach var="count" begin="10" end="100" step="10">
<c:out value="${count}"/><br>
</c:forEach>


URL
a、<c:import> 相当于<jsp:include>
<c:import url="footer.jsp" charEncoding="GBK">
<c:param name="name" value="Java"/>
</c:import>
b、<c:url>
用于构造URL,主要的用途是URL的重写。
<c:url var="footer1" value="footer.jsp"/>
<c:url var="footer2" value="footer.jsp" scope="page">
<c:param name="name" value="Sofie"/>
</c:url>
<c:out value="${footer1}"/>
<c:out value="${footer2}"/>

<a href="<c:url value='next.jsp'>">下一页</a>

c、<c:redirect> //<jsp:forward>
<c:redirect url="${footer2}"/>

SQL
<sql:setDataSource>
<sql:query>
<sql:update>
<sql:param>
a、查询
<%@page contentType="text/html; charset=GBK"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<sql:setDataSource var="ds" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/tarena" user="narci" password="11" />
<sql:query var="rs" dataSource="${ds}" sql="select * from student" />
//stu.字段名
<c:forEach var="stu" items="${rs.rows}">
<tr>
<td>${stu.student_id}</td>
<td>${stu.student_name}</td>
<td>${stu.student_sex}</td>
<td>${stu.student_age}</td>
<td>${stu.student_desc}</td>
</tr>
</c:forEach>

b、插入记录
<sql:update dataSource="${ds}"
sql="insert into student values(108,'Tany','m',32,'***')" var="i">
</sql:update>
<hr>插入${i}条记录.

c、更新记录

<sql:update dataSource="${ds}"
sql="UPDATE student SET student_name='TingTing' WHERE student_id=108" var="i">
</sql:update>
<hr>更新${i}条记录.

${i}条记录写入

<sql:param>
作用:设置sql语句中“?”表示的占位符号的值。
<sql:update dataSource="${ds}"
sql="UPDATE student SET student_name=? WHERE student_id=?" var="i">
<sql:param value="Killer" /> //pstmt.setString(1,"Killer");
<sql:param value="108" /> //pstmt.setInt(2,108);
</sql:update>


分享到:
评论

相关推荐

    jstl和el的基础

    jstl和el的基础的实施

    jstl标签和el教程(基础入门)

    jstl标签和el教程(基础入门) 适合入门的人看,很简单的..

    JSP+Struts+JSTL+EL学习实例

    风格及功能上参照动易网站管理系统(http://www.asp163.net),源码上有注释,方便参考使用,谢谢

    EL AND JSTL

    EL AND JSTL详细讲解,最基础的EL AND JSTL教程内容,

    JSTL基础 JSTL简介.ppt

    JSTL 全名为 JavaServer Pages Standard Tag Library, 是由 ...Web 程序开发人员能够利用 JSTL 和 EL 来开发 Web 程序,取代传统直接在页面上嵌入 Java 程序(Scripting)的做法,以提高程序可读性、维护性和方便性。

    mysql + commons-dbutils+itcast-tools+BaseServlet + 分页+JSP+JSTL+EL+MVC模式

    在这种项目的基础上增加分页功能 。 @分页功能的宗旨 是无论什么样的查询,显示出的记录都是当前页的记录 。 数据库支持mysql和oracle,将项目导入eclipse,将sql表导入到你自己的数据库,修改c3p0.cofig文件的...

    EL表达式和JSTL标签(备java基础,jsp,servlet,tomcat)

    EL 提供.和[]两种运算符来存取数据。当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。JSTL主要提供了5大类标签库:核心标签库、 国际化(I18N)标签库、SQL标签库、XML标签库、...

    javaweb 期末课程设计适于初学者,增删改查,Javabean,mysql,el,jstl,jsp,servlet

    内部介绍每个jsp及java类使用说明,详细介绍session域调用,使用el表达式与jstl,JavaScript,适用于学习理解javaweb基础内容入门(内含所使用的数据库(mysql),请自行附加)。模型二的开发模式实现增删改查

    jsp论坛短消息-Java

    论坛短消息:登录用户,查看短消息列表,阅读短消息,回复短消息,直接发送短消息等等功能!是基础的jsp项目!有益于阶段性的练习!

    实践学期JSP回顾

    jsp从基础到高级,全课程PPT课件,jsp,jstl,el,实践学期JSP回顾

    高级Java软件架构师学习计划

    JSP、SERVLET、JSTL 和 EL JavaBean/EJB MVC 设计模式与中期项目实战 AJAX 与XML 项目实战 J2EE 高级架构设计 STRUTS 框架JAVAEE程序开发 初级项目实战 HIBERNATE与对象持久化 SPRING架构和面向方面编程 Struts+...

    思员EL表达式PPT

    思员EL表达式PPT,详细介绍JAVA基础以及EL表达市的好书,包括JSTL

    IDEA版JavaWeb从入门到精通之EL&JSTL第9天

    课程涵盖:Servlet程序、Filter过滤器、Listener监听器、JSP页面、EL表达式、JSTL标签库、jQuery框架、Cookie技术、Session会话、JSON使用、Ajax请求等全部Web开发核心技术点,并在讲解知识点过程中带领大家完成一个...

    cangkuguanli.zip

    库存管理系统 10个模块,每一个模块...1)项目中使用的技术: HTML, JavaScript, JSP, Servlet, JSTL, EL. Ajax。缺一不可 2)使用JDBC访问数据库,两种方式:基础代码,Dao. 3)使用核心标签库+sql标签库,访问数据库。

    Web程序设计课堂笔记.doc

    1.Tomcat和HTTP协议 2.Servlet基础 3.HttpServletRequest请求对象 4.JSP技术和会话跟踪 5.JSTL和EL表达式 6.过滤器 7.监听器 8.JDBC 9.文件上传和下载 10.JSP的开发模型——MVC设计架构

    基于工作任务的Java+Web应用教程第五章任务1-5.zip

    在第一个动态版本的基础上,使用JSTL/Sevelet/EL/JavaBean优化宠物分类展现的页面代码高版本MyEclipse创建的Web项目已自带,不用添加。 二、开发环境准备 在任务4的开发环境的基础上,下载包jstjar 和standardjar ...

    Java Web开发实战经典-基础篇课后习题答案及高级篇源码

    此源码从最基本的JSP页面到Model 1到Model 2,文件上传,EL,JSTL,Ajax,Structs,一点一点的修改讲解。 最后形成一个完整的案例,比较经典。喜欢的朋友可以下载。以下是压缩文件的内容: 第二章.HTML,JavaScript...

    Jsp的经典例题大全

    JSP的经典例题包含了jsp全部知识纲领,为每一个知识点加强理解

    J2EE教学PPT课件.zip

    08 EL和JSTL.ppt 09 Ajax.ppt 10 MVC和Struts 基本原理.ppt 11 Struts标签和错误处理.ppt 12 Struts2基础开发.ppt 13 Hibernate基础编程.ppt 14 Hibernate高级编程.ppt 15 Spring基础编程.ppt 16 Struts、Spring、...

Global site tag (gtag.js) - Google Analytics