java web tag文件使用

tag文件简单创建和使用

  1. 创建标记文件(.tag)
  2. 在标记文件中写入信息
  3. 在jsp文件中,引入标记文件
  4. 通过关键字调用标记文件

举例说明:

标记文件(show.tag)

<%@ tag language="java" pageEncoding="UTF-8"%>
<body bgcolor=yellow><P>
<% int size=1;
       for(int i=1;i<=3;i++) {
          size=size+1;
%> <font size=<%=size%>>
         <jsp:doBody />
       </font>
<% }
%> </P></body>

jsp文件

//先使用taglib指令引入标记库

<%@taglib prefix="look" tagdir="/WEB-INF/tags" %>
//使用<标记前缀:定义好的标记名>调用标记(注意:标记名和文件名大小写一致)

 <look:Show>
                 开开心心,快快乐乐.
  </look:Show>

工作原理:

JSP 引擎把Tag文件转换成Java文件,并编译成class文件供JSP程序动态调用。标记体传给Tag文件, Tag文件使用接受标记体信息。

Tag文件中的常用指令

tag指令设置方法

Tag文件中的tag指令类似于JSP文件中的page指令。Tag文件通过使用tag指令可以指定某些属性的值,以便从总体上影响Tag文件的处理和表示。tag指令的语法如下:

 <%@ tag 属性1="属性值" 属性2="属性值" …属性n="属性值"%>

在一个Tag文件中可以使用多个tag指令:

<%@ tag 属性1="属性值"%>
<%@ tag 属性2="属性值"%>
……
<%@ tag 属性n="属性值"%>

tag指令属性介绍

tag指令属性有下面4个body-contentlanguageimportpageEncoding. 来对他们做一下介绍.

body-content属性

属性值有:emptytagdependentscriptless,默认值是scriptless

+ Empty:JSP页面必须使用没有标记体的Tag标记

language属性

指定Tag文件使用的脚本语言,目前只能取值java,其默认值就是java。

import属性

为Tag文件引入Java核心包中的类。import属性可以取多个值。import属性已经有如下值:

"java.lang.*"、 "javax.servlet.*"、
"javax.servlet.jsp.*"、"javax.servlet.http.*"

pageEncoding属性

指定Tag文件的字符编码,其默认值是ISO-8859-1。

include指令

使用方法和作用与JSP文件中的include指令标记类似。

include指令标记的作用是在Tag文件中出现该指令的位置处,静态插入一个文件。

其语法格式如下:

<%@ include file= "文件的URL " %> 

attribute指令

在Tag文件中通过使用attribute指令,可以让使用它的JSP页面向该Tag文件传递需要的数据,增强Tag文件功能。指令的格式如下:

<%@ attribute name="对象名字" required="true"|"false" type="对象的类型"%>
  • name属性是必需的,JSP页面向它传递一个引用。

比如,一个Tag文件MyTag.tag中有如下attribute指令:

<%@ attribute name="length" required="true" %>

那么JSP页面就可以如下使用Tag标记(假设标记的前缀为computer)调用MyTag.tag:

<computer:MyTag length="1000" />
或
<computer:MyTag length="1000" >
我向Tag文件中传递的值是1000
<computer:MyTag /> 
  • required属性可选。缺省值是false。若设为true,则JSP页面必须向Tag文件的attribute属性传递一个引用,否则出错。
  • type属性指定对象的类型。如type=“Java.util.Date”,如果缺省,则类型是java.lang.String。

举例说明

标记文件(.tag)

<%@ tag language="java" pageEncoding="UTF-8"%>
 <h4> 这是一个Tag文件, 负责计算三角形的面积</h4>

<%@ attribute name="sideA" required="ture" %>
<%@ attribute name="sideB" required="ture" %>
<%@ attribute name="sideC" required="ture" %>

<%! public String getArea(double a, double b, double c){
        if(a+b > c && a+c > b && c+b>a){
            double p = (a + b+ c)/2.0;
            double area = Math.sqrt(p* (p-a) *(p-b) *(p-c));
            return "<BR> 三角形的面积: "+ area;
        }else{
            return("<BR>"+ a + "," + b + "," + c + "不能构成三角形, 无法计算");
        }
    }
%>

<%
    out.println("<br> JSP页面传过来的三条边:" + sideA + "," + sideB + "," + sideC);
    double a = Double.parseDouble(sideA);
    double b = Double.parseDouble(sideB);
    double c = Double.parseDouble(sideC);
    out.println(getArea(a, b, c));
 %>

jsp文件

//通过下面代码调用, 参数sideA, sideB, sideC其中一个忘记传了,则代码会出错
 <h1>tag文件书上例子</h1>
    <look:Triangle sideA="5" sideB="6" sideC="7" />

variable指令

Tag文件通过使用variable指令可以将Tag文件中的对象返回给调用该Tag文件的JSP页面。

variable指令的格式

<%@ variable name-given=“对象名字” variable-class=“对象的类型” scope=“有效范围”%>

例: <%@ variable name-given="time" variable-class="java.util.Date" scope="AT_END" %> 
  • name-given属性是必需的。
  • variable-class可以是java.lang.String(缺省值)等类型。
  • scope属性表示在JSP页面中何时何地可以使用返回的对象。
    1. AT_BEGIN: 一旦开始使用Tag标记,就可以在任何地方用对象;
    2. NESTED:只可以在标记体中使用对象;
    3. AT_END:只可以在标记结束后才可以使用对象;

完成了上面操作是不够的,还需要执行下面代码:

jspContext.setAttribute(“time”,new Date());

Tag文件只有将对象信息存储到jspContext中,JSP页面才可以使用该对象。

注:在tag文件中,不可以对variable中声明的将要返回给jsp页面的数据进行操作。

taglib指令

一个Tag文件可以使用Tag标记来调用其它的Tag文件。其实tag文件中使用其他tag,方法和jsp文件中使用tag文件方法一样。Tag文件也必须使用指令引入该Web服务目录下的标记库,才可以使用Tag标记来调用相应的Tag文件。

指令的格式如下:

<%@ taglib tagdir="自定义标记库的位置" prefix="前缀">

一个Tag文件也可以使用几个指令标记引入若干个标记库,例如:

<%@ taglib tagdir="/WEB-INF/tags" prefix="beijing"%>
<%@ taglib tagdir="/WEB-INF/tags/tagsTwo" prefix="dalian"%> 。

举例说明

index.jsp文件

<h1>tag文件中调用tag文件</h1>
<look:FirstTag number="6"/>
<look:FirstTag number="8" />

Frist.tag

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ tag import="java.util.*" %>
<%@ taglib tagdir="/WEB-INF/tags" prefix="getNumber"%>
<%@ attribute name="number" required="true" %>
   <getNumber:SecondTag number="<%=number%>"/>
   <% out.println("得到"+number+"个随机数:");
       for(int i=0;i<listNumber.size();i++)                 //listNumber是SecondTag文件返回的对象
              out.print((Integer)listNumber.get(i)+"  ");
       out.println("<br>按从小到大排列:");
       for(int i=0;i<listNumber.size();i++){
             for(int j=i+1;j<listNumber.size();j++){
                int a=((Integer)listNumber.get(i)).intValue();
                int b=((Integer)listNumber.get(j)).intValue();
                if(b<a){
                      Integer temp=(Integer)listNumber.get(i);
                      listNumber.set(i,(Integer)listNumber.get(j));
                      listNumber.set(j,temp);
                }
            }
       }
       for(int i=0;i<listNumber.size();i++)
              out.print((Integer)listNumber.get(i)+"  ");
       int sum=0;
      for(int i=0;i<listNumber.size();i++)
           sum=sum+((Integer)listNumber.get(i)).intValue();
      out.println("<br>得到的"+number+"个随机数之和:"+sum+"<br>");
%>

Second.tag

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ tag import="java.util.*" %>
<%@ attribute name="number" required="true"   %>
<%@ variable name-given="listNumber"
                        variable-class="java.util.LinkedList" scope="AT_END" %>
<%   int count=Integer.parseInt(number);
         LinkedList listBox=new LinkedList(),
                listNeeded=new LinkedList();
        for(int k=1;k<=4;k++)
            for(int i=1;i<=13;i++)
               listBox.add(new Integer(i));
       while(count>0) {
            int m=(int)(Math.random()*listBox.size());
            Integer integer=(Integer)listBox.get(m);
            listNeeded.add(integer);
            listBox.remove(m);
            count--;
      }
      jspContext.setAttribute("listNumber",listNeeded);    //·μ??listNumber
%>

Tag标记嵌套

使用Tag标记时,可以带有标记体,标记体还可以是一个Tag标记,实现Tag标记的嵌套。

Tag标记中的标记体由Tag文件的标记负责处理,而在Tag文件中,标记被替换成对“标记体”进行处理后所得到的结果。

举例说明

index.jsp


 <%@ page contentType="text/html;charset=gb2312" %>
 <%@ taglib tagdir="/WEB-INF/tags" prefix="ok"%>
 <html><body>
 <p>
 <Font size=2>Tag标记嵌套显示学生名单:</Font>
 <table border=1>
    <ok:Biaoge color="#a9f002" name="姓名" sex="性别">
        <ok:Biaoge  color="cyan" name="张三" sex="男"/>
        <ok:Biaoge  color="#afc0ff" name="李小花" sex="女"/>
        <ok:Biaoge  color="pink" name="孙六" sex="男"/>
        <ok:Biaoge  color="#ffaaef" name="赵扬" sex="女"/>
    </ok:Biaoge>
 </table>
 </body></html>
注意:红笔为嵌套部分,以/结束。

Biaoge.tag

 <%@ tag language="java" pageEncoding="UTF-8"%>
 <%@ attribute name="color" %>   <!-- 接收数据 -->
 <%@ attribute name="name" %>
 <%@ attribute name="sex" %>
  <tr bgcolor=“<%=color%>”>         <!-- //表格显示 -->
      <td width=60><%=name%></td>
      <td width=60><%=sex%></td>
  </tr>
  <jsp:doBody/>

原文地址:https://www.cnblogs.com/wahaha603/p/9842659.html

时间: 2024-10-11 09:28:36

java web tag文件使用的相关文章

java+web+大文件上传下载

文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦.缺乏交互.用户体验差. 一.前端代码 英国程序员Remy Sharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用HTML5的API,对文件上传进行渐进式增强:     * iframe上传  * ajax上传  * 进度条  * 文件预览  * 拖放上传 1.1 传统形式 文件上传的传统形式,是使用表单元素file,参考 http://www.ruanyifeng.com/blog/2012/08/file_

java web(四)文件上传与下载

一.文件上传原理 1.在TCP/IP中,最早出现的文件上传机制是FTP ,它是将文件由客户端发送到服务器的标准机制:但是在jsp使用过程中不能使用FTP方法上传文件,这是由jsp运行机制所决定. 通过为表单元素设置 method="post" enctype="multipart/form-data" 属性 ,让表单提交的数据以二进制编码的方式提交,在接受此请求的Servlet中用二进制流来获取内容,就可以取得上传文件的内容,从而实现文件的上传. 2.表单encty

Java Web(十一) 文件上传与下载

文件上传 上传的准备工作 表单method必须为post 提供file组件 设置form标签的enctype属性为multipart/form-data,如果没有设置enctype属性,浏览器是无法将文件自身传递到服务端的(enctype默认为application/x-www-form-urlencoded) <form action="fileupload.do" method="post" enctype="multipart/form-dat

java web 实现文件夹上传(保留目录结构)

javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 <form id="postForm" action="${pageContext.request.contextPath}/UploadServlet" method="post" enctype="multipart/form-data"> <

Java web开发——文件的上传和下载

一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传:支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传.刷新页面后继续传输.关闭浏览器后保留进度信息. 支持文件夹批量上传下载,服务器端保留文件夹层级结构,服务器端文件夹层级结构与本地相同. 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验:支持文件夹上传,文件夹中的文件数量达到1万个以上,且包含层级结构. 支持断点续传,关闭浏览器或刷新浏览

java web服务器文件的下载(有下载弹出匡)

昨天做了一个文件从服务下载的功能,怎么都不弹出页面,下载框.后查询得知.目前两种方法 1.<a href='下载路径' /> 2.window.location.href = basePath + "downloadTemplate.do?template=huiyuan"; 通过 这两种方式可以有这种弹出窗 希望能帮助,遇到和我一样问题的朋友~ 附下载的工具类,可直接复制可用 public void downloadFile(String filePath,String

Java Web应用中自动实时检测资源文件内容变化

在Java Web应用中,我们经常需要配置文件来定制系统行为,这些配置文件可能包括:类路径下的文件和文件夹.非类路径下的绝对路径和相对路径的文件和文件夹,在分布式环境中,还需要通过HTTP从统一集中的Web服务器中获得配置信息,如何对这些配置信息进行自动加载并实时检测变化呢? Java分布式中文分词组件 - word分词已经实现了这个功能,我们看看是如何实现的: package org.apdplat.word.util; import java.io.BufferedReader; impor

VS2010 根据WSDL文件(java Web Service)生成.cs文件

我们添加webService引用,一般是通过 添加服务引用完成的,其实 添加服务引用 在背后为我们生成了代理类. 我们手动生成代理类方法: 1.通过java Web Service,生成wsdl文件: 1.1.IE地址栏中输入wsdl的url 例如:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl 1.2.通过IE的 [文件]-->[另存为]-->文件名中输入 UserService55.wsdl, 保存类型:

阿里云Ubuntu部署java web - 文件夹

文件夹(点击章节标题阅读): 阿里云Ubuntu部署java web(1) - 系统配置 ssh链接server(使用终端远程链接)        加入用户        给用户赋予运行sudo权限        软件安装        链接到serverftp        分区和格式化        java和mysql环境安装 阿里云Ubuntu部署java web(2) - 配置tomcat 安装        更改端口        更改站点默认文件夹.以及加入多个站点 阿里云Ubun