JSTL,自定义一个标签的功能案例

时间:2021-08-07 02:53:18

1.自定义一个带有两个属性的标签<max>,用于计算并输出两个数的最大值;

2.自定义一个带有一个属性的标签<lxn:readFile  src=“”>,用于输出指定文件的内容;

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

首先在src目录下建立一个类:MaxTag,其继承于父类:SimpleTagSupport,里边可实现两个数比较的方法

package com.lanqiao.javatest;

import java.io.IOException;

import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.JspTag;
import javax.servlet.jsp.tagext.SimpleTag;
import javax.servlet.jsp.tagext.SimpleTagSupport; public class MaxTag extends SimpleTagSupport{
private String num1;
private String num2; public void setNum1(String num1) {
this.num1 = num1;
} public void setNum2(String num2) {
this.num2 = num2;
} public void doTag() throws JspException, IOException{
int a;
int b; PageContext pageContext=(PageContext)getJspContext(); JspWriter out=pageContext.getOut();
try {
a=Integer.parseInt(num1);
b=Integer.parseInt(num2);
out.print(a > b ? a:b);
} catch (Exception e) {
out.print("输入的格式不正确!!!");
}
} }

在src目录下建立一个类:ReadFileTag,其继承于父类:SimpleTagSupport,使用了正则表达式,对文件中带有的标签进行转化,实现文件在页面上显示;

package com.lanqiao.javatest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.regex.Pattern; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport; public class ReadFileTag extends SimpleTagSupport{ //相对于当前 WEB 应用的根路径的文件名
private String src; public void setSrc(String src) {
this.src = src;
} @Override
public void doTag() throws JspException, IOException {
PageContext pageContext = (PageContext) getJspContext();
InputStream in = pageContext.getServletContext().getResourceAsStream(src);
BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String str = null;
while((str = reader.readLine()) != null){
//对文件中带标签的<>进行转化:使用了正则表达式
str = Pattern.compile("<").matcher(str).replaceAll("&lt");
str = Pattern.compile(">").matcher(str).replaceAll("&gt"); pageContext.getOut().println(str);
pageContext.getOut().println("<br>");
}
} }

在lib下,建立一个mytag.tld的xml文件,里面有一些配置,将jsp和class的数据进行连接;

<?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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0"> <!-- 描述 TLD 文件 -->
<description>MyTag 1.0 core library</description>
<display-name>MyTag core</display-name>
<tlib-version>1.0</tlib-version> <!-- 建议在 JSP 页面上使用的标签的前缀 -->
<short-name>lxn</short-name>
<!-- 作为 tld 文件的 id, 用来唯一标识当前的 TLD 文件, 多个 tld 文件的 URI 不能重复. 通过 JSP 页面的 taglib
标签的 uri 属性来引用. -->
<uri>http://www.lxn.com/mytag/core</uri> <!-- 描述自定义的 ReadFileTag 标签 -->
<tag>
<!-- 标签的名字: 在 JSP 页面上使用标签时的名字 -->
<name>readerFile</name> <!-- 标签所在的全类名 -->
<tag-class>com.lanqiao.javatest.ReadFileTag</tag-class> <!-- 标签体的类型 -->
<body-content>empty</body-content> <!-- 描述当前标签的属性 -->
<attribute>
<!-- 属性名 -->
<name>src</name> <!-- 该属性是否被必须 写-->
<required>true</required> <!-- rtexprvalue: runtime expression value 当前属性是否可以接受运行时表达式的动态值 -->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag> <tag>
<name>max</name>
<tag-class>com.lanqiao.javatest.MaxTag</tag-class>
<body-content>empty</body-content> <attribute>
<name>num1</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute> <attribute>
<name>num2</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag> </taglib>

最后建立一个jsp页面;在WEB-INF目录下建立一个note.file的file文件,实现读取的功能;

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <!-- 导入标签库(描述文件) -->
<%@ taglib uri="http://www.lxn.com/mytag/core" prefix="lxn"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body> <lxn:readerFile src="/WEB-INF/note.file"/> <lxn:max num2="${param.a }" num1="${param.b }"/> </body>
</html>

JSTL,自定义一个标签的功能案例的更多相关文章

  1. &lbrack;原创&rsqb;java WEB学习笔记40:简单标签概述(背景,使用一个标签,标签库的API,SimpleTag接口,创建一个自定义的标签的步骤 和简单实践)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  2. Java自定义简单标签

     Java自定义简单标签可以方便的在页面输出信息,并且对于权限的控制,和对于Jsp标签和servlet代码的分离有着很好的作用. 下面将以权限的控制为例自定义一个标签: 一.标签类型 <wxt: ...

  3. JSTL自定义标签

    这节我们总结一下JSTL自定义标签相关内容. 1. 自定义标签简介 自定义标签主要用于移除JSP页面中的Java代码.Jsp页面主要是用来显示给前台的,如果里面有过多的java代码的话,会显得很乱,但 ...

  4. 超全面的JavaWeb笔记day13&lt&semi;JSTL&amp&semi;自定义标签&gt&semi;

    1.JSTL标签库(重点) core out set remove url if choose when otherwise forEach fmt formatDate formatNumber 2 ...

  5. Java基础知识强化之IO流笔记55:IO流练习之 自定义类模拟LineNumberReader的获取行号功能案例

    1. 自定义类模拟LineNumberReader的获取行号功能案例 2. 代码实现: (1)MyBufferedReader.java: package cn.itcast_08; import j ...

  6. JSTL 自定义标签

    编写描述标签的tld文件,把这个文件放到web-inf/目录下,才能在jsp页面上调用自定义的标签 package test.yz; import java.io.IOException; impor ...

  7. JSTL自定义标签库 &lpar;二&rpar;

    要定义自己的标签,首先写个java类,extends TagSupport  或者 implements Tag ,然后在类体里实现自己想要的方法,或者覆盖父类的方法. 我定义的MyTag代码如下: ...

  8. Struts2自定义标签2自定义一个按班级id查询出该班级下的学生,存放进值栈,并遍历出来。

    Struts2自定义标签的流程概念: (1)需要两个类:标签类(继承相应的tag类),基本类(继承Component).标签类专门负责从客户端取得用户输入的一些属性,这个普通的jsp自定义标签一样,取 ...

  9. 实现一个自定义&lt&semi;table&gt&semi;标签

    需求是有两个自定义的标签<table>和<column> <table>有个items属性,负责导入数据 package hello; import java.ut ...

随机推荐

  1. jmeter分布式操作-远程启动功能探索

    一.背景: 之前在Jmeter插件监控服务器性能一篇中说到,在非GUI环境中监控时为了保存监控数据需要修改jmeter脚本,并且每次通过施压机(远程服务器,非GUI环境)来压测时都要将jmeter脚本 ...

  2. 在IIS启用MP4

    在Windows 2008 R2 Server中,网站无法播放MP4视频.我们需要在IIS的MIME type: 如果我们不想在IIS管理介面更改与设置,或是我们没有更多权限,这样我们可以项目的Web ...

  3. sp&lowbar;who&lowbar;lock

    USE MyDataBase GO /****** Object: StoredProcedure [dbo].[sp_who_lock] Script Date: 4/10/2015 ******/ ...

  4. 应用python编写简单新浪微博应用&lpar;一&rpar;

    转载至:http://blog.sina.com.cn/s/blog_6c39196501016o7n.html 首先,你要有一个新浪微博账号. 申请页面:http://weibo.com 其次,你要 ...

  5. tomcat架构

    很多开源应用服务器都是集成tomcat作为web container的,而且对于tomcat的servlet container这部分代码很少改动.这样,这些应用服务器的性能基本上就取决于Tomcat ...

  6. log4cxx在vs2013的静态编译

    网络上找了一圈,结果都是通过修改代码来编译,做为强迫症患者接受不了这种修改代码却无法预知代码带来影响的方式,而且没有静态编译的方法,为了方便其他人后续不在走弯路,提供自己的编译方法. 虽然最终的目的是 ...

  7. 一台windows主机上运行2个tomcat

    为了运行2个不同的项目,需要在一台机上运行2个tomcat,但是发现运行第二个tomcat时,总会加载第一个tomcat中的项目,也就是实际运行的是第一个tomcat 所以需要做如下配置: 1.修改第 ...

  8. 关于extern的使用

    学的时候不认真总结,用的时候就一堆bug. 上回也是调extern调了半天,今天又犯老毛病. data 比如说是要用到的的在main函数中不断刷新的量.那么这个unsigned int data 要写 ...

  9. vue初体验

    作为一个前端的小菜鸟,在平时的开发与学习中,除了要深入了解javascript 及 css 的各种特性,熟悉一门框架也是必不可少的.vue以其小巧,轻便,学习平滑等各种特性深受欢迎. 这里总结一下小菜 ...

  10. Tablacus Explorer双心封装版

    Tablacus Explorer双心封装版 http://cloud.189.cn/t/mYj67j7r2Afq (TablacusExplorer17.3.27双心封装版.exe) http:// ...