JSTL(java Standard Tag Library) –Java标准标签库
JSTL –Core 核心标签库。 - 这是本部分的重点
JSTL – I18N - 国际化标签库。Internationalization- I18N
JSTL – SQL – 数据库操作标签(有悖于MVC设计模式不用不讲)。
JSTL - Functions – 函数库。
JSTL - xml ,对XML的操作(同SQL标签)。在jstl-1.2.jar包的META-INF目录中,保存着各种tld文件的版本。请查看。
使用JSTL核心标签:
如果你的Web项目是基于JavaEE2.5或以上的。可以在你项目的任意页面上通过<%@ taglib 指令使用JSTL的核心标签库。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" PRefix="c"%>
uri是引用标签库的资源定位符,并不代表一个实际的地址。
Prefix是自定义的前缀。
如果你的项目是JavaEE2.5以下的项目,必须在在你项目中的lib目录下,存在以下两个jar文件为:
Jstl.jar、standard.jar
JSTL-Core一共包含以下几个子标签:
<c:out> ${name} 输出标签
<c:set> pageContext.setAttirbute(key,value,scope); 声明标签
c:remove 删除某个范畴内的数据
<c:if> 判断c:else,c:elsfif
<c:choose><c:when><c:otherwise> 判断分枝c:if,c:else if c:
<c:forEach> 遍历
<c:forTokens> 分隔
<c:import> 导入其他资源,相当于动态包含共享同一个request
<c:url> - 重写url
<c:redirect> 重定向 response.sendRedirect(‘’..)
下面对具体的操作进行解释与演示:
<c:out value=…/>用于在页面上输出结果。
<c:out value=“${requestScope.name}”/> -将request中的name值输出
<c:out value=“${param.username}”/> - 用于将参数输出到页面上。
<c:out value=“${name}” default=“hello”/>从page到application开始查找,如果没有找到,就显示默认值hello.
另一种设置默认值的方式:
<c:out value=“${name}”> Default-value-默认值。 </c:out>
只有当要求的信息为null或不存在时才会输出默认值。
excapeXml属性:默认值为true,用于将html等标签转换成<等转换元素,示例:
<% String name="<font color='red'>Red</font>"; pageContext.setAttribute("name",name); %><c:out value=“${name}” escapeXml=“false”></c:out> 不对xml或html进行转换,直接输出,这样就会在页面上看到红色的Red字符,因为浏览器会解析html数据。
<span style="font-size:18px;"><% pageContext.setAttribute("name", "jack_P"); request.setAttribute("name", "jack_R"); request.setAttribute("name2", "<font color='red'>你好,中国</font>"); %> ${name } //从小范围到大开始查找<br/> <c:out value="${name }"></c:out> -------输出标签 <hr/></span>
<span style="font-size:18px;"> <span style="white-space:pre"> </span> <!-- c:out标签一定会让所显示的内容原样输出,避开html的解析 --> <span style="white-space:pre"> </span> ${name2 }<br/> 可以解析html语言<br/> <span style="white-space:pre"> </span><c:out value="${name2 }"></c:out> -------不可以解析html语言,原样输出 <span style="white-space:pre"> </span></span>
<c:set/>标签的作用如下:
为String类型的命名变量设置值。
<c:set var=“变量名” value=“变量的值” scope=“page|request|session|application”/>
<c:set var=“name” value=“${param.name}”/>直接从参数中取出数据给name赋值。
如果变量为JavaBean则为这个JavaBean的属性设置值。
<c:set target=“JavaBean的变量名” property=“设置的属性” value=“值”/>
示例:
<jsp:useBean id="person" class="cn.itcast.Person"></jsp:useBean>
<c:set target="${pageScope.person}" property="name" value="Jack"/>
<c:set target="${pageScope.person}" property="age" value="99"/>
如果变量为Map则,给Map中的key设置值。
<c:set target=“代表Map的变量” property=“key” value=“value”/>,示例:
<jsp:useBean id="map" class="java.util.HashMap" scope="request"></jsp:useBean>
<c:set target="${requestScope.map}" property="name" value="Jack"/>
<c:out value="${requestScope.map.name}"/>
为String类型的命名变量设置值。
<c:set var=“变量名” value=“变量的值” scope=“page|request|session|application”/>
<c:set var=“name” value=“${param.name}”/>直接从参数中取出数据给name赋值。
如果变量为JavaBean则为这个JavaBean的属性设置值。
<c:set target=“JavaBean的变量名” property=“设置的属性” value=“值”/>
示例:
<jsp:useBean id="person" class="cn.itcast.Person"></jsp:useBean>
<c:set target="${pageScope.person}" property="name" value="Jack"/>
<c:set target="${pageScope.person}" property="age" value="99"/>
如果变量为Map则,给Map中的key设置值。
<c:set target=“代表Map的变量” property=“key” value=“value”/>,示例:
<jsp:useBean id="map" class="java.util.HashMap" scope="request"></jsp:useBean>
<c:set target="${requestScope.map}" property="name" value="Jack"/>
<c:out value="${requestScope.map.name}"/>
<span style="font-size:18px;"><hr/> <!-- c:set标签可以设置变量的值 scope默认放在page容器当中--> <c:set var="a" value="jack中国"></c:set> ${a } <br/> <!-- 指定范围以后,需要从指定范围去取,不然会自动从小到大开始查找 --> <c:set var="a" value="jack中国2" scope="request" ></c:set> ${requestScope.a } <br/> <hr/></span>
<c:if/>用于实现Java语言中的if语句。它的语法如下:
<c:if test=“逻辑表达式” var=“代表逻辑表达式值的命名变量” scope=../>
示例:
<c:if test=“${name!=‘Jack’}”>
当name的值为Jack时输出此行信息
</c:if>
上面的判断等价于下面的代码片段:
if(pageContext.getAttribute(“name”)!=null && !..equals(“Jack”)){
out.println(“…..”);
}
<hr/> <c:set var="age" value="20"> </c:set> <c:if test="${age>25 }" var="aa"> <h2>比25大咯!!</h2> </c:if> <c:if test="${!aa }"> <h3>比25小咯!!</h3> </c:if> <hr/>
这几个标签共同使用可以实现Java中的if…else语句的功能。
<c:choose>
<c:when test="${empty param.name}">
用户没有输入name参数
</c:when>
<c:when test="${param.name=='Admin'}">
${param.name}是管理员
</c:when>
<c:otherwise>
用户是:${param.name}
</c:otherwise>
</c:choose>
使用c:when必须遵循以下语法规则:
<c:when/>和<c:otherwise/>不能单独使用,它必须位于<c:choose内。
<c:otherwise/>必须位于c:when之后。
<span style="font-size:18px;"> <hr/> <c:set var="age" value="-18"></c:set> <c:choose> <c:when test="${age>20 }"> 大于20!! </c:when> <c:when test="${age>10 }"> 大于10!! </c:when> <c:when test="${age<10 }&&${age>0 }"> 小于于10!! </c:when> <c:otherwise> 这就是属于其他的了 。。。 </c:otherwise> </c:choose> <hr/></span>
<hr/> <!-- 移除属性 c:remove 默认是从pageScope中移除--> <c:remove var="a" scope="request"/> aaa ${requestScope.a } <hr/>
forEach用于遍历集合中的对像。
基本语法:
<c:forEach var=“迭代变量” item=“${集合名称}” varStatus=“迭代下标变量”>
迭代部分
</c:forEach>
forEach的begin(开始索引)、end(结束索引)、step(步长)属性:
<c:forEach begin=0 end=10 step=“2”>…</c:forEach>将输出0,2,4,6,810
<hr/> <!-- c:forEach 增强for循环 --> <!-- 普通版本 --> <c:forEach begin="0" end="10" var="x" step="2"> ${x } <br/> </c:forEach> <hr/> <% String[] a={"小王","晓明 ","小杨","新哥"}; request.setAttribute("a", a); %> <c:forEach items="${requestScope.a }" var="i"> ${i }<br/> <!-- 一定要注意取值的范围 --> </c:forEach> <hr/>
<!-- 演示list用jstl --> <% List<String> list=new ArrayList<String>(); list.add("123a"); list.add("123d"); list.add("123b"); list.add("123c"); list.add("123e"); list.add("大新哥"); session.setAttribute("list", list);//后面用el表达式取得是参数 %> <c:forEach items="${sessionScope.list }" var="li"> ${li } <br/> </c:forEach> <hr/>
<!-- 采用map的方式演示jstl --> <% //演示map采用el表达式 Map<String,Object> map=new HashMap<String,Object>();//存储以hash值存储 map.put("aa", 123); map.put("cc", 567); map.put("bb", 345); map.put("dd", 789); application.setAttribute("map", map); %> <c:forEach items="${ applicationScope.map}" var="mm" varStatus="idx"> ${mm.key } ${mm.value }<br/> ${idx.index } ${idx.count } </c:forEach> <hr/> <hr/>
<span style="font-size:18px;"> <!-- 分割字符串,相当于split() --> <c:forTokens items="aa,bb,cc,dd,ee,ff" delims="," var="x"> ${x } </c:forTokens> <hr/></span>
<c:import/>包含其他web资源,功能类似与<jsp:include/>(动态包含)。
<c:import url=“web资源”/>
<c:url/>按特定的方式重写URL。
<c:url value=“/aaa.jsp”/>总是以/开头,如果只使用value属性为直接使用或输出。
<c:url value=“/…” var=“someVar” scope=“…”/>也可以通过这样的方式将重写的url放到某个范围中,然后再取出来使用。
<c:redirect/>负责重定向。
<c:redirect url=“重定向到的资源”/>
在使用<c:redirect时可以带更多的参数:
<c:redirect url=“/…”>
<c:param name=“someName” value=“someValue”/>
</c:redirect>
<span style="font-size:18px;"> <!-- c:url --> <a href="<c:url value="/Servlet"></c:url>">调转到土豪界面</a> <%-- <c:redirect url="/Servlet"></c:redirect> --%> <a href="<c:url value='/jsps/jstldemo2.jsp'></c:url>">利用CSS+jstl技术进行演示</a> <hr/></span>
前两天在一群里看见有人推荐一个app叫问啊,就可以发题答题那种的,感觉就跟uber滴滴打车似的,一般这种软件一上来就砸钱给红包啥的,哥之前刷过uber的单有经验!试验了几次应该可以刷,把注册红包和之前领的红包钱套现,目前我提了五十多,目测还能刷更多。ps,但是尽量要问技术相关的问题,不然容易被封。
有技术的可以自己试,不会的可以q我:QQ群290551701 聚集很多互联网精英,技术总监,架构师,项目经理!开源技术研究,欢迎业内人士,大牛及新手有志于从事IT行业人员进入!
新闻热点
疑难解答