JSP/Servlet|| jsp三大指令的定义与使用

本文详细介绍了JSP的三大指令:Page指令、include指令和taglib指令。Page指令用于配置JSP页面属性,include指令用于静态包含其他页面,taglib指令则用于引入自定义标签库。通过实例演示了这三大指令的使用,包括如何配置Page指令的属性,include指令的两种写法,以及自定义标签的实现过程和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSP指令

JSP页面中的指令是JSP页面通知引擎如何处理自己的信息

语法格式:

<%@ directive attribute = "value" %>

指令可以有很多个属性,它们以键值对的形式存在,并用逗号隔开

JSP三大指令:

指令

描述

<%@ page ... %>

定义网页的依赖属性,比如脚本语言、error页面、缓存需求等等

<%@ include ... %>

包含其他文件,可以调用其他文件

<%@ taglib ... %>

引入标签库的定义,用来定义标签

Page指令:

一个JSP页面可以包含多个page指令。

<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" pageEncoding="utf-8" import="java.util.*,java.io.*" language="java" %>
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ page language="java" %>
<%@ page import="java.util.*,java.io.*"%>
<%@ page import="java.jdbc.*"%>

Page指令相关属性(来源于网络):

属性

描述

buffer

指定out对象使用缓冲区的大小

autoFlush

控制out对象的 缓存区

contentType

指定当前JSP页面的MIME类型和字符编码

errorPage

指定当JSP页面发生异常时需要转向的错误处理页面

isErrorPage

指定当前页面是否可以作为另一个JSP页面的错误处理页面

extends

指定servlet从哪一个类继承

import

导入要使用的Java类

info

定义JSP页面的描述信息

isThreadSafe

指定对JSP页面的访问是否为线程安全

language

定义JSP页面所用的脚本语言,默认是Java

session

指定JSP页面是否使用session

isELIgnored

指定是否执行EL表达式

isScriptingEnabled

确定脚本元素能否被使用

include指令

主要用于静态包含其它jsp页面,通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。

两种写法:

<%@ include file="relative url" %>
<jsp:directive.include file="relative url" />

现在,我们对上面这两个指令进行一个综合的案例,进行综合的运用

首先,我们建立三个简单jsp文件,在通过一个jsp文件运用include进行调用

main.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>全民制作人</title>
</head>
<body>
个人练习生
</body>
</html>

header.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>偶像练习生</title>
</head>
<body>
蔡徐坤
</body>
</html>

footer.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
鸡你太美!!!
</body>
</html>

上面的这三个示例中,page指令起到了配置属性的作用,具体的各个属性大家看上面的属性表,接下来我们创建一个include指令的对象,看看它具体怎么运作

incExample.jsp

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<html>
<head>
    <title>鸡你太美!!</title>
</head>
<body>
<%@include file="main.jsp"%>
<%@include file="header.jsp"%>
<%@include file="footer.jsp"%>
</body>
</html>

include对象将上面的jsp文件导入进来,这就有点类似于HTML里的href属性

接下来我们了解一下taglib指令

taglib指令

首先JSP是允许用户自定义标签,一个自定义标签库就是自定义标签的集合。Taglib指令可以引入一个自定义标签集合的定义,包括库路径、自定义标签。

比如,我们现在来定义一个属于自己的标签,需要对这个标签进行配置属性,来完成自己想要的功能

<aaa></aaa>

实现功能的类,我们用java来定义

mytag.java(碰到起始标签显示表格的处理类)

重写四个事件处理方法

doStartTag() 当碰到配置的起始标签时执行

doEndTag() 当碰到配置的结束标签时执行

doAfterBody() 当解析完标签体时执行

package edu.xalead.tag;

import javax.servlet.ServletContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.TagSupport;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

public class mytag extends BodyTagSupport {
    public String getColor() {
        return color;
    }
    public void setColor(String color){
        this.color = color;
    }

    private String color = "white";
    @Override
    public int doStartTag() throws JspException {
        try {
            //先要拿到ServletContext
            ServletContext servletContext = pageContext.getRequest().getServletContext();
            //先取出离线集
            ArrayList<ArrayList<String>> table = (ArrayList<ArrayList<String>>)servletContext.getAttribute("table");
            //渲染成表格输出
            //取输出字符流
            JspWriter pw = pageContext.getOut();
            pw.println("<table border='1' bgcolor='" + color + "'>");
            pw.println("<th>");
            pw.println("empno");
            pw.println("</th>");
            pw.println("<th>");
            pw.println("ename");
            pw.println("</th>");
            pw.println("<th>");
            pw.println("job");
            pw.println("</th>");
            pw.println("<th>");
            pw.println("mgr");
            pw.println("</th>");
            pw.println("<th>");
            pw.println("hiredate");
            pw.println("</th>");
            pw.println("<th>");
            pw.println("salary");
            pw.println("</th>");
            pw.println("<th>");
            pw.println("comm");
            pw.println("</th>");
            pw.println("<th>");
            pw.println("deptno");
            pw.println("</th>");
            for(int i=0;i<table.size();i++){
                pw.println("<tr>");
                ArrayList<String> row = table.get(i);
                for(int j = 0 ; j < row.size() ; j++){
                    pw.println("<td>");
                    pw.println(row.get(j));
                    pw.println("</td>");
                }
                pw.println("</tr>");
            }
            pw.println("</table>");

        } catch (IOException e) {
            e.printStackTrace();
        }
        return BodyTagSupport.SKIP_BODY;
    }

    @Override
    public int doEndTag() throws JspException {
        return super.doEndTag();
    }

    @Override
    public int doAfterBody() throws JspException {
        return super.doAfterBody();
    }
}

编写标签库描述文件(my.tld)

这个文件描述了什么名字的标签,由哪个处理类来处理,文件扩展名默认.tld,可以默认放到WEB-INF目录下

<?xml version="1.0" encoding="ISO-8859-1"?>

<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.0</tlib-version>
    <short-name>my</short-name>
    <uri>http://edu.xalead.tag</uri>

    <tag>

        <name>aaa</name>

        <tag-class>edu.xalead.tag.mytag</tag-class>

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

            <name>color</name>

            <required>false</required>

            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>

</taglib>

在应用自定义标签的页面中引用(taglib处理指令)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="my" uri="/WEB-INF/my.tld"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%-- aaaa标签在页面中显示一个context中的table属性的表格 --%>
<my:aaa color = "green">鸡你太美!!!</my:aaa>
</body>
</html>

输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值