JAVA学习日记网站地图生成模块设计
想法太多,想法太成熟,只会使事情停滞不前。不管怎样,先把网站地图生成模块做一个出来再说。
为了使导航更加方便用户和使搜索引擎更好的遍历,设计网站地图模块。
为了灵活性起见,网站地图同样采用前面的静态页面生成方法,生成的静态文件采用jsp文件,再在生成的文件前面加上通过控制语句(比如301转向,使本站的网址统一在域名:http://java.learndiary.com/下)。
一)、需求:
需要生成的网站地图采用树型结构。
一个所有目标地图goals-1.jsp(http://java.learndiary.com/sitemaps/goals-1.jsp),包括全部公共目标的链接(标题含链接)、创建者,创建日期,日记数目,查看次数;或者就是链接:“目标:学习Jsp的所有日记”,这个页面的标题就叫<a href="http://java.learndiary.com/" title="分享目标,分享分享快乐。">JAVA学习日记</a>所有目标列表
这个网页的title就写作:JAVA学习日记所有目标列表(一) - JAVA学习日记网站地图
每100个目标一页,然后第二个一百页就是goals-2.jsp,以此类推。
然后就是各个目标的日记列表地图:如goal1-1.jsp(http://java.learndiary.com/sitemaps/goal1-1.jsp,为goal加上目标的ID加上页码,每100篇日记1页,以此类推)。
每个目标标题的链接到这个目标的所有日记列表。
这个页面的标题就叫:目标:<a href="" title="">学习Jsp</a>的所有日记列表(一)
这个网页的title就写作:目标:学习Jsp的所有日记列表(一) - JAVA学习日记网站地图
二)、实现:
网站地图生成与维护由MapGenerator.java负责。
它的功能有:
public static void doPostArt(ArticleInfo postedArt, TransContext trans)
throws Exception {}
public static void doEditArt(
ArticleInfo oldArt,
ArticleInfo newArt,
TransContext trans,
HttpServletRequest request)
throws Exception {}
public static void doDelArt(
ArticleInfo delArt,
TransContext trans,
HttpServletRequest request)
throws Exception {}
public static void updateAll(TransContext trans) throws Exception {}
public static boolean isExist(
String fileVirtualName,
HttpServletRequest request) {}
public static void delete(
String fileVirtualName,
HttpServletRequest request) {}
MapGenerator.java将调用一次或多次CallHtml.java中的 public static void callOnePage(String fileName, int artID, int pageNum)方法,来产生相应的一页或多页jsp静态页面(当条目数超过100条时(SITEMAP_ENTRIES_NUM=100))。
而CallHtml.java将调用MapGenerateAction.java来生成相应的动态页面,以此来生成静态的页面。在其中应该注意私有的日记和目标不能生成网站地图。
MapGenerateActon的调用形式可以是: mapGenerateAction.do?artID=1&pageNum=1
整体思路与前两天的JAVA学习日记页面静态化方案类似,生成的时机也类似,不过有不同的地方就是一个目标可能要生成不止一篇列表。
mapGenerateAction需要产生一些数据供实际显示内容的动态jsp文件(这里命名为:siteMap.jsp)
根据前面的需求,产生siteMap.jsp需要的数据包括:
1)、地图的类型:是目标列表还是日记列表,这由artID来定,artID=0表示显示目标列表;artID!=0表示显示所代表的目标的日记列表;
2)、页码:因为一个目标的日记数可能超过100,所以需要根据页码产生当前页。
3)、为了显示页的标题,需要把当前目标传入,类型是ArticleInfo,至于显示所有目标的列表的地图的标题可以造一个ArticleInfo。其中要包括含有的条目数;条目数大于100就要在标题中显示下一页的链接;
4)、目标下面包含的条目信息,是一个以ArticleInfo为子元素的List。
上面1)和2)可以从参数parameter中取得,3)和4)则必须从request.getAttribute()中取得;
CallHtml.java中的 public static void callOnePage(String fileName, int artID, int pageNum){}
fileName可以是siteMap,artID和pageNum的含义同上面的mapGenerateAction.do?artID=1&pageNum=1一样。
而CallHtml的callOnePage方法调用的实际生成jsp静态页面的程序是:
public class ToHtml extends HttpServlet{}
原来的这个类只生成帖子内容的html文件,现在的区别是在生成的静态文件头部额外加上一段jsp公共处理程序,然后把文件扩展名改为:jsp。
在MapGenerator.java中针对每种情况的处理都要考虑有时一个目标的页面生成过程要调用不止一次。这就需要在方法中判断列表的帖子数是否大于SITEMAP_ENTRIES_NUM=100,然后根据列表的帖子数决定调用几次CallHtml中的callOnePage()方法。
下面就开始动手编码吧。