Java JSP 常用标签及自定义标签

JSP中定义实体bean

<jsp:useBean id="clu" class="cn.domain.CacluBean"></jsp:useBean>
<jsp:getProperty property="propertyname" name="clu">

获取bean的属性值,并将值输出到页面上;

EL表达式:${实体对象名称}
el表达式取数据时,通常用.号,.号取不出来就用[]

pageContext.findAttribute("data");//page,request,session,application 查找的先后顺序

<!-- 在page中查找bean时,如果没有,则创建一个bean -->
<!-- 标签体中的内容只有创建bean(实例化)的时候才使用 -->

JSP 为bean赋值
<!-- 手动赋值 -->

<jsp:setProperty property="age" name="personbean" value="23" />
<!-- 请求参数赋值,请求数据支持把字符串转换为8种基本数据类型 -->
<jsp:setProperty property="age" name="personbean" param="age" />
<jsp:setProperty property="birthdty" name="personbean" value="<%=new Date() %>" />
<jsp:setProperty property="*" name="clu">设置bean的属性,用所有的请求参数为bean赋值;

导入Java类:

<%@ page import="cn.domain.*"%>
<!-- 静态包含:编译时就包含,把包含的所有jsp编译成一个servlet,效率性能比动态包含好-->

添加JSP自定义标签:

先添加一个tld文件到WEB-INF文件夹中

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd" version="2.0">

  <description>myTag</description>
  <display-name>JSTL core</display-name>
  <tlib-version>1.0</tlib-version>
  <short-name>cnweb</short-name>
  <uri>http://www.cnweb.cn</uri>

  <tag><!-- 一个tag标签对应一个自定义tag标签类 -->
    <description>MyTag</description>
    <name>when</name>
    <tag-class>cn.example.when</tag-class>
    <body-content>scriptless</body-content>
    <attribute>
    <name>test</name>
    <required>true</required>
    <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>
</taglib>

引用规则:

<%@ taglib uri="http://www.cnweb.cn" prefix="cnweb"%>

 定义错误处理页面:

<error-page>
  <exception-type>java.lang.Exception</exception-type>
  <location>/errors/error.jsp</location>
</error-page>
<error-page>
  <error-code>404</error-code>
  <location>/errors/error1.jsp</location>
</error-page>

自定义标签执行流程:

SimpleTagSupport

/* Jsp引擎遇到简单类,实例化该类;
* 调用setJspContext,把页面pageContext传递给标签处理类;
* 调用setParent把父标传递进去,如果没有,传递null
* 调用setJspBody方法,把封装了标签体JspFragment传递给标签处理器类
* 执行页面中的自定义标签,doTag()方法;-->执行完成,销毁对象
*/

JspFragment jf = this.getJspBody();
jf.invoke(this.getJspContext().getOut());//如果不显示则不进行处理

--------------------------------------------------------------------

    public class tagShowOrNot extends TagSupport {
        public int doStartTag() throws JspException {
            return Tag.EVAL_BODY_INCLUDE;// 显示body
            // return Tag.SKIP_BODY;//隐藏body
            // Tag.EVAL_PAGE;//显示page
            // Tag.SKIP_PAGE;//隐藏page
        }
    }

TagSupport
/*编写一个实现TagSupport的类;
*在tld文件中对标签处理器类进行描述(tld文件的位置:WEB-INF下)
*在jsp页面中导入和使用标签
*
*jsp执行过程中遇到自定义标签时,先实例化该类;
*然后执行方法:setPageContext()-->setParent()-->doStartTag()
*如果有标签体,一般会执行标签体;doEndTag()-->整个标签执行完后一般会执行:release()
*
*控制整个jsp页面是否执行;
*控制jsp页面某一部分内容是否执行;
*控制jsp页面内容重复执行;
*修改jsp页面内容输出;
*/

//该方法在执行标签体后,执行doEndTag()方法之前执行,直到该方法返回IterationTag.SKIP_BODY;

    public int doAfterBody() throws JspException {
        time--;
        System.out.println("重复" + time);
        if (time > 0) {
            return IterationTag.EVAL_BODY_AGAIN;
        } else
            return IterationTag.SKIP_BODY;
    }
原文地址:https://www.cnblogs.com/a284628487/p/2988994.html