前段时间工作需要,需要构建一个面包屑导航,想到了了.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;
}
分享到:
相关推荐
【JSP实现毕业设计成品】是一份基于JavaServer Pages(JSP)技术构建的网站项目,主要用于模拟或实际运营中的房地产信息展示与管理。在这个项目中,开发者利用JSP的强大功能,结合数据库技术和HTML、CSS、JavaScript...
8. `sitemap.html` - 网站地图,列出所有主要页面链接,方便用户快速导航。 9. `logo1.png` 和 `logo.png` - 学校的标识或LOGO,用于统一品牌形象。 总结:这个动态招生网站JSP模板集成了网站设计的基础要素,不仅...
这包括但不限于:合理设置元标签(如title、description),确保网站内容的原创性和质量,优化网站结构,提供XML站点地图,以及合理使用关键词等。 至于压缩包内的文件,"ReadMe.txt"通常包含项目说明或安装指南,...
- **Tag Handler Classes**:实现JSP标签的Java类,它们负责处理与地图相关的JSP标签。 - **Tag Support Classes**:辅助标签处理类,提供通用功能。 - **Attribute Processors**:处理标签属性的类,将用户传递...
总结,"JSP制作的企业宣传网站"结合SQL Server 2005,实现了动态内容展示和高效的数据管理,为企业搭建了一个全方位展示自身、与客户互动的在线平台。开发者需要掌握JSP编程和SQL Server数据库管理技能,确保网站的...
在本文中,我们将重点讨论基于JSP(Java Server Pages)技术的企业网站开发,这是一种强大的服务器端编程语言,常用于创建动态、交互性强的网页。 JSP是Java平台的一部分,它允许开发人员将HTML、CSS、JavaScript等...
《JSP旅游网站建设设计与实现》是一个典型的Web应用开发项目,主要使用Java Server Pages(JSP)技术构建,旨在为用户提供一个功能完善的在线旅游服务平台。这个项目不仅包含了完整的源代码,还提供了Lightweight...
《JSP旅游网站建设设计与实现》是一份涵盖了从理论到实践的综合性项目,主要针对的是如何利用JSP技术构建一个功能完善的旅游网站。这个项目包含了源代码和相关的论文,为学习者提供了完整的开发过程和理论依据。以下...
### 基于JSP和MySQL的留言板系统设计与实现 #### 1. 引言 随着互联网技术的发展,留言板已成为网站与用户之间互动的重要工具之一。它不仅可以收集用户的反馈和建议,还能增强网站的用户体验。JSP(JavaServer ...
在联合开发网下载的这个资源,很可能会对那些希望在自己的网站或应用中集成地图功能的开发者产生实用价值。 谷歌地图API是谷歌提供的一套接口,允许开发者在网页或移动应用中嵌入交互式地图。通过这个API,开发者...
4. 站点地图:提供地图接口,显示公交站点分布,方便用户直观了解周边公交网络。 5. 用户反馈:用户可以提交问题或建议,系统记录并处理。 四、技术栈与工具 1. JSP/Servlet:作为主要的后端开发技术,处理请求并...
【基于Jsp的公交查询系统】是一个典型的Web应用程序,它使用Java Server Pages(JSP)技术来实现对公交线路和站点信息的查询功能。在Web开发中,JSP是一种动态网页技术,允许开发者将HTML代码与Java代码结合,以便在...
JSP可以通过动态生成元标签、使用友好的URL结构以及提供清晰的站点地图等方式,帮助改善网站的SEO表现。此外,它还可以支持动态内容的索引,这对于搜索引擎来说是极其有利的。 ### 总结 通过使用JSP,大学生求职网...
此外,还可以提供线路地图、站点地图等辅助功能。 **8. 异步查询与Ajax** 为了提高用户体验,系统可能采用Ajax技术实现异步查询。通过JavaScript发送异步请求,后台处理后返回数据,前端更新页面,无需刷新整个页面...
6. **地理信息系统(GIS)**:如果系统提供了地图展示功能,可能涉及到GIS技术,用于处理地理位置数据,显示公交线路和站点在地图上的位置。 7. **前端技术**:除了JSP,系统的前端可能还使用了HTML、CSS和...
**城市公交查询系统设计与实现基于JSP** 本项目是一个基于Java Server Pages (JSP) 技术的毕业设计,旨在构建一个城市公交查询系统,为用户提供方便快捷的公交线路查询服务。通过这个系统,用户可以输入起始点和...
这个系统可能包括了地图展示、线路规划、站点搜索等功能,帮助用户快速找到最佳的公交出行方案。在开发这样的系统时,开发者通常会利用JSP(JavaServer Pages)的动态网页生成能力,结合Servlet和JavaBean等技术来...
7. **地图应用**:在地图应用中,通过Ajax获取和展示位置信息,实现平滑的缩放和拖动操作。 8. **购物车功能**:用户添加商品到购物车时,通过Ajax更新购物车状态和总价,提供无缝的购物体验。 为了实现这些功能,...
5. **地图展示**:在地图上直观地展示公交线路和站点,便于用户理解。 系统背后的数据存储很可能使用了SQL Server,这是一款强大的关系型数据库管理系统,能够高效地处理大量公交线路、站点和时刻表等数据。SQL ...
Google Maps API是一个强大的工具,允许开发者在自己的应用或网站上嵌入交互式地图,实现定位、导航、路线规划等功能。 首先,我们需要在项目中引入Google Maps API的JavaScript库。这通常通过在HTML页面中添加一个...