心得14--jsp遍历所有数据标签与转义标签

1.  开发遍历所有类型数据的标签

标签处理类:

package com.csdn.web.example;import java.io.IOException;import java.lang.reflect.Array;import java.util.ArrayList;import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.SimpleTagSupport;publicclass ForEachAll extends SimpleTagSupport{private Collection collection;private String var;private Object items;publicvoid setVar(String var) {this.var = var;}publicvoid setItems(Object items) {this.items = items;}@Overridepublicvoid doTag() throws JspException, IOException {//判断是否是Map 下面的三个判断可以在doTage()方法中也可以在setItems()方法中if(itemsinstanceof Map){//这里要把jsp页面传进来的属性强转为Map类型,不能new HashMapMap map = (Map) items;collection = map.entrySet();      }//判断是否是set、listif(itemsinstanceof Collection){collection = (Collection) items;}//判断是否是数组,各种数组if(items.getClass().isArray()){collection = new ArrayList();int len = Array.getLength(items);for(int i=0;i<len;i++){collection .add( Array.get(items, i));}}Iterator it = collection.iterator();while(it.hasNext()){Object obj = it.next();this.getJspContext().setAttribute(var,obj);this.getJspBody().invoke(null);}}}Jsp文件<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="example"  prefix="example"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>遍历各种类型数据</title></head><body><%List list = new ArrayList();list.add(1);list.add("aa");list.add("bb");list.add(2);request.setAttribute("list",list);%><example:forEachAll var="str" items="${list}">${ str }<br></example:forEachAll><hr><%Map map = new HashMap();map.put("1","aa");map.put(2,"aa");map.put(3,"aa");map.put(4,"aa");request.setAttribute("map",map);%><example:forEachAll items="${map}" var="map">${ map.key}-------${ map.value }<br></example:forEachAll><hr><%String[] strs = {"asd","fff","v","tt"};request.setAttribute("strs",strs);%><example:forEachAll items="${strs}" var="str">${str}<br></example:forEachAll><hr><%int[] i = {1,2,3,4};request.setAttribute("i",i);%><example:forEachAll items="${i}" var="num">${num}<br></example:forEachAll></body></html>注:描述文件与前面博客的forEach标签的定义一样,这里就不啰嗦的列出,不懂的可以去看上一篇博客2.     开发html转义标签案例分析:标签处理类:package com.csdn.web.example;import java.io.IOException;import java.io.StringWriter;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.JspFragment;import javax.servlet.jsp.tagext.SimpleTagSupport;publicclass HtmlFilter extends SimpleTagSupport {@Overridepublicvoid doTag() throws JspException, IOException {JspFragment jf = this.getJspBody();StringWriter sw = new StringWriter();jf.invoke(sw);String s = sw.toString();s = filter(s);this.getJspContext().getOut().write(s);}//这个模版文件tomcat下也有,可以参考那个。转移标签模版文件:D:\java\Tomcat\apache-tomcat-6.0.18\webapps\examples\WEB-INF\classes\utilpublic String filter(String message) {if (message == null)return (null);char content[] = newchar[message.length()];message.getChars(0, message.length(), content, 0);StringBuffer result = new StringBuffer(content.length + 50);for (int i = 0; i < content.length; i++) {switch (content[i]) {case'<':result.append("<");break;case'>':result.append(">");break;case'&':result.append("&");break;case'"':result.append(""");break;default:result.append(content[i]);}}return (result.toString());}}JSP文件<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="example" prefix="example" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>自定义转义标签</title></head><body><example:HtmlFilter><a href="">自定义转义标签</a></example:HtmlFilter></body></html>


 

3.  自定义标签不报错,但是结果不对的原因及处理

情况一:检查你的jsp页面上的taglib指令是否写了,如果写了,在检查一下你的uri路径是否正确;如果都正确,再看看你的tld描述文件中的tag标签定义的是否正确,它中的uri类路径是否正确,起的名字是否一致。

情况二:检查你的标签处理类是否正确,主要错误有你是不是忘了写输出到浏览器的代码,有两种形式:1).this.getJspContext().getOut().write(s);2).this.getJspBody.invoke(null);这两种输出分别是不同的输出,后者是JspFragment

类对象的输出,直接输出null就相当于情况一的输出;还有一点要注意的是:invoke()方法可以直接输出到浏览器也可以给它传一个流参数,常用的是StringWriter字符输出流,这是两种输出要同时配合使用,比如:

spFragment jf = this.getJspBody();

      StringWriter sw = new StringWriter();

      jf.invoke(sw);

      String s = sw.toString();

      s = filter(s);

      this.getJspContext().getOut().write(s);

但是大多数人会忘了最后一句的输出浏览器的代码,这是就是情况二常犯的错误了

4. 打包标签库

一般情况下直接打包就行,但是有时候打出来的包不能用,还需要导入你class文件中需要的类文件jar包,这时候你需要到tomcat下的,比如我的是D:\java\Tomcat\apache-tomcat-6.0.18\lib这个路径下导入jsp-api.jar和servlet-api.jar这两个文件。

把自定义的标签打到一个jar包中,就是要把标签处理类的字节码和标签库描述文件按照一定的存放方式添加到一个jar包中。具体做法如下。把标签处理类字节码和标签库描述文件按如下所示的结构组织。

   标签库描述符文件要放置在jar文件的META-INF目录下(这里注意META-INF的书写不要误写成MEAT-INF,本人就爱范这种低级错误,一定要正确,稍微写错一点就会导致打出来的包不能用);标签处理类字节码的根目录和META-INF目录平级放置。

可以利用myeclipse工具倒包,前面博客具体介绍过,这里再简单说一下:就是右键导出(export)项目,选择java下的jar文件。具体如下图所示

如上图显示的.classpath和.project是jar包不需要的,可以不打进包中,所以不用勾选,然后点击Browse选择一个路径输出jar包,这就完成了打包,注意:这里是建一个java项目然后打包。打出来的是jar包用web项目打出的是war包。

也可以使用jar命令来创建jar文件,具体做法如下:jar cvf mytaglib_0.9.jar  META-INF(描述文件)  com(class字节码)完成这两个步骤之后,一个自定义标签库jar包就打好了,可以把它添加到任何想使用这个标签库的Web应用程序的WEB-INF/lib目录下使用了。

 

 

 

转载于:https://www.cnblogs.com/yangkai-cn/archive/2012/11/20/4017345.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IBM长文解读人工智能、机器学习和认知计算

来源&#xff1a;人工智能产业链联盟人工智能的发展曾经经历过几次起起伏伏&#xff0c;近来在深度学习技术的推动下又迎来了一波新的前所未有的高潮。近日&#xff0c;IBM 官网发表了一篇概述文章&#xff0c;对人工智能技术的发展过程进行了简单梳理&#xff0c;同时还图文并…

【包邮送书活动】20210928期-开奖通知

【抽奖活动开奖&#xff1a;20210928期】 奖品&#xff1a;包邮实体书 参与方式&#xff1a;CSDN点赞评论收藏文章即可参与、或公众号 开奖通知方式&#xff08;老是有人中奖联系不上&#xff0c;我很郁闷&#xff09;&#xff1a;朋友圈、blink、私信、发文 抽奖文章链接&…

师生脑信息传递的证据:部分学习还是整体学习?

来源 &#xff1a;华东师范大学心理与认知科学学院官网2018年8月&#xff0c;胡谊课题组的研究论文Interpersonal synchronization of inferior frontal cortices tracks social interactive learning of a song被神经影像国际权威期刊《NeuroImage》接受。该研究采用基于功能性…

第十四章 集合(List)

一、集合框架体系 集合&#xff1a; &#xff08;1&#xff09;可以动态保存任意多个对象。 &#xff08;2&#xff09;提供了一系列方便的操作对象的方法&#xff1a;add、remove、set、get等。 二、Collection 1. Collection 接口常用方法 &#xff08;1&#xff09;add&a…

【文末送书】知识体系目录

&#x1f345; 作者主页&#xff1a;不吃西红柿 &#x1f345; 简介&#xff1a;CSDN博客专家&#x1f3c6;、HDZ核心组成员&#x1f4aa;、C站周榜第一✌ &#x1f345; 粉丝专属福利&#xff1a;简历模板、PPT模板、知识体系、面试题库、技术互助。直接去文末领取 &#…

《日本制造业白皮书2018》深度解读:非连续创新、现场力、互联工业

日本三大部门共同撰写《日本制造业白皮书》作者&#xff1a;胡权来源&#xff1a; 工业4.0研究院2018年6月14日&#xff0c;日本经济产业省&#xff08;简称经产省&#xff09;发布了2018年的《日本制造业白皮书》。要了解日本制造业的情况&#xff0c;就全面性和系统性而言&am…

耗时n年,38页《数据仓库知识体系.pdf》(数据岗位必备)

文末下载PDF 文章很长&#xff0c;前言一定要看 拥有本篇文章&#xff0c;意味着你拥有一本完善的书籍&#xff0c;本篇文章整理了数据仓库领域&#xff0c;几乎所有的知识点&#xff0c;文章内容主要来源于以下几个方面&#xff1a; 源于「数据仓库交流群」资深数据仓库工程…

使用detours实现劫持

第一步&#xff1a;下载detours3.0&#xff0c;安装detours 第二步&#xff1a;构建库文件&#xff0c;nmake编译 第三步&#xff1a;包含库文件和头文件 #include “detours.h” //载入头文件 #pragma comment(lib,”detours.lib”) //表明要使用静态库 第四步&#xf…

Gartner2018新兴技术成熟度曲线:人机界线日益模糊!

来源&#xff1a;云头条摘要&#xff1a;Gartner公司的2018年新兴技术成熟度曲线上35项值得关注的代表性技术揭露了五种明显的新兴技术趋势&#xff0c;它们将模糊人与机器之间的界线。2018年新兴技术成熟度曲线是从2000多种技术筛选出来的。Gartner公司的2018年新兴技术成熟度…

1万字,阿珊学习笔记《前端基础知识》小白入门导读(建议收藏)

&#x1f345; 作者&#xff1a;阿珊 &#x1f345; 作者简介&#xff1a;95后前端小姐姐&#xff0c;蓝桥签约作者&#xff0c;欢迎点赞、收藏、评论 &#x1f345; 粉丝专属福利&#xff1a;知识体系、面试题库、技术互助、简历模板。文末公众号领取 &#x1f345; 包邮送书&…

①万字《详解canvas api画图》小白前端入门教程(建议收藏)

&#x1f345; 作者&#xff1a;阿珊 &#x1f345; 作者简介&#xff1a;95后前端小姐姐&#xff0c;蓝桥签约作者&#xff0c;欢迎点赞、收藏、评论 &#x1f345; 粉丝专属福利&#xff1a;知识体系、面试题库、技术互助、简历模板。文末公众号领取 &#x1f345; 包邮送书&…

新科技快速指南系列之“量子计算”:历史、现在与未来

来源&#xff1a;36Kr摘要&#xff1a;当计算机变更小或者变更快时&#xff0c;就会发生下一个大事件&#xff08;Big Things&#xff09;。量子计算的出现&#xff0c;是为了追求技术史上最大的性能提升。当计算机变更小或者变更快时&#xff0c;就会发生下一个大事件&#xf…

使用C与C++混合编程封装UDP协议

引入头文件&#xff0c;导入lib文件 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <WinSock2.h>#pragma comment(lib,"Ws2_32.lib")2. 在头文件中声明&#xff0c;由于是C中调用C代码需要使用extern关键字extern …

数据倾斜?几招把你安排的板板正正的!

&#x1f345; 作者&#xff1a;不吃西红柿 &#x1f345; 简介&#xff1a;CSDN博客专家&#x1f3c6;、HDZ核心组成员&#x1f4aa;、C站总榜前10名✌ &#x1f345; 粉丝专属福利&#xff1a;文末公号「信息技术智库」回复「资料」领取 &#x1f345; 如觉得文章不错&…

数据解读:资本追逐的14个人工智能细分领域

来源&#xff1a;亿欧摘要&#xff1a; 2014年后&#xff0c;人工智能逐渐成为中国私募市场的“宠儿”&#xff0c;投资风口也逐渐形成。亿欧智库最新推出的《2018中国人工智能投资市场研究报告》中&#xff0c;挖掘了14个行业中最受追捧的细分领域。2012年&#xff0c;深度学习…

【举栗说明】JavaScript作用域,一次性给你总结!

&#x1f345; 作者&#xff1a;阿珊 &#x1f345; 作者简介&#xff1a;95后前端小姐姐&#xff0c;蓝桥签约作者&#xff0c;欢迎点赞、收藏、评论 &#x1f345; 粉丝专属福利&#xff1a;知识体系、面试题库、技术互助、简历模板。文末公众号领取 &#x1f345; 包邮送书&…

反思腾讯:大数据与AI时代的危与机

来源&#xff1a;华尔街见闻摘要&#xff1a;过去十数年&#xff0c;腾讯从一个桌面即时通讯工具进化成为一个庞大的数字帝国&#xff0c;是全球互联网公司失控性进化的先行者和光辉典范。过去十数年&#xff0c;腾讯从一个桌面即时通讯工具进化成为一个庞大的数字帝国&#xf…

poj 1015(dp)

看的解题报告。。http://blog.csdn.net/lyy289065406/article/details/6671105 View Code 1 #include <iostream>2 #include <cstdio>3 #include <cstring>4 #include <algorithm>5 6 using namespace std;7 8 int dp[22][805];9 int path[22][805]; …

cocos2dx实现经典飞机大战

游戏开始层 #ifndef __LayerGameStart_H__ #define __LayerGameStart_H__ #include "cocos2d.h" USING_NS_CC;class LayerGameStart :public CCLayer { public:static CCScene * scene();CREATE_FUNC(LayerGameStart);bool init();void addStartGamePicture();void …

【包邮送书活动】20211018期-开奖通知

奖品&#xff1a;包邮实体书 参与方式&#xff1a;CSDN点赞评论收藏文章即可参与、或公众号 开奖通知方式&#xff08;老是有人中奖联系不上&#xff0c;我很郁闷&#xff09;&#xff1a;朋友圈、blink、私信、发文 抽奖程序说明&#xff1a;https://notomato.blog.csdn.ne…