FusionChartsFree的JSP标签开发

简介:

  写一个JSP标签,一个Java文件,一个标签定义,避免重复写好多嵌入FusionChartsFree的代码。

 

  第一步:定义标签属性等信息,编写TLD文件;

  第二步:编写标签处理的代码;  

  第三步:测试标签;

  第四步:打包发布。


   关键:TLD文件

   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<? xml  version = "1.0"  encoding = "UTF-8" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
                         "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
< taglib >
     < tlib-version >1.0</ tlib-version >
     < jsp-version >1.2</ jsp-version >
     < short-name >jrtz</ short-name >
     < uri >http://www.sunrise.com/jrtz</ uri >
     < tag >
         < name >fcf</ name >
         < tag-class >com.sunrise.broncho.tag.FusionChart</ tag-class >
         < body-content >JSP</ body-content >
         < description > <![CDATA[FusionChartsFree 图表组件应用在JSP页面]]> </ description >
         < attribute >
             < name >chartSWF</ name >
             < required >true</ required >
             < rtexprvalue >true</ rtexprvalue >
             < description > <![CDATA[FusionChart的模版图例文件名]]> </ description >
         </ attribute >
         < attribute >
             < name >divId</ name >
             < required >true</ required >
             < rtexprvalue >true</ rtexprvalue >
             < description > <![CDATA[图表所显示在的Div的Id]]> </ description >
         </ attribute >
         < attribute >
             < name >chartId</ name >
             < required >true</ required >
             < rtexprvalue >true</ rtexprvalue >
             < description > <![CDATA[图表的名称Id]]> </ description >
         </ attribute >
         < attribute >
             < name >dataXml</ name >
             < required >false</ required >
             < rtexprvalue >true</ rtexprvalue >
             < description > <![CDATA[数据源信息,XML数据源.如果使用XML数据源时,URL和XML同时存在优先使用XML数据源]]> </ description >
         </ attribute >
         < attribute >
             < name >dataUrl</ name >
             < required >true</ required >
             < rtexprvalue >true</ rtexprvalue >
             < description > <![CDATA[数据源信息,URL数据源.如果使用XML数据源时该参数设为:""即可]]> </ description >
         </ attribute >
         < attribute >
             < name >chartWidth</ name >
             < required >false</ required >
             < rtexprvalue >true</ rtexprvalue >
             < description > <![CDATA[图标显示的宽,默认值为300]]> </ description >
         </ attribute >
         < attribute >
             < name >chartHeight</ name >
             < required >false</ required >
             < rtexprvalue >true</ rtexprvalue >
             < description > <![CDATA[图标显示的高,默认值为180]]> </ description >
         </ attribute >
         < attribute >
             < name >deCode</ name >
             < required >false</ required >
             < rtexprvalue >true</ rtexprvalue >
             < description > <![CDATA[注意:仅在使用URL数据源下使用,对URL进行编码或解码,ture为解码,false为编码,默认值为false]]> </ description >
         </ attribute >
         < attribute >
             < name >charName</ name >
             < required >false</ required >
             < rtexprvalue >true</ rtexprvalue >
             < description > <![CDATA[注意:仅在使用URL数据源下使用,对URL进行编码解码的处理的字符名称,默认为:UTF-8]]> </ description >
         </ attribute >
     </ tag >
</ taglib >


FusionChartsFree的相关:http://aiilive.blog.51cto.com/1925756/1267021

    关键:Java业务处理

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import  java.io.IOException;
import  java.io.UnsupportedEncodingException;
import  java.net.URLDecoder;
import  java.net.URLEncoder;
import  javax.servlet.jsp.JspException;
import  javax.servlet.jsp.tagext.TagSupport;
/**
  * 使用FusionChartsFree图标组件的标签支持类
  *
  * @author ZhangXiao
  * @time 2013-8-12
  */
public  class  FusionChart  extends  TagSupport {
     /**
      *
      */
     private  static  final  long  serialVersionUID = -455570295257618661L;
     private  String chartSWF =  "" ;
     private  String divId =  "" ;
     private  String dataUrl =  null ;
     private  String dataXml =  null ;
     private  String chartId = divId +  "chart" ;
     private  int  chartWidth =  300 ;
     private  int  chartHeight =  180 ;
     private  boolean  deCode =  false ;
     private  String charName =  "UTF-8" ;
     @Override
     public  int  doStartTag()  throws  JspException {
         try  {
             byte [] script = createScript().getBytes();
             pageContext.getOut().write( new  String(script,  "UTF-8" ));
         catch  (UnsupportedEncodingException e) {
             e.printStackTrace();
         catch  (IOException e) {
             e.printStackTrace();
         }
         return  super .doStartTag();
     }
     /**
      * 通过标签参数创建JavaScript脚本信息
      *
      * @return 返回图表渲染脚本
      */
     private  String createScript() {
         StringBuffer sb =  new  StringBuffer();
         sb.append( "<script type='text/javascript'>" );
         sb.append( "var fcf=new FusionCharts(" );
         sb.append( "'" );
         sb.append(chartSWF);
         sb.append( "', " );
         sb.append( "'" );
         sb.append(chartId);
         sb.append( "', " );
         sb.append( "'" );
         sb.append(chartWidth);
         sb.append( "', " );
         sb.append( "'" );
         sb.append(chartHeight);
         sb.append( "' ); " );
         if  (( this .dataUrl ==  null  &&  this .dataXml ==  null )
                 || ( this .dataUrl ==  ""  &&  this .dataXml ==  "" )) {
             sb =  new  StringBuffer();
             sb.append( "无有效数据支持!" );
         else  {
             // 数据源的选取,XML和URL都存在时:优先选择XML
             if  ( this .dataXml !=  null ) {
                 sb.append( "fcf.setDataXML(\"" );
                 sb.append( this .dataXml);
                 sb.append( "\"); " );
             else  {
                 sb.append( "fcf.setDataURL('" );
                 if  (! this .deCode) {
                     sb.append( this .encode( this .dataUrl));
                 else  {
                     sb.append( this .decode( this .dataUrl));
                 }
                 sb.append( "'); " );
             }
             sb.append( "fcf.render('" );
             sb.append( this .divId);
             sb.append( "'); " );
             sb.append( "</script>" );
         }
         return  sb.toString();
     }
     /**
      * 对URL进行解码
      *
      * @param url
      * @return 返回解码字符串
      */
     private  String decode(String url) {
         try  {
             return  URLDecoder.decode(url,  this .charName);
         catch  (UnsupportedEncodingException e) {
             e.printStackTrace();
         }
         return  url;
     }
     /**
      * 对URL进行编码
      *
      * @param url
      * @return 返回编码字符串
      */
     private  String encode(String url) {
         try  {
             return  URLEncoder.encode(url,  this .charName);
         catch  (UnsupportedEncodingException e) {
             e.printStackTrace();
         }
         return  url;
     }
}

 

 关于测试参见附件例子FusionChartsFree JSP Tag web工程,例子文件要去掉.txt后缀。



本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1285886,如需转载请自行联系原作者

相关文章
|
6月前
|
前端开发 安全 Java
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
41 0
|
8月前
|
前端开发 安全 Java
Java服务器端开发实战:利用Servlet和JSP构建动态网站
【6月更文挑战第23天】**Servlet和JSP在Java Web开发中扮演关键角色。Servlet处理业务逻辑,管理会话,JSP则结合HTML生成动态页面。两者协同工作,形成动态网站的核心。通过Servlet的doGet()方法响应请求,JSP利用嵌入式Java代码创建动态内容。实战中,Servlet处理数据后转发给JSP展示,共同构建高效、稳定的网站。虽然新技术涌现,Servlet与JSP仍为Java Web开发的基石,提供灵活且成熟的解决方案。**
108 8
|
8月前
|
搜索推荐 Java 数据库连接
探索Java Web开发:Servlet与JSP的协同工作原理
【6月更文挑战第23天】Java Web开发中,Servlet和JSP协同打造动态网站。Servlet是服务器端的Java程序,处理HTTP请求并执行复杂逻辑;JSP则结合HTML和Java,生成动态内容。Servlet通过`doGet()`等方法响应请求,JSP在首次请求时编译成Servlet。两者常搭配使用,Servlet处理业务,JSP专注展示,通过`RequestDispatcher`转发实现数据渲染。这种组合是Java Web应用的基础,即使新技术涌现,其价值仍然重要,为开发者提供了强大的工具集。
87 7
|
8月前
|
自然语言处理 前端开发 Java
Servlet与JSP:Java Web开发的基石技术详解
【6月更文挑战第23天】Java Web的Servlet与JSP是动态网页的核心。Servlet是服务器端的Java应用,处理HTTP请求并响应;JSP则是结合HTML与Java代码的页面,用于动态内容生成。Servlet通过生命周期方法如`init()`、`service()`和`destroy()`工作,而JSP在执行时编译成Servlet。两者在MVC架构中分工,Servlet处理逻辑,JSP展示数据。尽管有Spring MVC等框架,Servlet和JSP仍是理解Web开发基础的关键。
140 12
|
8月前
|
缓存 安全 小程序
从基础到进阶:掌握Java中的Servlet和JSP开发
【6月更文挑战第23天】Java Web开发中的Servlet和JSP是关键技术,用于构建动态网站。Servlet是服务器端小程序,处理HTTP请求,生命周期包括初始化、服务和销毁。基础Servlet示例展示了如何响应GET请求并返回HTML。随着复杂性增加,JSP以嵌入式Java代码简化页面创建,最佳实践提倡将业务逻辑(Servlet)与视图(JSP)分离,遵循MVC模式。安全性和性能优化,如输入验证、HTTPS、会话管理和缓存,是成功应用的关键。本文提供了一个全面的学习指南,适合各级开发者提升技能。
78 7
|
8月前
|
存储 缓存 安全
Servlet与JSP在Java服务器端开发中的实践与优化
【6月更文挑战第23天】本文探讨了Java中Servlet与JSP在在线书店系统开发中的应用,强调了它们在动态网站构建和Web效率中的作用。通过实例,展示了Servlet如何作为控制器处理用户登录,JSP则利用EL表达式呈现数据。此外,文章提及了性能优化如分页和缓存,以及安全措施如防止SQL注入和XSS攻击,强调了全面掌握和应用这些技术的重要性,以创建高效、安全的Web应用。
67 7
|
8月前
|
XML SQL Java
JSP 教程 之 JSP 标准标签库(JSTL) 6
**JSP JSTL 摘要:** JSTL是JSP的标签库,包含核心、格式化、SQL、XML和函数5类标签。它用于执行常见任务,如迭代、条件判断和XML操作。JSTL函数库提供字符串处理函数,如`contains()`, `endsWith()`, `escapeXml()`等,方便XML和HTML处理。通过`&lt;%@ taglib %&gt;`导入,如`fn:trim()`用于去除字符串两端空白。
53 5
|
8月前
|
SQL XML Java
JSP 教程 之 JSP 标准标签库(JSTL) 4
**JSP的JSTL是用于简化Web开发的标签库,包括核心、格式化、SQL、XML和函数5个部分。SQL标签库允许与数据库交互,如设定数据源、执行查询和更新,以及处理参数。例如, `&lt;sql:setDataSource&gt;` 定义数据源, `&lt;sql:query&gt;` 执行查询。通过使用JSTL,开发者能更整洁地处理JSP页面。**
66 8
|
8月前
|
SQL druid Java
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
58 0
|
8月前
|
XML SQL Java
JSP 教程 之 JSP 标准标签库(JSTL) 1
JSP的JSTL是用于简化页面逻辑的标签库,涵盖核心、格式化、SQL、XML和函数五大类标签。要安装,下载Apache的JSTL包,将jar文件放入WEB-INF/lib,tld文件复制到WEB-INF,并在web.xml中配置相应的taglib信息。JSTL促进了JSP页面的清洁和结构化。
62 5