Jsp标签主要在jsp页面执行java代码,用于替换jsp脚本。
Jsp内置标签(动作标签): 不需要导入标签库
JSTL标签库: 需要导入标签库
自定义标签: 需要导入标签库
3 Jsp内置标签
<jsp:forward/> 转发标签
用于转发
<jsp:param/> 参数标签
<jsp:incude/> 包含标签
用于包含其他页面
注意:
1)其原理是包含与被包含的页面先各自翻译成独立的java源文件,然后再运行时合并再一起。(先翻译再合并),这叫动态包含
==== 静态包含 vs 动态包含====
1)原理不一样
a)静态包含(先合并再翻译)
b)动态包含(先翻译再合并)
2)语法不一样
a)静态包含( includ指令: <%@include%> )
b)动态包含 (include标签: <jsp:include />)
3)参数传递不同
a)静态包含不能传递参数
b)动态包含可以向被包含页面传递参数
jstl , java starardard tag libarary java标准标签库
以前: jsp2.0以前jstl不属于java规范。属于第三方的工具。需要导入jar包
现在: jsp2.0 jstl纳入javaee规范。不需要导入jar包。
JSTL标签库分类:
1)核心标签库 (core/c ) 使用最频繁的
2)国际化互标签库(fmt)
3)EL函数库 (fn)
4)数据库标签库(sql)基本不用
5)Xml标签库(x)基本不用
1)确保jstl的支持jar包已经导入到项目中
2)在jsp页面的顶部导入标签库
<%@taglib uri="tld文件的路径" prefix="标签库缩写"%>
tld文件: 标签库的声明文件(每套标签都有一个tld文件)
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> |
3)使用标签库中的标签
<c:set></c:set> |
保存数据:
<c:set></c:set>
获取数据
<c:out value=""></c:out>
单条件判断:
<c:if test=""></c:if>
多条件判断
<c:choose></c:choose>
<c:when test=""></c:when>
<c:otherwise></c:otherwise>
数据遍历
<c:forEach></c:forEach>
<c:forTokens items="" delims=""></c:forTokens>
自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。
1)编写一个标签处理器程序,继承SimpleTagSupport类(使用自定义标签显示ip)
public class ShowIpTag extends SimpleTagSupport{ /** * 执行标签 */ @Override public void doTag() throws JspException, IOException { //得到request对象 PageContext pageContext = (PageContext)this.getJspContext(); HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); //得到客户ip String ip = request.getRemoteHost(); //写出浏览器 pageContext.getOut().write("自定义标签实现获取客户端IP地址:"+ip); } } |
2)在WEB-INT目录下建立tld文件,例如test.tld,内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1">
<!-- 标签库版本 --> <tlib-version>1.1</tlib-version> <!-- 标签库的缩写:简单名称 --> <short-name>test</short-name> <!-- tld文件的唯一标记 --> <uri>http://gz.test.cn</uri>
<!--标签定义 --> <tag> <!-- 标签名称 --> <name>showIp</name> <!-- 标签对应的处理器程序 --> <tag-class>gz.test.c_tag.ShowIpTag</tag-class> <!-- 标签体输出格式 --> <body-content>scriptless</body-content> </tag> </taglib> |
3)在jsp页面中导入自定义标签库,再使用标签库中的标签
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib uri="http://gz.itcast.cn" prefix="itcast"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>第一个自定义标签</title> </head>
<body> <% //得到客户IP地址 //String ip = request.getRemoteHost(); //out.write("客户的IP地址为: "+ip); %>
<test:showIp></test:showIp> </body> </html> |
1)控制是否执行标签体内容
执行:
jspFragment.invoke(null) 把标签体内容输出到浏览器
不执行:
什么都不做!!! (不执行jspFragment.invoke(null))
2)控制是否执行标签余下的内容
执行:
什么都不做!!!
不执行:
抛出SkipPageException异常即可!
3)控制重复出现执行标签体内容
原文地址:http://11926581.blog.51cto.com/11916581/1865340