TLD文件的解釋術語:
標簽庫描述文件,用于存放標簽名字和類的映射用的
標簽庫:它把類標簽和后面的Java類映射起來,它減少了頁面的代碼,使頁面更加的清晰,其實標簽最后還是被解釋成后臺的java代碼
原理是,在用戶在jsp頁面中使用標簽時,系統首先會先到xml文件中的 標簽中的《taglib-uri》和《taglib-location》這兩對標簽找到相對應的擴展名為tld文件,然后在 tld文件中的映射再找到相對應的taglib類。
創建的每個標簽都必須在tld文件中聲明,如果要在jsp頁面用jsp的標簽,必先先實現定義標簽的類,然后在標簽庫描述文件(TLD)中將寫好的類映射成jsp標簽,然后在jsp頁面中使用定義好的標簽,然后就可以實現動態的jsp信息。
當需要使用自定義標簽時就需要配置xml文件和tld文件
1、書寫要配置的java代碼:
/*** Copyright © 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开发的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。