TLD文件的解释术语:

标签库描述文件,用于存放标签名字和类的映射用的

标签库:它把类标签和后面的Java类映射起来,它减少了页面的代码,使页面更加的清晰,其实标签最后还是被解释成后台的java代码

原理是,在用户在jsp页面中使用标签时,系统首先会先到xml文件中的 标签中的《taglib-uri》和《taglib-location》这两对标签找到相对应的扩展名为tld文件,然后在 tld文件中的映射再找到相对应的taglib类。

创建的每个标签都必须在tld文件中声明,如果要在jsp页面用jsp的标签,必先先实现定义标签的类,然后在标签库描述文件(TLD)中将写好的类映射成jsp标签,然后在jsp页面中使用定义好的标签,然后就可以实现动态的jsp信息。
当需要使用自定义标签时就需要配置xml文件和tld文件
1、书写要配置的java代码:

/*** Copyright &copy; 2012-2014 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.*/
package com.newtouch.modules.cms.utils;import java.util.Collections;
import java.util.List;
import java.util.Map;import javax.servlet.ServletContext;import org.springframework.ui.Model;import com.google.common.collect.Lists;
import com.newtouch.common.config.Global;
import com.newtouch.common.mapper.JsonMapper;
import com.newtouch.common.persistence.Page;
import com.newtouch.common.utils.CacheUtils;
import com.newtouch.common.utils.SpringContextHolder;
import com.newtouch.common.utils.StringUtils;
import com.newtouch.modules.cms.entity.Article;
import com.newtouch.modules.cms.entity.Category;
import com.newtouch.modules.cms.entity.Link;
import com.newtouch.modules.cms.entity.Site;
import com.newtouch.modules.cms.service.ArticleService;
import com.newtouch.modules.cms.service.CategoryService;
import com.newtouch.modules.cms.service.LinkService;
import com.newtouch.modules.cms.service.SiteService;/*** 内容管理工具类* @author ThinkGem* @version 2013-5-29*/
public class CmsUtils {private static SiteService siteService = SpringContextHolder.getBean(SiteService.class);private static CategoryService categoryService = SpringContextHolder.getBean(CategoryService.class);private static ArticleService articleService = SpringContextHolder.getBean(ArticleService.class);private static LinkService linkService = SpringContextHolder.getBean(LinkService.class);private static ServletContext context = SpringContextHolder.getBean(ServletContext.class);private static final String CMS_CACHE = "cmsCache";/*** 获得站点列表*/public static List<Site> getSiteList(){@SuppressWarnings("unchecked")List<Site> siteList = (List<Site>)CacheUtils.get(CMS_CACHE, "siteList");if (siteList == null){Page<Site> page = new Page<Site>(1, -1);page = siteService.findPage(page, new Site());siteList = page.getList();CacheUtils.put(CMS_CACHE, "siteList", siteList);}return siteList;}/*** 获得站点信息* @param siteId 站点编号*/public static Site getSite(String siteId){String id = "1";if (StringUtils.isNotBlank(siteId)){id = siteId;}for (Site site : getSiteList()){if (site.getId().equals(id)){return site;}}return new Site(id);}/*** 获得主导航列表* @param siteId 站点编号* @param project 项目名称*/public static List<Category> getMainNavList(String siteId,String project){@SuppressWarnings("unchecked")List<Category> mainNavList = (List<Category>)CacheUtils.get(CMS_CACHE, "mainNavList_"+siteId);
//      if (mainNavList == null){*/Category category = new Category();category.setSite(new Site(siteId));category.setParent(new Category("1"));category.setInMenu(Global.SHOW);category.setProject(project);Page<Category> page = new Page<Category>(1, -1);page = categoryService.find(page, category);mainNavList = page.getList();CacheUtils.put(CMS_CACHE, "mainNavList_"+siteId, mainNavList);
//      }return mainNavList;}/*** 获取栏目* @param categoryId 栏目编号* @return*/public static Category getCategory(String categoryId){return categoryService.get(categoryId);}/*** 获得栏目列表* @param siteId 站点编号* @param parentId 分类父编号* @param number 获取数目* @param param  预留参数,例: key1:'value1', key2:'value2' ...*/public static List<Category> getCategoryList(String siteId, String parentId, int number, String param){Page<Category> page = new Page<Category>(1, number, -1);Category category = new Category();category.setSite(new Site(siteId));category.setParent(new Category(parentId));if (StringUtils.isNotBlank(param)){@SuppressWarnings({ "unused", "rawtypes" })Map map = JsonMapper.getInstance().fromJson("{"+param+"}", Map.class);}page = categoryService.find(page, category);return page.getList();}/*** 获取栏目* @param categoryIds 栏目编号* @return*/public static List<Category> getCategoryListByIds(String categoryIds){return categoryService.findByIds(categoryIds);}/*** 获取文章* @param articleId 文章编号* @return*/public static Article getArticle(String articleId){return articleService.get(articleId);}/*** 获取文章列表* @param siteId 站点编号* @param categoryId 分类编号* @param number 获取数目* @param param  预留参数,例: key1:'value1', key2:'value2' ...*          posid   推荐位(1:首页焦点图;2:栏目页文章推荐;)*          image   文章图片(1:有图片的文章)*          orderBy 排序字符串* @return* ${fnc:getArticleList(category.site.id, category.id, not empty pageSize?pageSize:8, 'posid:2, orderBy: \"hits desc\"')}"*/public static List<Article> getArticleList(String siteId, String categoryId, int number, String param){Page<Article> page = new Page<Article>(1, number, -1);Category category = new Category(categoryId, new Site(siteId));category.setParentIds(categoryId);Article article = new Article(category);if (StringUtils.isNotBlank(param)){@SuppressWarnings({ "rawtypes" })Map map = JsonMapper.getInstance().fromJson("{"+param+"}", Map.class);if (new Integer(1).equals(map.get("posid")) || new Integer(2).equals(map.get("posid"))){article.setPosid(String.valueOf(map.get("posid")));}if (new Integer(1).equals(map.get("image"))){article.setImage(Global.YES);}if (StringUtils.isNotBlank((String)map.get("orderBy"))){page.setOrderBy((String)map.get("orderBy"));}}article.setDelFlag(Article.DEL_FLAG_NORMAL);page = articleService.findPage(page, article, false);return page.getList();}/*** 获取链接* @param linkId 文章编号* @return*/public static Link getLink(String linkId){return linkService.get(linkId);}/*** 获取链接列表* @param siteId 站点编号* @param categoryId 分类编号* @param number 获取数目* @param param  预留参数,例: key1:'value1', key2:'value2' ...* @return*/public static List<Link> getLinkList(String siteId, String categoryId, int number, String param){Page<Link> page = new Page<Link>(1, number, -1);Link link = new Link(new Category(categoryId, new Site(siteId)));if (StringUtils.isNotBlank(param)){@SuppressWarnings({ "unused", "rawtypes" })Map map = JsonMapper.getInstance().fromJson("{"+param+"}", Map.class);}link.setDelFlag(Link.DEL_FLAG_NORMAL);page = linkService.findPage(page, link, false);return page.getList();}// ============== Cms Cache ==============public static Object getCache(String key) {return CacheUtils.get(CMS_CACHE, key);}public static void putCache(String key, Object value) {CacheUtils.put(CMS_CACHE, key, value);}public static void removeCache(String key) {CacheUtils.remove(CMS_CACHE, key);}/*** 获得文章动态URL地址* @param article* @return url*/public static String getUrlDynamic(Article article) {if(StringUtils.isNotBlank(article.getLink())){return article.getLink();}StringBuilder str = new StringBuilder();
//        str.append(context.getContextPath()).append(Global.getFrontPath());str.append(Global.getFrontPath());str.append("view-").append(article.getCategory().getId()).append("-").append(article.getId()).append(Global.getUrlSuffix());return str.toString();}/*** 获得栏目动态URL地址* @param category* @return url*/public static String getUrlDynamic(Category category) {if(StringUtils.isNotBlank(category.getHref())){if(!category.getHref().contains("://")){
//                return context.getContextPath()+Global.getFrontPath()+category.getHref();return Global.getFrontPath()+category.getHref();}else{return category.getHref();}}StringBuilder str = new StringBuilder();
//        str.append(context.getContextPath()).append(Global.getFrontPath());str.append(Global.getFrontPath());str.append("list-").append(category.getId()).append(Global.getUrlSuffix());return str.toString();}/*** 从图片地址中去除ContextPath地址* @param src* @return src*/public static String formatImageSrcToDb(String src) {if(StringUtils.isBlank(src)) return src;if(src.startsWith(context.getContextPath() + "/userfiles")){return src.substring(context.getContextPath().length());}else{return src;}}/*** 从图片地址中加入ContextPath地址* @param src* @return src*/public static String formatImageSrcToWeb(String src) {if(StringUtils.isBlank(src)) return src;if(src.startsWith(context.getContextPath() + "/userfiles")){return src;}else{return context.getContextPath()+src;}}public static void addViewConfigAttribute(Model model, String param){if(StringUtils.isNotBlank(param)){@SuppressWarnings("rawtypes")Map map = JsonMapper.getInstance().fromJson(param, Map.class);if(map != null){for(Object o : map.keySet()){model.addAttribute("viewConfig_"+o.toString(), map.get(o));}}}}public static void addViewConfigAttribute(Model model, Category category){List<Category> categoryList = Lists.newArrayList();Category c = category;if(null == c)return;boolean goon = true;do{if(c.getParent() == null || c.getParent().isRoot()){goon = false;}categoryList.add(c);c = c.getParent();}while(goon);Collections.reverse(categoryList);for(Category ca : categoryList){addViewConfigAttribute(model, ca.getViewConfig());}}
}

以获取链接列表为例即getArticleList方法

2.定义tld文件,必须位于WEB-INF目录或其子目录

<?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"><description>JSTL 1.1 functions library</description><display-name>JSTL functions cms</display-name><tlib-version>1.1</tlib-version><short-name>fnc</short-name><uri>http://java.sun.com/jsp/jstl/functionsc</uri><function><description>获取当前管理站点编号</description><name>getCurrentSiteId</name><function-class>com.newtouch.modules.cms.entity.Site</function-class><function-signature>java.lang.String getCurrentSiteId()</function-signature><example>${fnc:getCurrentSiteId()}</example>  </function><function><description>获取站点</description><name>getSite</name><function-class>com.newtouch.modules.cms.utils.CmsUtils</function-class><function-signature>com.newtouch.entity.cms.Site getSite(java.lang.String)</function-signature><example>${fnc:getSite(siteId)}</example>  </function><function><description>获取站点列表</description><name>getSiteList</name><function-class>com.newtouch.modules.cms.utils.CmsUtils</function-class><function-signature>java.util.List getSiteList()</function-signature><example>${fnc:getSiteList()}</example>  </function><function><description>获取主导航列表</description><name>getMainNavList</name><function-class>com.newtouch.modules.cms.utils.CmsUtils</function-class><function-signature>java.util.List getMainNavList(java.lang.String,java.lang.String)</function-signature><example>${fnc:getMainNavList(siteId,project)}</example>  </function><function><description>获取栏目</description><name>getCategory</name><function-class>com.newtouch.modules.cms.utils.CmsUtils</function-class><function-signature>com.newtouch.entity.cms.Category getCategory(java.lang.String)</function-signature><example>${fnc:getCategory(categoryId)}</example>  </function><function><description>获得栏目列表</description><name>getCategoryList</name><function-class>com.newtouch.modules.cms.utils.CmsUtils</function-class><function-signature>java.util.List getCategoryList(java.lang.String, java.lang.String, int, java.lang.String)</function-signature><example>${fnc:getCategoryList(siteId, parentId, number, param)}</example>  </function><function><description>获得栏目列表</description><name>getCategoryListByIds</name><function-class>com.newtouch.modules.cms.utils.CmsUtils</function-class><function-signature>java.util.List getCategoryListByIds(java.lang.String)</function-signature><example>${fnc:getCategoryListByIds(categoryIds)}</example>  </function><function><description>获取文章</description><name>getArticle</name><function-class>com.newtouch.modules.cms.utils.CmsUtils</function-class><function-signature>com.newtouch.entity.cms.Article getArticle(java.lang.String)</function-signature><example>${fnc:getArticle(articleId)}</example>  </function><function><description>获取文章列表</description><name>getArticleList</name><function-class>com.newtouch.modules.cms.utils.CmsUtils</function-class><function-signature>java.util.List getArticleList(java.lang.String, java.lang.String, int, java.lang.String)</function-signature><example>${fnc:getArticleList(siteId, categoryId, number, param)}</example>  </function><function><description>获取链接</description><name>getLink</name><function-class>com.newtouch.modules.cms.utils.CmsUtils</function-class><function-signature>com.newtouch.entity.cms.Link getLink(java.lang.String)</function-signature><example>${fnc:getLink(linkId)}</example>  </function><function><description>获取链接列表</description><name>getLinkList</name><function-class>com.newtouch.modules.cms.utils.CmsUtils</function-class><function-signature>java.util.List getLinkList(java.lang.String, java.lang.String, int, java.lang.String)</function-signature><example>${fnc:getLinkList(siteId, categoryId, number, param)}</example>  </function></taglib>

3、jsp页面的使用
引入tld文件

<%@ taglib prefix="fnc" uri="/WEB-INF/tlds/fnc.tld" %>
<c:forEach items="${fnc:getArticleList(site.id,'067a5a4fb0984b23930b40471bda24ac', 10, '')}" var="article"><li class="clear"><a class="clear" href="${ctxWx}${project}/news${article.url}" ><c:if test="${not empty article.imageSrc}"><img class="fl" src="${pageContext.request.contextPath}${article.imageSrc}" /><div class="fr"><h2>${fns:abbr(article.title,100)}</h2>   <p>${article.description}</p><p style="text-align:right;color:#999;line-height:0.7rem;height:0.7rem;"><fmt:formatDate value="${article.updateDate}" pattern="yyyy.MM.dd"/></p></div></c:if><c:if test="${empty article.imageSrc}"><div class="fr" style="width:100%"><h2>${fns:abbr(article.title,100)}</h2>   <p>${article.description}</p><p style="text-align:right;color:#999;line-height:0.7rem;height:0.7rem;"><fmt:formatDate value="${article.updateDate}" pattern="yyyy.MM.dd"/></p></div></c:if></a></li></c:forEach>

使用jsp和tld实现javaweb开发相关推荐

  1. 深入体验JavaWeb开发内幕——简述JSP中的自定义标签叫你快速学会

    转载自   深入体验JavaWeb开发内幕--简述JSP中的自定义标签叫你快速学会 自定义标签,顾名思义,就是自己定义的标签.那么我们为什么要自己定义一些标签呢? 我们知道,如果要在JSP中获取数据我 ...

  2. JavaWeb开发模式:C/S模式,B/S模式,JSP+JavaBean模式,JSP+Servlet+JavaBean模式

    JavaWeb开发模式 1.C/S开发模式 1.C/S架构:客户端Client/服务端Server: a.出现较早,主要应用于局域网内: b.胖客户端:需要特定软件支持(安装客户端) 逻辑关系图如下: ...

  3. JAVAWEB开发模式之JSP的几种开发模式、处理Cookie中文乱码

    JSP开发模式 SUN公司推出JSP技术后,同时也推荐了两种WEB应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. JSP+JavaBean ...

  4. JavaWeb学习总结(一)——JavaWeb开发入门(转载)

    一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源( ...

  5. JavaWeb开发环境配置

    JavaWeb开发环境配置(win7_64bit) 目录 1.概述 2.JavaWeb学习路线 3.JavaWeb常用开发环境搭建 4.注意事项 >>看不清的图片可在新标签打开查看大图 1 ...

  6. java自定义jsp标签_深入浅出javaWeb实战第17讲自定义JSP标签(上)

    <JavaWeb开发>课程计划表 Web的概念及其演变 课程内容: ? Web的概念.特点 ? HTTP协议简介 ? Web技术的发展:静态文档,Web应用,Web服务 JavaWeb应用 ...

  7. JavaWeb学习总结(一):JavaWeb开发入门

    一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源( ...

  8. java web开发技术大_2021年六大javaweb开发主流技术

    作为历史最为悠久的编程语言--java,历经数十年依然盘踞在编程榜最前面的位置,这与它的技术和应用范围是分不开的,同时呢,javaweb开发主流技术更是java开发者时时刻刻关注的问题,接下来我们一起 ...

  9. javaweb开发要学习的所有技术和框架总结

    javaweb开发要学习的所有技术和框架总结: 前端技术: HTML, CSS, JAVASCRIPT, JQUERY, AJAX HTML "超文本"就是指页面内可以包含图片.链 ...

最新文章

  1. 第十五届全国大学生智能车竞赛百度深度学习车模
  2. 【转载】CSS 入门精要(一)
  3. boost::hana::prefix用法的测试程序
  4. [Swift]LeetCode1147. 段式回文 | Longest Chunked Palindrome Decomposition
  5. C++ 数据指针(-)
  6. Spring Boot笔记-普通异常错误截取及构造错误页面
  7. 服务器返回它们的和_无服务器有其陷阱。 这是避免它们的方法。
  8. java过剩_Java程序员的未来发展之路,你是否感到迷茫?你不知道的Java现状
  9. ES6 javascript 实用开发技巧
  10. linux进行MySQL查询_linux下mysql Select查询命令
  11. Java导出源程序_JAVA导出项目的所有源代码到一个文件
  12. C语言栈的push函数,关于栈的有关问题。为什么Push函数top始终是NULL
  13. SSM酒店管理系统的设计与实现毕业设计源码260839
  14. (精华2020年5月12日更新) vue实战篇 axio.js封装和环境配置
  15. 黑客+马拉松=? 黑客马拉松?
  16. TOEFL wordlist 17
  17. mybatis 练习二(vue)
  18. Linux内核中的延时函数详解
  19. win10投影无法正常使用:我们正在确认此功能 解决方法
  20. Demo : 人脸5个关键点检测

热门文章

  1. SAP的号码范围(number range)SNRO和SNUM自动编号工具的用法
  2. 取得成本中心组、成本要素组层级的几个BAPI
  3. oracle查大事务语句,查询Oracle 中死事务的语句
  4. java程序中出现两个class,Java中Class类中两个值得注意的进行类型动态转换的方法...
  5. 波场php转,波场TRC20 Token PHP交互
  6. uniapp 自定义进度条_如何解决uniapp小程序下载进度条问题
  7. python123数值运算_python基础篇【第二篇】:数据运算、数据类型
  8. 使用Visual Studio Code 运行编写第一个html文件
  9. thinkphp scws mysql_thinkphp buildHtml 函数实现网站静态化
  10. python多值参数函数介绍,数字累加例子