JSTL使用(三大框架和各页面良好显示)

我们学习jstl标签库的核心(自己网上下载jar包)内容是core:核心标签库,我们学习的重点:

使用taglib指令导入标签库:

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

 

l prefix="c":指定标签库的前缀,这个前缀可以随便给值,但大家都会在使用core标签库时指定前缀为c

2 uri="http://java.sun.com/jstl/core":指定标签库的uri,它不一定是真实存在的网址,但它可以让JSP找到标签库的描述文件;

一般常用的标签库有:

out

<c:out value=”aaa”/>

输出aaa字符串常量

<c:out value=”${aaa}”/>

${aaa}相同

<c:out value=”${aaa}” default=”xxx”/>

${aaa}不存在时,输出xxx字符串

<%

request.setAttribute("a","<script>alert('hello');</script>");

%>

<c:out value="${a }" default="xxx" escapeXml="false" />

escapeXmlfalse,不会转换“<”、“>这可能会受到JavaScript攻击。

url

url标签会在需要URL重写时添加sessionId

<c:url value="/"/>

输出上下文路径:/day08_01/

<c:url value="/" var="a" scope="request"/>

把本该输出的结果赋给变量a。范围为request

<c:url value="/AServlet"/>

输出:/day08_01/AServlet

<c:url value="/AServlet">

<c:param name="username" value="abc"/>

<c:param name="password" value="123"/>

</c:url>

输出:/day08_01/AServlet?username=abc&password=123

如果参数中包含中文,那么会自动使用URL编码!

在下面的两个标签库使用的常量中,咋以后的项目开发中经常结合js或者jQuery用

if标签的test属性必须是一个boolean类型的值,如果test的值为true,那么执行if标签的内容,否则不执行。

<c:set var="a" value="hello"/>

<c:if test="${not empty a }">

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

</c:if>

forEach当前就是循环标签了,forEach标签有多种两种使用方式:

使用循环变量,指定开始和结束值,类似for(int i = 1; i <= 10; i++) {}

循环遍历集合,类似for(Object o : 集合)

 

循环变量方式:

<c:set var="sum" value="0" />

<c:forEach var="i" begin="1" end="10">

<c:set var="sum" value="${sum + i}" />

</c:forEach>

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

<c:set var="sum" value="0" />

<c:forEach var="i" begin="1" end="10" step="2">

<c:set var="sum" value="${sum + i}" />

</c:forEach>

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

遍历集合或数组方式:

<%

String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};

pageContext.setAttribute("ns", names);

%>

<c:forEach var="item" items="${ns }">

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

</c:forEach>

 

遍历List

<%

List<String> names = new ArrayList<String>();

names.add("zhangSan");

names.add("liSi");

names.add("wangWu");

names.add("zhaoLiu");

pageContext.setAttribute("ns", names);

%>

<c:forEach var="item" items="${ns }">

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

</c:forEach>

 

遍历Map

<%

Map<String,String> stu = new LinkedHashMap<String,String>();

stu.put("number", "N_1001");

stu.put("name", "zhangSan");

stu.put("age", "23");

stu.put("sex", "male");

pageContext.setAttribute("stu", stu);

%>

<c:forEach var="item" items="${stu }">

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

</c:forEach>


如上的标签库都是别人公司自定好的了,根据项目的需求,我们有时候也可以自定义自己的标签,

其实我们在JSP页面中使用标签就等于调用某个对象的某个方法一样,例如:<c:if test=””>,这就是在调用对象的方法一样。自定义标签其实就是自定义类一样!

定义标签处理类:必须是TagSimpleTag的实现类;

编写标签库描述符文件(TLD);

 

SimpleTag接口是JSP2.0中新给出的接口,用来简化自定义标签,所以现在我们基本上都是使用SimpleTag

Tag是老的,传统的自定义标签时使用的接口,现在不建议使用它了


SimpleTag接口介绍

SimpleTag接口内容如下:

void doTag():标签执行方法;

JspTag getParent():获取父标签;

void setParent(JspTag parent):设置父标签

void setJspContext(JspContext context):设置PageContext

void setJspBody(JspFragment jspBody):设置标签体对象;


下面写个例子(其实网上也有)可以参考下如何使用自己定义的标签

HelloTag.java

public class HelloTag implements SimpleTag {

private JspTag parent;

private PageContext pageContext;

private JspFragment jspBody;

public void doTag() throws JspException, IOException {

pageContext.getOut().print("Hello Tag!!!");

}

public void setParent(JspTag parent) {

this.parent = parent;

}

public JspTag getParent() {

return this.parent;

}

public void setJspContext(JspContext pc) {

this.pageContext = (PageContext) pc;

}

public void setJspBody(JspFragment jspBody) {

this.jspBody = jspBody;

}

}

 

1.3 标签库描述文件(TLD

标签库描述文件是用来描述当前标签库中的标签的!标签库描述文件的扩展名为tld,你可以把它放到WEB-INF下,这样就不会被客户端直接访问到了。

hello.tld

<?xml version="1.0" encoding="UTF-8"?>

<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xml="http://www.w3.org/XML/1998/namespace" 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd ">

 

<tlib-version>1.0</tlib-version>

<short-name>xiaowen</short-name>

<uri>http://www.xiaowen.cn/tags</uri>

<tag>

<name>hello</name>

<tag-class>cn.xiaowen.tag.HelloTag</tag-class>

<body-content>empty</body-content>

</tag>

</taglib>

 

1.4 使用标签

在页面中使用标签分为两步:

使用taglib导入标签库;

l 使用标签;

 

<%@ taglib prefix="it" uri="/WEB-INF/hello.tld" %>

......

<it:hello/>



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值