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

来源:互联网 发布:单机版跑得快源码 编辑:程序博客网 时间:2024/06/14 10:46

                     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、  如何变中文?新增用户,并修改对应的LanguageChinese(China),保存,打开新的ie,用新的用户登陆。

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

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

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

8Java 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异常.

 

10JackRabbit是基于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 版本 2DOM 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

JSP20使XMLJSP协同变得更容易。支持两种写法,一种是常规的,一种是符合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>

JSP20的一个例子:

<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" />用于显示上面的头。