前段时间工作需要,需要构建一个面包屑导航,想到了了.net下的站点地图、面包屑导航控件,于是自己也做了简单的封装,形成了jsp下的站点地图,不足之处忘大家指正。
涉及到的文件:
SiteMapUtil.java 用来构建站点地图的工具类
BaseAction.java 调用输出导航栏
SiteMapNode.java 自定义站点节点
sitemap.xml 站点地图配置文件
直接上代码了: sitemap.xml站点地图的配置文件 节点由 href:action path(系统路径) title(标题)构成
<?xml version="1.0" encoding="UTF-8"?>
<!--面包屑导航配置文件说明:
title 是页面上显示的内容 即:连接名称
href是超链接,如果没有动态数据则可以直接写入此配置文件 系统优先使用默认配置的href,最后使用系统后台动态赋予的值
path是该请求页面的物理路径 path须与struts中设置的路径保持一致
-->
<sitemap title="首页" path="/pages/stu/index_student.jsp" href="login.do?method=toUserIndex&topMenu=index">
<!--个人中心 -->
<node title="个人资料" path="/pages/stu/user/personal_data.jsp" href="leftNav.do?method=personalData&type=data&leftMenu=userInfo" >
</node>
<node title="修改头像" path="/pages/stu/user/change_avatar.jsp" href="leftNav.do?method=personalData&type=avatar">
</node>
<node title="可用积分" path="/pages/stu/study/myPointList.jsp" href="leftNav.do?method=myPointList">
</node>
<node title="我的档案" path="/pages/stu/user/myRecords_StudyCourse.jsp" href="leftNav.do?method=myRecords&leftMenu=myrecords">
<node title="已学课程" path="/pages/stu/user/myRecords_StudyCourse.jsp"/>
<node title="已获积分" path="/pages/stu/user/myRecords_StudyScore.jsp"/>
<node title="已获证书" path="/pages/stu/user/myRecords_CertificateUser.jsp"/>
<node title="已完成考试" path="/pages/stu/user/myRecords_ExamAchievement.jsp"/>
</node>
</sitemap>
SiteMapUtil.java
package com.maxi.base.util;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
* 站点导航的实现
* @author mx
*/
public class SiteMapUtil {
private static List<String> allFullPaths = new ArrayList<String>();//记录站点地图的所有jsp的节点全路径
private static List<String> allPaths = new ArrayList<String>();//记录站点地图的所有jsp路径
public static void siteMapSetting(HttpServletRequest request,String path,String href){
try {
Map<String,SiteMapNode> map = (Map<String,SiteMapNode>)request.getSession().getAttribute("webSiteMap");
String nowPath = (String)request.getSession().getAttribute("nowPath");
if(map==null){
SAXReader reader = new SAXReader();
InputStream inputStream = SiteMapUtil.class.getClassLoader().getResourceAsStream("sitemap.xml");
Document document = reader.read(inputStream);
Element root = document.getRootElement();
map = new HashMap<String,SiteMapNode>();
put2Map(root,null,map);
request.getSession().setAttribute("webSiteMap", map);
}
if(allPaths.size()!=0&&!allPaths.contains(path)){
return;
}else{
if(nowPath==null||"".equals(nowPath)){
nowPath = path;
}else{
if(allFullPaths.contains(nowPath+path)){
nowPath = nowPath + path;
}else{
if(nowPath.contains(path)){
nowPath = nowPath.substring(0, nowPath.indexOf(path))+path;
}else{
for(String s:allFullPaths){
if(s.endsWith(path)){
nowPath = s;
break;
}
}
}
}
}
}
SiteMapNode target = map.get(nowPath);
if(target==null){
return;
}else{
StringBuffer content = new StringBuffer("您的当前位置:");
List<String> titles = new ArrayList<String>();
List<String> hrefs = new ArrayList<String>();
while(target!=null){
if(target.getTitle()!=null){
titles.add(target.getTitle());
}
if(target.isVariable()&&path.equals(target.getPath())){
hrefs.add(href);
target.setHref(href);
}else if(target.getHref()!=null&!target.getHref().equals("")){
hrefs.add(target.getHref());
}else {
hrefs.add("");
target.setHref("");
}
target = target.getParent();
}
for (int i = titles.size()-1; i >=0; i--) {
String a = hrefs.get(i);
if(a.equals("")){
content.append(titles.get(i)+"-->");
}else{
content.append("<a href='"+a+"'>"+titles.get(i)+"</a>-->");
}
}
if(content.length()>0){
request.getSession().setAttribute("siteMapString", content.delete(content.length()-6, content.length()));
request.getSession().setAttribute("nowPath", nowPath);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
//将xml中的所有节点转换为自定义节点并存储进入Map中,key:fullpath(全路径,可唯一确定一个节点)
public static void put2Map(Element root,SiteMapNode parent,Map map){
SiteMapNode node = getXML2Bean(root);
if(parent!=null){
node.setParent(parent);
parent.getChildren().add(node);
}
map.put(node.getFullPath(), node);
allFullPaths.add(node.getFullPath());
allPaths.add(node.getPath());
Iterator<Element> it = root.elementIterator();
while(it.hasNext()){
put2Map(it.next(),node,map);
}
}
//将xml中读取的Element转换成自定义的节点对象:SiteMapNode
public static SiteMapNode getXML2Bean(Element ele){
SiteMapNode node = new SiteMapNode();
node.setPath(ele.attribute("path").getText());
node.setTitle(ele.attribute("title").getText());
node.setHref(ele.attribute("href")==null||ele.attribute("href").equals("")?"":ele.attribute("href").getText());
node.setVariable(ele.attribute("href")==null||ele.attribute("href").equals("")?true:false);
return node;
}
}
自定义节点SiteMapNode:
package com.zohl.quicklms.base.util;
import java.util.ArrayList;
import java.util.List;
public class SiteMapNode {
private String title; //节点显示名称
private String path; //jsp页面全路径 与 struts配置文件中的path保持一致
private String href; //action全路径
private boolean variable;//记录该几点的href是否是动态获取的 当配置文件中已经定义好href则 variable = false; 否则为true
private String fullPath;//本节点在节点树中的路径 = 父节点的全路径+本节点的path
private SiteMapNode parent;//父节点
private List<SiteMapNode> children = new ArrayList<SiteMapNode>();//子节点集合
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getHref() {
return href;
}
public void setHref(String href) {
this.href = href;
}
public List<SiteMapNode> getChildren() {
return children;
}
public void setChildren(List<SiteMapNode> children) {
this.children = children;
}
public SiteMapNode getParent() {
return parent;
}
public void setParent(SiteMapNode parent) {
this.parent = parent;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getFullPath() {
if(fullPath==null||"".equals(fullPath)){
if(parent!=null){
fullPath = parent.getFullPath()+path;
}else{
fullPath = path;
}
}
return fullPath;
}
public void setFullPath(String fullPath) {
this.fullPath = fullPath;
}
public boolean isVariable() {
return variable;
}
public void setVariable(boolean variable) {
this.variable = variable;
}
}
BaseAction.java关键在于调用
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String url = request.getRequestURL().toString();
String queryString = request.getQueryString();
ActionForward forward = super.execute(mapping, form, request, response);
try{
request.getSession().setAttribute("siteMapString", "");
//面包屑导航
if(forward!=null&&forward.getPath()!=null&&!forward.getPath().equals("")){
SiteMapUtil.siteMapSetting(request, forward.getPath(), url+"?"+queryString);
}
}catch(Exception exp){
exp.printStackTrace();
}
return forward;
}
分享到:
相关推荐
公交线路: 记录编号,线路名称,起点站,终到站,首班车时间,末班车时间,所属公司,途径站点,地图线路坐标 站站查询: 记录编号,起始站,终到站 留言信息: 记录编号,留言标题,留言内容,留言人,留言时间 新闻公告: 记录...
30个计算机类Java JSP ASP.NET 安卓Android 项目源码合集: ...毕业设计课程管理系统,jsp+SQLServer实现.rar 用asp做的毕业设计(电子地图).rar 系统代码.rar 试题库管理系统毕业论文(C#)源程序.rar
(7)线路管理:提供查询景点及其景点周边景区旅游路线的基本情况查询及线路的介绍、必要时可以提供百度地图或谷歌地图进行导航,游客可以通过网站,查询相应出发地到目的地的自驾车路径,线路管理为用户推荐最近...
项目概述:本项目为一基于SSM(Spring、SpringMVC、MyBatis)框架开发的精品课程网站源码实现。项目主要采用JavaScript语言进行前端开发,并辅以CSS、HTML等前端技术,后端则以Java为主,同时涉及PHP和XML等技术的...
13.3.2 建立合理的网站结构与网站地图的应用 795 13.3.3 设计良好的网页结构 798 13.3.4 seo基本功——关键词的选用 800 13.3.5 域名与空间对seo的影响 802 13.3.6 搜索引擎偏爱“勤快”的网站 804 13.4 搜索...
位置信息管理网站设计 ...设计并且实现了一个位置信息管理网站设计,用My Eclipse作为开发工具,以SQL Server作为数据库,使用JSP语言开发。该系统界面友好、操作简单,容易维护,适合各种人群使用。
JSP基于SSM新生入校学校介绍网站设计可升级SpringBoot 程序开发环境:myEclipse/Eclipse/Idea都可以 + mysql数据库 前台技术框架: Bootstrap 后台架构框架: SSM 做一个类似新生入学熟悉学校各个方面的一个小软件,...
整套技术来作为解决方案,实现模仿天猫网站的各种业务场景,现在开始使用框架技术,毕竟工作中还是要用框架。 本项目技术相对老旧,现在很少用 Struts2 了,但如果接手老项目的话还是要懂的,学习过程我们也可以认识...
Springboot+mybatis+druid+jsp+bootstrap实现后台权限管理系统源码 SpringBoot+Mybatis+thymeleaf开发的高仿今日头条新闻网站(含项目说明) Springboot+mybatis开发电子商城网站(含项目说明) SpringBoot+Spring...
基于ASP的音乐网站的设计与实现.doc 基于J2EE框架的个人博客系统项目毕业设计论文.doc 基于J2EE的财务管理系统设计与实现.doc 基于S2SH电子商城完成版.doc 基于安卓坦克大战游戏毕业论文.doc 基于安卓平台的校园通...
ArcGIS API for JavaScript用于构建高性能的...ArcGIS API for JavaScript整个体系构建与Dojo基础之上,而Dojo是一个JavaScript实现的开源工具包,其基本语法、使用方法大家可以参考Dojo官方网站的相关说明和示例代码。
Magnolia 是一种开放式 Java 内容管理系统,可在企业规模上实现智能手机的简便性。...Magnolia CMS允许企业协调所有数字渠道的在线服务、销售和营销,最大限度地发挥每个接触点的影响。...自动生成菜单、网站地图等)
10天工期写的,学javaweb也只上了几节课,适合0基础菜鸟互啄,所以只能说技术路线走通,主要注重servlet-jsp结构,纯HTML(css没时间写了)界面比较丑,但主要功能基本实现,附有完备文档,文档写的很认真,看了应该...
于是设想编写一个网站,能够让这些喜爱相同漫画、游戏、音乐等的人们在该网站获取自己偶像或喜欢作品的信息,互相认识和交流。 1.目前实现功能:vip 【作品】 默认显示所有作品;可以对作品进行增、删、改、查[包括...
JSP基于SSM新生入校学校介绍网站设计可升级SpringBoot毕业源码案例设计 ## 程序开发环境:myEclipse/Eclipse/Idea都可以 + mysql数据库 ## 前台技术框架: Bootstrap 后台架构框架: SSM 做一个类似新生入学熟悉学校...
百度云盘分享 ... Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText();...
Java实现的FTP连接与数据浏览程序 1个目标文件 摘要:Java源码,网络相关,FTP Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
提供搜索引擎和网站地图 5. 联系信息方便多样 6. 设计易于更新的工具 7. 符合网络伦理 8. 兼容多种浏览器 9. 无错误链接 10. 可扩展性强 11. 安全性好 12. 要有强大的后台支撑 1.2网点总体结构设计 图1.2.1电子...