Magnolia学习笔记(一个基于JSR170的内容管理系统) ( by quqi99 )


作者:张华 发表于:2007-05-24  ( http://blog.csdn.net/quqi99 )

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明。

Magnolia

1、  Magnolia 包括两个部分:内容存储库(基于 JSR170 )与内容管理系统。

2、  管理端 : http://localhost:8080/magnoliaAuthor   用户名,密码 superuser

3、  Manolia Sitedesigner 说白了就是另一个模块 ( 可在学习完模块之后再看不迟 )

4、  如何变中文?新增用户,并修改对应的 Language 为 Chinese(China) ,保存,打开新的 ie ,用新的用户登陆。

5、  Magnolia ,而是 Magnolia 的兄弟产品 MagnoliaQT ,一个 Magnolia 媒体增强的 CMS 系统,其利用 QuickTimeJava 可以很方便的处理各种图像、音频、视频

6、  一个很有趣的工具,可以以手绘的形式设计网站,很适合初期大家一起设计网站结构的时候使用,随手在上面写写画画,可以以手绘的方式设置页面间链接 : http://dub.washington.edu/denim/

7 、学习文档: http://documentation.magnolia.info/docs/en.html

8 Java Content Repository API 简介 : http://www.ibm.com/developerworks/cn/java/j-jcr/

9 、 这句代码 , 如果用的是 jdk1.5, 必须加上这段代码 , 否则会报 javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found 异常 .

10 . JackRabbit 是基于 JSR170 的一个实现,运行它需要下列 JAR 包:

要使用和运行这篇文章中的示例,请将下面这些库放在类路径中:

?         jackrabbit-core :针对 JSR-170 的 Jackrabbit 内容仓库核心实现和来自 Apache 的公共实用代码。

?         commons-collections :包含强大数据结构的框架,该框架可以加快 Java 应用程序的开发。

?         concurrent :这个库提供通常在 Java 并发编程中会遇到的工具类的标准化的、有效率的版本。

?         derby :一个 Apache 数据库子项目,它提供完全用 Java 语言实现的关系数据库。

?         jcr :一组符合 JSR-170 规范的接口。

?         log4j :运行时日志库。

?         lucene :高性能的全功能文本搜索引擎库。

?         slf4j (针对 Java 的简单日志 Facade ):目的是充当不同日志 API 的简单 facade ,允许用户在部署时插入需要的实现。

?         xerces :高级 XML 解析器,支持 SAX 版本 2 、 DOM 1 级和 SAX 版本 1 API 。

Repository.xml 用来配置 Repository, workspace.xml 用来配置 workspace

Repository 元素包括:

?         FileSystem 元素:虚拟文件系统,用来存储全局状态如注册名空间,客户化节点类型等

?         Security 元素:指明在 JAAS 配置与访问管理器中 app-entry 的名字。

?         Workspaces 元素:指明 workspace 的根目录与默认 workspace 的名字,它用于在没有节 workspace 时通过 API 创建默认的 workspace

?         Versioning 元素:配置与版本相关的设置

?         SearchIndex 元素:用于设置在 /jcr:system 树上与索引相关的设置

例如:

<Repository>

<FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">

<param name="path" value="${rep.home}/repository"/>

</FileSystem>

<Security appName="Jackrabbit">

<AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager">

<!-- <param name="config" value="${rep.home}/access.xml"/> -->

</AccessManager>

<LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule">

<param name="anonymousId" value="anonymous"/>

<!-- <param name="defaultUserId" value="superuser"/> -->

</LoginModule>

</Security>

<Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>

<Workspace name="${wsp.name}">

<FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">

<param name="path" value="${wsp.home}"/>

</FileSystem>

<PersistenceManager class="org.apache.jackrabbit.core.state.db.DerbyPersistenceManager">

<param name="url" value="jdbc:derby:${wsp.home}/db;create=true"/>

<param name="schemaObjectPrefix" value="${wsp.name}_"/>

</PersistenceManager>

<SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">

<param name="path" value="${wsp.home}/index"/>

</SearchIndex>

</Workspace>

<Versioning rootPath="${rep.home}/version">

<FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">

<param name="path" value="${rep.home}/version" />

</FileSystem>

<PersistenceManager class="org.apache.jackrabbit.core.state.db.DerbyPersistenceManager">

<param name="url" value="jdbc:derby:${rep.home}/version/db;create=true"/>

<param name="schemaObjectPrefix" value="version_"/>

</PersistenceManager>

</Versioning>

<SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">

<param name="path" value="${rep.home}/repository/index"/>

</SearchIndex>

</Repository>

11 、模板学习

Magonia 中的每一个页面都是由模板(主 JSP/Servlet ,或者其他脚本)动态生成。

新建一个模板时,相当于在 website 这个 repository 中增加一个 node ,并添加属性 ”title” 与 ”template”

有 page template, Paragraph template , Dialog Template.

配置一个模板就是一个添加 Template Definition 的过程,一个模板被配置在 Configuration/modules/templating (这里面的就是模板定义,也就是 node 的属性)中

页面中用模板

11.1 JSP2.0

参考文档: http://www.oreilly.com.cn/news/jsppart3.php?c=java

JSP2 。 0 使 XML 与 JSP 协同变得更容易。支持两种写法,一种是常规的,一种是符合 XML 文档的,如下:

常规的 JSP 页面

JSP 文档

<%@ page attribute list %>

<jsp:directive.pageattribute list />

<%@ include file="path " %>

<jsp:directive.include file="path " />

<%! declaration %>

<jsp:declaration>declaration </jsp:declaration>

<%= expression %>

<jsp:expression>expression </jsp:expression>

<% scriptlet %>

<jsp:scriptlet>scriptlet </jsp:scriptlet>

首先对于JSP 2.0 来说,一个JSP Document 必须要有一个<jsp:root> 根元素用以告诉容器它是哪一种类型的JSP 页面。JSP 2.0 通过这种新的方式来标识一个JSP Document 文件解决了这个限制。如果以下条件中有一个为true ,这个文件就将被JSP 2.0 容器作为一个JSP Document 来处理:

  • 请求的路径与在web.xml 中声明的URL 匹配, JSP property group 声明有一个 <is-xml> 元素设置为 true 。关于 JSP property group 声明在上一篇中有详细的说明。
  • 请求路径的扩展名是.jspx ,除非这个扩展名匹配一个JSP property group 声明的URL pattern ,而JSP property group 声明<is-xml> 元素为false 。 换句话说,.jspx 是默认的JSP Document 的扩展名,但是它可以被一个property group 的声明置为无效。
  • 请求路径扩展名是.jsp 或者匹配一个JSP property group 声明的URL pattern ,而且这个文件中的root element 是<jsp:root> 。

这些新的规则使采用一个常规的XHTML 文件(用JSP element 处理动态内容)的形式来编写JSP Document 成为可能,比如:不需要将所有的内容都放到<jsp:root> element 中。如果类似下面的例子那样创建一个JSP property group ,你甚至可以用扩展名为.html 的文件:

  <jsp-config>

    <jsp-property-group>


      <url-pattern>*.html</url-pattern>


      <is-xml>true</is-xml>


    </jsp-property-group>


  </jsp-config>


JSP2 。0 的一个例子:

<jsp:root version="1.2" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:cms="urn:jsptld:cms-taglib"

xmlns:cmsu="urn:jsptld:cms-util-taglib" xmlns:c="urn:jsptld:http://java.sun.com/jsp/jstl/core"

xmlns:fmt="urn:jsptld:http://java.sun.com/jsp/jstl/fmt">

<jsp:directive.page contentType="text/html; charset=UTF-8" session="false" />

<jsp:text>

<![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> ]]>

</jsp:text>

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">

<head>

<c:import url="/templates/samples/templates/inc/head.jsp" />

</head>

<body>

<cms:mainBar paragraph="samplesPageProperties" />

<div id="contentDivMainColumn">

<c:import url="/templates/samples/templates/inc/columnMain.jsp" />

<div id="footer">

<cms:adminOnly>

<fmt:message key="buttons.editfooter" var="label" />

<cms:editButton label="${label}" paragraph="samplesPageFooter" contentNodeName="footerPar" />

</cms:adminOnly>

<cms:ifNotEmpty nodeDataName="footerText" contentNodeName="footerPar">

<p>

<cms:out nodeDataName="footerText" contentNodeName="footerPar" />

</p>

</cms:ifNotEmpty>

<a href="http://www.magnolia.info">

<img src="${pageContext.request.contextPath}/docroot/samples/imgs/poweredSmall.gif"

alt="Powered by Magnolia" />

</a>

</div>

</div>

<div id="contentDivRightColumn">

<cms:contentNodeIterator contentNodeCollectionName="rightColumnParagraphs">

<div style="clear:both;">

<cms:editBar adminOnly="true" />

<cms:includeTemplate />

</div>

</cms:contentNodeIterator>

<cms:adminOnly>

<div style="clear:both;">

<cms:newBar contentNodeCollectionName="rightColumnParagraphs" paragraph="samplesRightColumn" />

</div>

</cms:adminOnly>

</div>

<div style="position:absolute;left:0px;top:0px;">

<cmsu:img nodeDataName="headerImage" inherit="true" />

</div>

<cmsu:simpleNavigation />

</body>

</html>

</jsp:root>

11.2 CMS 标签

1 、 <cms:setNode var="pageProperties" /> 将 content node (模板就是一个 node )作为一个 nodeData 对象的 Map 放到 pagecontext 范围之内。目的是为了 JSTL 能访问。然后可这样取: ${pageProperties.title} ,

<meta name="description" content="${pageProperties.metaDescription}" />

<meta name="keywords" content="${pageProperties.metaKeywords}" />

2 、 <cms:links /> : add magnolia css and js links

取应用目录: ${pageContext.request.contextPath}

3 、 <cms:mainBar paragraph="samplesPageProperties" /> 用于显示上面的头。

Magnolia学习笔记(一个基于JSR170的内容管理系统) ( by quqi99 )相关推荐

  1. 学习笔记之——基于深度学习的图像超分辨率重建

    最近开展图像超分辨率( Image Super Resolution)方面的研究,做了一些列的调研,并结合本人的理解总结成本博文~(本博文仅用于本人的学习笔记,不做商业用途) 本博文涉及的paper已 ...

  2. C#入门学习笔记(基于刘铁锰老师C#入门2014教学视频)【1】

    C#入门学习笔记(基于刘铁锰老师C#入门2014教学视频)[1] 前言: 本笔记作为记录我从零开始学习C#的记录,为了unity的兴趣爱好自学一门C#,也算是寒假为自己充个电,希望这个寒假可以坚持下去 ...

  3. 12864液晶深入学习笔记_1——基于msp430g2553

    12864液晶学习笔记 Created on: 2012-8-30 Author: zhang bin 这是我对12864的学习笔记,12864液晶功能很全面,使用起来也很方便,能够满足一般的研究和工 ...

  4. 【QT学习笔记】基于QT的天气预报

    [QT学习笔记]基于QT的天气预报 前言 那就开始吧! 先看一下效果 颜面最重要,画个UI 构造实现 怎么开始? 开始解析数据 关于城市切换 ok 最后源码献上 感谢 前言 学习qt已经有一段时间了, ...

  5. 学习笔记--一个自管理(组织)的多目标进化算法(SMEA)

    学习笔记–一个自管理(组织)的多目标进化算法(SMEA) 摘要:在温和条件下,一个连续m维目标的优化问题的帕累托前沿(解集)可以形成一个(m-1)维的分段连续流形.基于这个性质,这篇文章提出了一个自管 ...

  6. 【转】医疗业务学习笔记--DICOM协议的基础内容!!!!!!!!!!

    转自:医疗业务学习笔记--DICOM协议的基础内容 - 知乎 本文首发于"雨夜随笔"公众号,欢迎关注. DICOM协议是医疗领域对如何处理.存储.打印和传输医疗图片的一系列标准.D ...

  7. C#入门学习笔记(基于刘铁锰老师C#入门2014教学视频)【2】

    C#入门学习笔记(基于刘铁锰老师C#入门2014教学视频)[2] 初识类和名称空间 前言: 本笔记作为记录我从零开始学习C#的记录,为了unity的兴趣爱好自学一门C#,也算是寒假为自己充个电,希望这 ...

  8. 【图神经网络】图神经网络(GNN)学习笔记:基于GNN的图表示学习

    图神经网络GNN学习笔记:基于GNN的图表示学习 1. 图表示学习 2. 基于GNN的图表示学习 2.1 基于重构损失的GNN 2.2 基于对比损失的GNN 参考资料 本文主要就基于GNN的无监督图表 ...

  9. 学习笔记之——基于matlab的数字通信系统(2)之离散信号的傅里叶分析

    关于连续信号的傅里叶分析,可以参考博文<学习笔记之--基于matlab的数字通信系统(1)&连续信号的傅里叶分析> 目录 离散时间信号的傅里叶变换(DTFT) 连续时间信号的抽样- ...

最新文章

  1. D3D11中的硬件反锯齿 SSAA/MSAA/EQAA/CSAA(3)
  2. 咖啡文化:各种咖啡名称与选择
  3. C++vector容器学习
  4. android bitmap上传服务器,Android 上传图片到服务器时将bitmap转换为byte[]最后转换为String...
  5. JS数组遍历-forEach()、map()方法
  6. _ASSERTE(_CrtIsValidHeapPointer(pUserData))错误详解
  7. Qt4_实现自定义模型
  8. VC++ 源码实现通达信公式管理器
  9. Unity基础UI框架
  10. 企业申请CMMI3-CMMI5必经的六个阶段
  11. TimesTen In-Memory Database
  12. 牛客 检测命令是否正确
  13. 主机加固,数据防泄漏的解决方案
  14. linux 源码搭建lnmp_LINUX CENTOS 6.5下源码搭建LNMP
  15. php fetch_assoc,PHP使用fetch_assoc()获取查询结果时数据类型都变了
  16. itunes store服务中断_终于明白为什么那么多人吐槽apple的态度了.临时工一样的中国区itunes store客服......
  17. 三、道阻且长之单例模式
  18. 什么是Rest风格的Api?
  19. bigdata101:Permission denied (publickey .....) 这次的不一样
  20. 2021各显卡满载功耗天梯图 显卡能耗比天梯图

热门文章

  1. mongoDB 去重统计, group实现版
  2. 入坑”自媒体写作,我有干货与你分享
  3. 饥荒云服务器存档在哪个文件夹,饥荒存档位置的位置在哪里?如何添加别人的存档?...
  4. 计算机的acpi高级电源选项配置,『转改』打开XP系统的ACPI高级电源管理功能
  5. 7-3 人以群分 (25 分)
  6. 哪款蓝牙耳机佩戴比较舒服?佩戴轻松舒服的蓝牙耳机推荐
  7. airpods链接mac弹窗_在 Mac 状态栏查看 AirPods 电量,还能收到低电量提醒:Battery Stats for AirPods | App+1...
  8. Linux下pdf去除白边(使用PDFCrop)
  9. i7 12700KF参数 酷睿i712700KF什么水平i7 12700KF核显相当于什么显卡
  10. 元气森林被“薅羊毛”背后的思考