Velocityjava开发指南中文版.doc

上传人:叶*** 文档编号:36051929 上传时间:2022-08-25 格式:DOC 页数:18 大小:100KB
返回 下载 相关 举报
Velocityjava开发指南中文版.doc_第1页
第1页 / 共18页
Velocityjava开发指南中文版.doc_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《Velocityjava开发指南中文版.doc》由会员分享,可在线阅读,更多相关《Velocityjava开发指南中文版.doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 开发指南中文版本文档来自网络,本人将其收集整理了一下,主要调整了一下格式.如有出入,请参照网络原版,原版地址记不清了!O(_)O哈哈目录开始入门3参考资源:4它是如何工作的?5单实例还是多实例( .)?7 9 12 15 19 (事件分发和处理)20 (配置参数名字和值说明)23 (日志记录配置)26 (资源装载器配置)29 (字符编码和国际化)32 33 ( )开发中常见的问题解答.3637 1 : 38开始入门是一基于语言的模板引擎,使用这个简单、功能强大的开发工具,可以很容易的将数据对象灵活的及格式化文档组装到一起;希望本文能指引使用在开发基于或一般应用程序的应用上快速起步。取得并在你

2、的机器上开始运行很容易,以下是全部详细的说明:取得发布版本, 。目录及文件说明: 完整的 包一般命名格式为,其中X是当前版本号。注意这个包不包含所必须依赖的其它包(具体见后)。:完整的源文件代码目录. 完整的或 例子。 文档目录: 使用编译源码时所需的.,现在就可以开始使用了.请将放到你的中或的下。当然,我们强烈建议你先运行其中的例子,以感受的优异之处.1. 依赖资源可运行于1.4或1.4及其以上版本.也依赖于其它一些包,在分发版本的 有,如果你下载的是二进制分发版本,需要到以下地址下载其它依赖包. 必须. 可选,但强列建议加上,以便输出日志信息. 可选,仅当用到 这个模板转换工具时.参考资源

3、:一些优秀的资源和例程列表如下:开发者邮件列表 .邮件档案表 : 是很好的一个资源库.可以以为关键字进行搜索。源代码(源码分发版本) : . : 含有 的所有源码应用程序例程1 : 1 : 一个很简单的示例如何在一般应用程序中使用.应用程序例程1 2 : 2 : 如何在应用程序中使用工具类. : 1 :示例如何在中用 输出模板. : : 如何定制的日志工具. : : 使用 从 模板读取内容. 还包含一个递归调用宏的示例. : : 在 1.1 中使用事件处理。 : : 示例用 美化 数据。 : : 一个基于的论坛功能实现示例. : :全面展示( )功能的模板集合。 : : 两个示例如何重写(继承

4、) 功能的例子(针对高级用户).它是如何工作的?1. 基本使用模式在 或中使用中,一般通过如下步骤:对于所有应用,第一步是要初始化, 一般使用唯一实例模式(),如().创建一个 .将你的数据对象加入到对象中.使用选择一个模板.合并模板和数据导出到输出流.下面的代码,通过使用的单实例模式,合并输出:代码 1 初始化 2 取得对象 3 向中放入要在模板中用到的数据对象 4 选择要用到的模板 5 t 6 ( e ) 7 合并输出 以上是基本的使用模式,看起来非常简洁!这些都是一般情况下使用所必须的步骤. 但你可能不想这样按部就班的编写代码 提供了一些工具以更容易的方式在或应用程序中使用。在这个指南的

5、后面, 我们将讨论在和普通应用程序中更好的用法.单实例还是多实例( .)?这是系统默认的模式, 这样在(应用程序)或 (一个程序)中只存在一个 实例共享使用。. 这对于配置和共享资源来说非常方便. 比如, 这非常适合用于支持 2.2+ 的 中,每一个 持有它自己的唯一实例, 它们可以共享, a 等资源. 可以直接通过使用 类, 如下例子:代码 1 t = (); 在1.2版本以后, 可以在 ( .)创建,配置,使用多个实例;当你希望在同一程序中,对每个实例独立配置时它们的 , 等资源时,这是非常方便的. 多实例化时,我们要用到 类. 下面是一个例子,请注意和上面 同法时的不同:代码 1 * a

6、 2 * a ( .) 3 t = (); 可以看到,这是非常简单的直接使用就行了.无论用 或 都不需要改变你程序的上层结构及模板内容.对于开发人员而言, 你应在以下两个类中二者择一的使用 应用于 , 一般用于 ( ). 是中的一个核心概念, 这是一个从系统的”数据容器(a )”引出的一个常见概念. 这里的在程序层和模板视图层( ( )之间扮演着一个”数据对象传送者”()的角色.做为程序员,你可以将你程序生成的不同类型的数据对象放入中,对于视图设计来说,这些对象(包含它们的数据域和命令)将在模板元素中被引用到()。一般来说,你将和视图设计者一起决定应用需要哪些数据,可以说,你放入中的数据对象在

7、这里成为一种”,由视图设计者在模板中来访问.因此,在向中决定放放哪些数据对象时,程序的设计者需要仔细分析视图表现所需的数据内容。虽然中你可以创建自己的类来支持一些个性化的应用(比如,一个访问,保存 服务的),你可以实现这个己封装较为完务的基类。对象基本上可满足大多的应用, 我们强烈建议你除非在特别的情况下,否则不要创建自己的实现!用法十分简单,类似于 .下面是这个接口提供的两个基本用法:很像吧,这里的必须是一个类(不能是原始类型,像), 也不能是值. 原始类型( )必须被包装为一个适当对应的型.,以上就是 对象的用法概念,很简单我们却哆嗦这么:). 关于其更多的介绍,请见 .1. 在模板中用指

8、令支持迭代对象在放入前,你对对象有着全面的操作自由. 但就像所有的自由一样, 你必须遵守一些规则,承担一些责任,因此,你必须理解是如何使用对象的,的支持多种类型的集合类型( ) 使用(). 一般对象数组. 将内功能会将它包装成功之为一个实现 对象, 这个转换是不需要程序员或视图设计者参及. 会使用他们的标准() 得到一个可以迭代中使用的 对象,如果你使用自己的实现了 的对象,要确保它的() 命令返回一个可用的.接口对象 使用其顶层接口的() 命令得到一个实现 的对象, 应用其()再返回一个.使用特别注意 : 如果一个对象被放置到中,当在模板中有多个 ()指令中,这些() 将顺序执行,如果第一个

9、调用失败,后面的将阻塞且不能重置. : 如同一样的道理将使用的是一个不能重置()或者说一个型的对象.因此,仅当在不得己的情况下, 对象才有必要放入中也许你有更好的办法不使用他们.例如,你可以将如下代码: v = ();替换为:(, v );另外一个新引入的概念是 .有时也叫做 (有点类似及中的), 这个高级特性让你可以连结多个独立的的,以便在中使用.以下是这种用法的代码示例 :代码 1 1 = (); 2 1(,); 3 1(, ); 4 1(, I 1); 5 2 = ( 1 ); 6 2(, ); 7 2(, I 2); 8 ( 2, ); 在上面的代码中, 2 做为1的. 这意味着你在模

10、板中可以使用放入这两个中的任何一个对象, 当两个中有相同的中,在模板中输出时,将会输出最后一个的值,如上例为的值将输出为 I 2.其实,在上例中不存在, 或, 1中的 I 1 依然可以通过1()方法得到. 但在上例中,模板中引用 $ 将会返回 I 2, 而且模板不能再访问到1中的I 1.另外要注意的是,当你尝试在模板中加入信息,比如使用()声明,这将对所己输出的模板产生影响.如前所述, 类也是或扩展的, 但在这份指南中没有述及. 如果你有兴趣,可以查看 中的代码以了解 是如何生成,数据对象以何机制传出的. 例程 有一些示例展现.2. 模板中的己创建对象代码中的数据对象及模板交互有两种常见方式:

11、模板设计者从模板中执行程序员放入到中的对象的命令:($ = a,b,c )当模板加入一个对象到中,模板合并输出后,代码将可以访问这些对象.($ = a,b,c )( $ = 1 )这里述及这些技巧有些过早,但现在必须理解以下概念: 通过或所传的 1.10 a,b 是对象. 因此你的对象的命令设计时,要具有兼容性.在中将被包装为, ,当然就是了.会适当的根据调用的参数类型适配对象的调用命令, ( i )将一个 放入 和 ()是不会冲突的.3. 对象的其它用法每一个(或任意源自)的对象,都是一个封装好指定规则的的存储节点,对于一般开发都来说,只需使用就是.但这里还有一些你应知道的特性:考虑以下情况

12、:你的模板重复使用 .反复调用() 命令.这都有可能引起 的内存泄露( )当它汇集过多的数据对象时,因此强烈建议你做到以下几点 :在每个模板渲染过种中( )创建一个新的. 这会防止过多的 . 当需要重用一个 因为它内部己放置了数据对象, 你只需要像这样简单的包装一下 = ( );具体可以参看 获取更多信息.打开模板的功能. 以防止重复解析模板,当然,这会要求服务器有更高的性能.在迭代操作时,要重用模板对象. 这样将不会对造成过大压力, 如果缓存关闭, 就需要每次都读取和解析模板, 导致 中每次都要保存大量新的信息.最通常用在中做为服务. 有非常多的理由告诉你这项任务是最适合完成的,最重要的一个

13、就是s可以分离视图(表现层和)代码层.在这里可以看到更多的理由.在中使用是非常简单的. 你只需要 己有的 和一个必须实现的方法: (). ( , , )这个方法直接传送 和 ,. 这个方法可以返回值表示所有处理己经完成, 相对而言,指示调用 ()更为常用. 如下代码示例(在例程中有)代码 1 p1 = ; 2 p2 = ; 3 ( p1 ); 4 ( p2 ); 5 t 6 ( e ) 看起来好熟悉吧? 除过处理一些异常,基本的功能都己为你准备好了, 就连在应用程序中要你写的() 这一步,自己也己处理,这就是基本的用法:取得, 加入我们自己的对象最后返回模板 .默认的 是作为 () 传入的.

14、可以使用以下常量直接访问 和对象, ( = ) ( = ) ,如下是例程 :代码 可以在模板中如下访问:一些更高级的用法,如 可以在处理请求时重写更多的签名方法 :这可以重写常规的配置方法. 这常用在修改日志路径或运行时改写 的绝对路径.你可以创建自己的 . 这可以使用更高级的技术, 如数据链或预载数据和工具类. 默认的实理仅返回一个己内置 对象的.你直以在模板中直接访问他们的命令。你可以自己定义, 或提取定义的. 默认的类型在文件中配置, 一般来说,默认的 类型是不够详细的.你可以生成输出流( ). 使用含有多种输出对象的池, 在特定情形下,重写这个命令是有用的.这个调用一般在处理完后做资源

15、的清理工作,如有需要,在这个命令的重写内容中加上你的代码.在处理中,当错误发生时,这个方法会被调用. 默认的实现是将发送一个简单的格式的错误内容到客户端. 你可以重写以定制错误处理.更多的信息,请参考 .发布基于的 时,需要参数来配置 . 在上, 一个简单的方法是将文件放到你的 目录下 ( ) 然后在 文件中加上以下几行 :引用以上配置将确保 可以被载入,也将会使来初始化.注意: 在运行时使用的是单实例模式, 因此将 放到目录即可. 但当多个要使用时,放入 或容器的顶层 是最好的选择.被设计为一个通用的功具包,它也常用于一般的应用程序中. 如这篇指南开始所讨论的那样, 另外,这里还有一些对一般

16、应用程序来说很有用的工具类: 提供一个 ( ). 这个类中提共一个初始化所必需的方法, 具体的细节可以到文档中查看. 在运行时是单实便模式,它可以给 的用户通过同一个提供日志,资源访问方法. 这个运行时仅初始化一次. 当然,你可以尝初对()进行多次调用, 但只有第一次有效. 目前提供5个命令来配置运行时:这5个配置方法是 :( , o )这么简单,不用解释了吧.嗯,也不说了用默认的参数文件初始化( p )用一个特定的对象初始化.用指定名字的参数文件初始化注意:除非你指定了,否则初始时会使用默认参数. 仅当在调用()时的配置会对系统生效。通用的 一般步骤如下:设置你指定的配置参数值在文件中,或放

17、入, 在第一次调用( )或 ( ) .单独设置每个配置参数通过调用 (),最后调用(). 这适合一些一有自己的系统( )程序。运行时一但初始化, 你就可以开始工作了. 只需要考虑组装什么样的数据对象到你的输出模板上, 可以帮你更容易做到这些.这里有一些命令摘要描述如下 :代码 这个命令用来修饰输入流,你可以将包含的模板文件从内置的对象、或非文件系统的数据源输入,.你可以直接访问. 也可以通过()命令来完成,这里你只需简单的传入文件名(模板文件), 创建一组参数放到,然后输出. 注意放入的参数必须是键-值对出现的.这个命令用来执行的模板合并和渲染功能. 它将应用中的数据对象到指定文件名的模板中.

18、将结果输出的指定的. 当然,如果没有特别的需要,不建议这么做.检测当前配置的资源中,是否存在的模板名.这样,我们就更容易编写使用的代码了. 代码 1 2 2 /* a */ 3 /* a */ 4 w = (); 5 (, , w ); 6 ( : + w ); 7 s = $ $ .; 8 w = (); 9 ( , w, , s ); 10 ( : + w ); 运行如上程序,在运行程序的目录下将得到模板文件 (默认配置中模板文件的输出位置是当前目录):引用在这里,我们不得不使用 () () . 这主要是为了示例. 在一般应用中,这是很少使用到的,但我们提供了根据具体需要自由使用的途径.这

19、有点不和我们这篇文张本意的“基础功能指南”这一意图, 但我想这是必须知道的. 首先, 你得到一个放置了数据对象的对象, 不用的是使用了命令 (), () 所做的工作是合并模板, 在运行时调用低层功能(). 接下来,通过()方法使用一个动态生成模板.这是同样简单的使用 的方式,这些可选功能也许可以帮你做一些重复的工作,比如生成模板的模板:) / 在解析/合并()模板周期中,或能出现三个异常.另外,还可能会有 , . 自定义的异常可以在 :当的资源管理器无法找到系统请求的资源时出现.当模板文件中的 语法出错时出现. a ,当处理模板中,中的对象的命令调用出错时.当然,每一次出错时,相关的消息内容会

20、保存到运行时的日志文件中,获取更多资料,请查看文档。1. 其它细节在以上的一些例程中,使用默认的配置你的程序非常方便. 但你可以根据自己的需要,用自己的配置文件通过在中调用( )命令传入你的配置文件名, 或创建一个保存了你的配置参数的 对象,通过调用 ()命令来实现. 这其中后一个方式是很便捷的, 你可以直接将一个独立的参数文件通过()调用,将其中的配置参数置入对象中. 你还可以做得列好你可以在运行时运态的从你的程序框架中加入参数. 这样,你应可以将的配置参数和你原来应用的配置在不做大的更改情况下共用。当需要从一个指定的目录提取模板文件时(默认为当前目录),你可以这样做 :代码 1 p = (

21、); 2 ( p ); 3 /* a */ 这样,在需要时,将自动到目录下查找模板文件,如果有问题可以查看中所记录的出详细出错信息。它会帮你有效的消息错误. (应用程序属性)是和 的运行时实例()相关联的,名-值对( )格式的参数,可用来存运时的信息.设计这个功能的目标是程序需要及应用层或用户定制部分(如日志,资源,装载器等)通信. . ,在 和 中都有如下命令:这里的及的设置没有任何限制,可以在程序运行中设置,这是不同及的()调用的.内部程序可以通过接口 如下的命令来取得这些参数: (事件分发和处理)从1.1版本起,加入了良好的事件处理机制. 你可将自己的事件处理器类注册给事件分发器() ,

22、 事件分发器实际上扮演着 在运行时访问事件处理器( )的一个代理的角色。目前,有3种系统定义的事件可以被处理,它们都位及包 中.当模板中() 指令关联的是一个空值时, 这是很常见的一个问题. 事件处理器可以让你决定如何处理,其接口代码如下.代码 A 这个事件处理器可以让开发者在引用对象值如($)输出到模板之前截取修改.代码 当用户数据对象中的某个命令出错时, 实现了 接口的事件处理器将被调用以获得具体的命令名字和对象. 事件处理器也可以重组一个有效的对象返回(一般用于统一的异常处理), 或向它的父类一个 , 接口如下:代码 1 ( , , e ) 1. 使用事件分发器可以直接使用一个事件分发器

23、(),如下例程在中:代码 1 * , s 2 * a 3 ( , , e ) 4 I ; 5 e; (配置参数名字和值说明)s a 的运行时配置由一个列表控制.中有一些默认的值在以下位置可以找到:基础配置,它会确保总是有一个“正常的”配置以便运行.但它不一定是你想要的配置.任何配置必须在 ()调用前发生才会在运行时替换掉默认的配置。这意味着你只需改变你需要的而不是所有的配置都要动.这一节: 有关于 的进一步说明.以下,是默认配置的说明:用以指定运行时日志文件的路劲和日志文件名,如不是全限定的绝对路径,系统会认为想对于当前目录.这个参数没有默认值,它可指定一个实现了 .的自定义日志处理对象给。这

24、就方便将及你己有系统的日志机制统一起来.具体可见 这一节.上面这行,是一个示例来指定一个日志记录器.这些是错误消息跟踪的开关.将会生成大量、详细的日志内容输出.当一个引用无效时,打开日志输出. 在生产系统运行中,这很有效,也是很有用的调试工具.1. 字符集编码问题 = 8859-1输出模板的编码方式 (). 你可选择对你模板的编码方式,如8. = 8859-1 对输出流( )的编码方式.在模板中使用() 指令时,这里设定的字符串名字将做为 代表循环中的计数器名,如以上设定,在模板中可以通过 $来访问. = 1() 中计数器的起始值.使用()时,定义内部流中开始和结束的错误消息标记,如果两者都设

25、这屯,错误消息将被输出到流中.但必须是两都定义. = 10定义模板的解析深度,当在一个模板中用()指示解析另外一个模板时,这个值可以防止解析时出现解析.2. 资源管理定义日志中的 务目开关.当打开时,如 第一次发现某个资源时, , . . . (可以有多个以.号分开的值),可以理解为指定资源文件的扩展名.描述资源装载器名字.实现的资源装载器的类名. 默认的是文件装载器. . . 资源位置的根目录. 当前配置会使用 遍历目录下的所有文件以查找资源.控制装载器是否对文件进行缓存.默认不存是为了方便开发和调试. 在生产环境布署( )时可设为以提高性能, 这里参数 应设为一个有效值以决定多久一次. =

26、 2当模把打开时,这个以秒为单位的值指示系统多久检测一次模板是否己修改以决定是否需要,如果设为 = 0, 将不做检测. 的默认参数完整示例: = 23. (宏配置) . .当 运行时,要被载入的含有宏代码库的文件名. 所有模板都可访问宏( ). 这个文件位置在相对于资源文件的根目录下. () ,定义在模板中是否可用()指令定义一个新的宏. 默认为,意味所有模板都可定义 . 注意,这个设定,如模板中的有可能替换掉全局的宏定义.控制用户定义的宏是否可以可以替换的宏库.控制模板中的宏的专有命名空间 , 一个模板中的 () 只能被定义它的模板访问. 这意味者所有的宏都不能共想了,当然也不会互想扰乱、替

27、换了. = 控制 的引用访问()是涉及到范围还是仅在当前的中.控制宏库是否自动载入. 设为时,源始的 将根据是否修改过而决定是否需要,可在调试时很方便,不需重启你的服务器,如用参数 = 的设置一样,主要是为方便开发调试用.4. 语义更改 . a a a () , a a , a a , a . .5. 运行时配置 = 20控制启动是需要创建并放到池中预备使用的模板解析器的个数这只是预装. 默认的20个对一般用户来说足够了. 即使这个值小了,也会运行时根据系统需要动态增加(但增加的不会装入池中). 新增时会在日志中输出信息 (日志记录配置)有很容易扩展的日志系统.即使不做任何设置,也会将日志输出

28、到当前目录下的 文件中. 对一些高级用户, 可以很方便的将你当前系统的日志和它整合起来.从1.3开始, 默认使用 做为日志记录器,也可以用 4j .首先它会在中查找. 找不到,会再尝试4j.1. 一般的可选日志功能:默认在当前目录下创建日志文件. 4j 从1.3开始, 可以将日志输出到4j配置中. 但你必须:1.确认4j . (你应一直这样做,自从使用.)2.配置使用4 .3.通过 4 参数指定日志条目名字.这里不建议使用老的4 . 可以在随后看到示例.你可以创建定制的日志类 你只需简单的实现接口然后将你的实现类名配置到运行时参数 的值, 在()时将创建你的日志实例. 更多相关信息可以看 和

29、. 要注意的是, 接口 在1.2后才支持这一功能.你可以将的日志和你现存系统的日志整合到一起. 4j 这里是一个使用4j做为日志的例子.代码 1 4; 2 4; 3 4 4 * 4j 5 ( 4 - ); 6 * a , 7 4 ); 8 (4, ); 上面的例子可以在.下找到.2. a 这是一个定制实现你自己的日志记录器,并将其加入到的日志系统中. 只需要支持这个接口.代码 1 * a 2 ( e) (资源装载器配置)一个非常重要的基础功能是资源管理和装载. 这里资源 不仅包括了模板()也可以处理非模板文件, 特别是在使用 () 指令时. (资源装载系统)很容易扩展,可以同时执行多个资源装载

30、器的操作. 这极大的方便了资源管理, 你可以根据需要,定制自己的资源装载器.当前包含4种资源管理器, 说明如下:(注意例程中的配置参数有一个配置名 (. ).这个 配置不一定会在你的系统中工作. 具体可见 理解系统如何工作. 这每一个都在包 . 中 : 这个从文件系统取得资源,其配置参数如下:这是己配置的默认装载器, 默认从当前目录( ). 但当你不想将模板入到容器的启动目录下时,这个就无能为力了。请参看 . : 这个可以从文件包中取得资源,在你把你的模板文件全部打包成 包时,系统会用这个来提取. 配置基本一样除过, 这里或以使用标准的 . : 从中取得资源. 一般来说,这意味着将从中 .这是

31、在类型应用常见的一种设置。支持 2.2 (或更新)规范的容器就是这样一个例子. 这种装载方式很有效, 因此你必须将你的模板打成包放到你的应用的 目录下.就不再存在绝对、相对路径的问题了,及以上两个装载器相比 不仅在 中用也,几乎所有应用的上下文()都有用. : 这个可以从数据库载入资源. 这个不是标准j2的一部分,因此需要取得J2 发行库,将j2加入到目录下,然后编译新的设置 为2,更细说明请见文档中对类的介绍.己配置的,可以参看 , .第一就是要配置的名字. 参数的值可以是你喜欢的用来关联指定的名字.下一步就是设置这个名字对应的了,这是最重要的一步 :这个例子中,我们告诉我们设置的名字叫,指

32、定的类是.下一步就是设置这个的一些重要参数. = 2这里,我们设置了查找模板的路径是 . 然后打开,最后,设置检测周期为2秒,以便检测新的或己更改过的模板来.上示是一些基本配置,随后,还会再有一些示例. : 你也可以什么都不改动,就用默认的配置. 这是默认的配置:引用 = 0 :多模板路径配置如下所示,只要用逗号分开就是 :引用 = 1, 2 = 10 : 多个配置,嗯,也很简单,不说了,看例子就是.引用# , , 3 = 1, , = 0 = , 2只是注意: , , 这三个名字不是固定是,可以根据你的喜好来设定. 但只要保持上面的对应关系就是.1. 插入定制资源管理器和实现资源管理器是相关

33、资源 ( )管理系统的核心部分, 它为应用程序取得请求模板,查找他们的有效资源,操作.对于高级用户,可以用自定制的系统取代这个默认的实现.资源管理器必须实现 . 具体描述请看文档. 尽量使用默认实现,除非你认为有必要在以下参数中换成你自己的 :这个参数也可通过 设定。资源的必须实现 接口,配置到参数中是 :这个参数也可通过 设定 (字符编码和国际化)从版本1.1开始, 可以设定资源的编解码类型. 在中也可以传入解码的方式 : 参数可以设定为支持的某个值 8 8859-1.关于字符集正式的名字, .注意,这仅仅是编码了模板自己 输出的编码由应用程序指定.s的( )处理数据很方便. 是一个用从中输

34、出视图的例子. 站点,文档包括 .一般来说,处理会用到 这样的东东将转成数据结构 ,如下例示是一个文档 :引用s 一小段处理的读取的程序如下:代码 ( , .) 现在,在模板中应用 :引用就像渲染一般模板那样, 使用 中的 . 虽然这个例子看起来不漂亮, 但它展示了这样做是多么容易.引用 . t . , . s - . () a . a a : s - () $ - , , ., , . , ( ). a () , :( $ = $() )$ , . , t ( )开发中常见的问题解答.1. t I ?在中无法访问到类的数据域最简单的原因是我们无法反射/内省( )这个对象.因为就来说,对象中要

35、隐藏自己没有必要外露的数据或命令.解决方法:包状成 命令反回它,保证它是公开访问的. 当然,你要保证能改动源文件, 否则,就要用工具来解析它. 是用来解析你的类的, 如下示例如何将一个 导出到模板中.假设你的类是 :代码 你可这样将它放入中:然后在模板中就可以代码的风格来访问 :如果你需要访问的非静态域时( )甚止是私有成员!那你就必须扩展或重写 这个类但你为什么要搞得这么复杂呢?到哪里提取模板文件?默认的,不做任何配置更改的情况下,会在当前目录下或相对及当前目录(如)下查找.对这些都是自动处理的. 只记住它自己的一个目录,这个概念不同及多根目录的文件系统( - C:, D:, ).希望这个指

36、南能帮助您出色的将应用到项目中. 请将您的意见反馈发送到 . 1 : 布署本文中的例程开发者经常受到的一个打击是将放错了地方一切都是好的除此之外. 使用 、 i这样的容器都可以运行起我们的 . 在目录 下. 虽然有些 (, ) 会自动将它编译,但是为了学习,还是你亲自动手先将它编译过. 的安装就不多说了. 目录是默认的查找它的应用的.所以,以下是我们要做的:首先,创建一个新的 暂时名叫 放到的 目录下, 这个新的目录结构如下 :引用将 放到下. (从1.2版本后,所有相关依赖包都打包在. 1.2中),当然,相关的依赖包也必须放到下. 具体可以看 , 这两节的介绍.将编译过的放到 下.将 放到目录 下.现在就可以启动来访问了.在中输出如下 :如不能工作,则试下 :8080看到输出结果了吗?.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图片设计 > 工程图纸

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁