JSP编程教程:JSP标签JSTL
一、JSP标签JSTL
1.JSTL介绍
JSTL:JAVA Server Page Standard Tag Library。JSP标准标签库。
目的:实现JSP页面无JAVA脚本。
tld文件用于描述标签库的配置文件。
2.配置JSTL
① 导入JSTL的JAR包。
② 进行指令的配置
<%@ taglib prefix="" uri="" %>
其值来自于jstl JAR包中MEAT-INF下。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3.使用
① 设置值
==pageContext.setAttribute(“i”,1)
② 获取值
${i }
③ 移除值
④ 捕获异常
<%int i = 5/0; %>
${excep }
${excep.message }
⑤ 切割
${st }
⑥ 数字循环
${i }
⑦ 判断
⑧ IF...ELSE
⑨ 循环遍历
⑩ 综合
List Emp emp = new Emp(); emp.setEname("ABC"); Emp emp1 = new Emp(); emp1.setEname("BCD"); Emp emp2 = new Emp(); emp2.setEname("CDE"); emps.add(emp); emps.add(emp1); emps.add(emp2); request.setAttribute("emps",emps); request.getRequestDispatcher("/jstl/jstl2.jsp") .forward(request, response); |
|
4.Sql标签
5.格式化标签
格式化时间:
pattern="yyyy-MM-dd HH:mm:ss"/>
另外也可以借助timeStyle属性:
格式化数字:
6.函数标签
Ø fn:contains判断在某一字符串中是否包含指定的子字符串
Example:${fn:contains("Hello","H")}
Ø fn:containsIgnoreCase依上,只是不再区分大小写
Ø fn:startsWith是否已某字符串开头
Ø fn:endsWith
Ø fn:indexOf判断子字符串在原字符串中出现的位置
Ø fn:split用于将一个字符串分割
Ø fn:join已某字符连接
Ø fn:replace使用新字符串替换原有字符串中的某一段子字符串
Ø fn:trim
Ø fn:substring用于从原有字符串截取一个子字符串
Ø fn:substringAfter获取截取指定字符串之后的所有字符
Ø fn:substringBefore与上相反
Ø fn:toUpperCase将所有字母转为大写
Ø fn:length
${fn:length("abc")} =====3
7.自定义标签
自定义标签是显示设计的,用于在JSP页面中添加功能。
目的:做类似于JSTL的标签。
步骤:
1.写标签的配置文件,tld文件
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"> |
2.写标签的实现类,继承TagSupport
public class MyTag extends TagSupport {
} |
3.页面引入
<%@ taglib prefix="my" uri="http://www.120.com" %> |
4.实现JAVA代码
setPageContext:设置page的上下文,通过PageContext可以获取request、out等对象。
setAttribute:设置tld文件中标签描述的属性。
doStartTag:标签开始处理事情
SKIP_BODY:标签内的文本忽略不输出
EVAL_BODY_INCLUDE:标签中的文本内容能输出
doEndTag:标签结束处理事情
EVAL_PAGE:继续执行页面剩下的HTML
SKIP_PAGE:跳过整个JSP页面后面的输出,后面的输出会被截断。
public class MyTag extends TagSupport {
private JspWriter out ; private String msg ; public String getMsg() { return msg; }
public void setMsg(String msg) { this.msg = msg; }
@Override public void setPageContext(PageContext pageContext) { this.out = pageContext.getOut(); }
@Override public int doStartTag() throws JspException { try { out.print("你好,"+msg+""); } catch (IOException e) { e.printStackTrace(); } return SKIP_BODY; }
@Override public int doEndTag() throws JspException { return EVAL_PAGE; } } |
5.告诉系统tld文件所在的位置,用于系统的加载。
|
作业:实现多语言翻译。有一个翻译表,里面存放中英文翻译,要求提供翻译标签,提供属性值为中文,此时将打印英文的输出结果。
注意:
rtexprvalue 用于设置自定义标签是否能是否EL表达式
body-content:值为empty表示标签中不能包含文本内容
值为jsp表示标签中可以包含文本内容