- 浏览: 724677 次
- 性别:
- 来自: 西安
-
文章分类
最新评论
-
cuqing:
laogao598599 写道匿名内部类不一定是局部内部类,还 ...
匿名内部类访问外部类中的局部变量必须是final属性 -
laogao598599:
匿名内部类不一定是局部内部类,还可以作为成员变量
匿名内部类访问外部类中的局部变量必须是final属性 -
stand_star:
非常给力!
struts2验证规则配置文件命名方式 -
wenlongsust:
嗯, 将返回值修改为html的确就可以了
EasyUI form ajax submit后,在IE下提示下载内容的解决办法 -
勇往直前wwt:
这样是自动增长,但每次id还得插入,如何只插入其他字段而让id ...
把主键定义为自动增长标识符类型
一、介绍OpenSymphony
* OpenSymphony是一个开源项目,致力于提供企业级的J2EE组件。OpenSymphony的组件重点强调简洁、一体化、插件化(还是翻译为可插拔?)以及符合规范。
* 鉴于上面翻译不够准确,特意附上原文如下:OpenSymphony is an Open Source project dedicated to providing enterprise class J2EE components. Our components aim to stress simplicity, integration, pluggability and specification compliance.
二、介绍SiteMesh
* SiteMeshs是OpenSymphony的组件之一,用来在JSP中实现页面布局和装饰(layout and decoration)的框架组件,能够帮助网站开发人员较容易实现页面中动态内容和静态装饰外观的分离。
* 它是一个优于Apache Tiles的Web页面布局、装饰框架。
* SiteMesh的功能基础:Sitemesh是由一个基于Web页面布局、装饰及与现存Web应用整合的框架。它能帮助我们再由大量页面工程的项目中创建一致的页面布局和外观,如一致的导航条、一致的banner、一致的版权等。它不仅能处理动态的内容,如JSP、PHP、ASP、CGI等产生的内容,还能处理静态的内容,比如HTML的内容,使得它的内容也符合你的页面结构的要求。甚至它能像 include那样将HTML文件作为一个面板的形式嵌入到别的文件中去。所有的这些,都是GOF的Decorator模式的最生动的实现。装饰模式是在不必改变原类文件和使用集成的情况下,动态地扩展一个对象的功能。它能通过穿件一个包装对象,也就是装饰来包裹真是的对象。尽管它是由Java语言来实现的,但是它能与其他Web应用很好的集成。
* 为什么要使用SiteMesh?
将UI层很多共用的静态或动态部分抽取出来,以达到界面风格统一和美观的目的。Apache Tiles框架可以达到整合通用的静态或动态UI的目的,再加上它与Struts的完美集成,导致大小项目都把他作为UI层的首选框架,但是Tiles也有很多不足,而SiteMesh则刚好可以弥补这些不足。
三、SiteMesh vs Apache Tiles
SiteMesh的优点:
1. 使用角度,SiteMesh最强的一个特性是SiteMesh将decorator模式用在过滤器上,任何需要被装饰的页面都不知道它要被谁装饰,所以它就可以用来装饰来自php asp cgi等产生的页面。
2. 可以定义若干个装饰器,根据参数动态地选择装饰器,产生动态的外观以满足要求。
3. SiteMesh也有一套功能强大的属性体系,它能帮助你构建功能强大而灵活的装饰器。
4. 简单,系统设计阶段就能把模板文件和SiteMesh框架搭好,哪些页面使用框架,哪些页面不使用框架,通过UI Demo很快就能定义出来。
5. 在后续开发中所有成员几乎感受不到SiteMesh的存在,各自仅仅关心自己模板功能实现。
Apache Tiles的缺点:
1. Apache Tiles框架要求所有人不仅仅要了解并且清楚Apache Tiles的存在,并且要特别熟悉每一个Tiles layout模板的作用,否则就可能出现用错模板的情况;
2. 每个人涉及到的所有WEB页面都需要去配置文件里面逐个配置,不仅麻烦出错的几率还高;
四、SiteMesh的基本原理
一个请求到服务器后,如果该请求需要SiteMesh装饰,(1)服务器先解释被请求的资源,(2)然后根据配置文件获得用于该请求的装饰器,(3)最后用装饰器装饰被请求资源,(4)将结果一同返回给客户端浏览器。
五、如何使用SiteMesh
以struts2+spring2+hibernate3构架的系统为例
1、下载SiteMesh,下载地址:http://www.opensymphony.com/sitemesh/download.action
2、在工程中引入SiteMesh的必要jar包,和struts2-sitemesh-plugin-2.0.8.jar;
3、修改你的web.xml,在里面加入sitemesh的过滤器,示例代码如下:
<!-- sitemesh配置 -->
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>
com.opensymphony.module.sitemesh.filter.PageFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意过滤器的位置:应该在struts2的org.apache.struts2.dispatcher.FilterDispatcher过滤器之前,org.apache.struts2.dispatcher.ActionContextCleanUp过滤器之后,否则会有问题;
4、在下载的SiteMesh包中找到sitemesh.xml,(\sitemesh-2.3\src\example-webapp\WEB-INF目录下就有),将其拷贝到/WEB-INF目录下;(可选)
5、在sitemesh.xml文件中有一个property结点(如下),该结点指定decorators.xml在工程中的位置,让 sitemesh.xml能找到它;按照此路径新建decorators.xml文件,当然这个路径你可以任意改变,只要property结点的 value值与其匹配就行;
<property name="decorators-file" value="/WEB-INF/decorators.xml"/>
6、在WebRoot目录下新建decorators目录,并在该目录下新建一个模板jsp,根据具体项目风格编辑该模板,如下示例:我的模板:main.jsp
具体代码见OpenSymphony——SiteMesh——Decorators(3)
这就是个简单的模板,页面的头和脚都由模板里的静态HTML决定了,主页面区域用的是<decorator:body />标签;
也就是说凡是能进入过滤器的请求生成的页面都会默认加上模板上的头和脚,然后页面自身的内容将自动放到<decorator:body />标签所在位置;
<decorator:title default="Welcome to test sitemesh!" />:读取被装饰页面的标题,并给出了默认标题。
<decorator:head />:读取被装饰页面的<head>中的内容;
<decorator:body />:读取被装饰页面的<body>中的内容;
7、如果某个特殊的需求请求路径在过滤器的范围内,但又不想使用模板,SiteMesh也可以很好的解决这个问题。用第5步说到的decorators.xml进行配置。
下面是我的decorators.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<decorators defaultdir="/decorators">
<!-- Any urls that are excluded will never be decorated by Sitemesh -->
<excludes>
<pattern>/index.jsp*</pattern>
<pattern>/login/*</pattern>
</excludes>
<decorator name="main" page="main.jsp"> <!-- 指明了一个名为main的装饰器 -->
<pattern>/*</pattern>
</decorator>
</decorators>
decorators.xml有两个主要的结点:(main装饰器默认情况下装饰web应用根路径下的所有页面)
1. decorator结点指定了模板的位置和文件名,通过pattern来指定哪些路径引用哪个模板
2. excludes结点则指定了哪些路径的请求不使用任何模板
如上面代码,/index.jsp和凡是以/login/开头的请求路径一律不使用模板;
另外还有一点要注意的是:decorators结点的defaultdir属性指定了模板文件存放的目录;
六、使用SiteMesh总结
1. 使用SiteMesh带来的不仅仅是页面结构问题,它的出现让我们有更多的时间去关注底层业务逻辑,而不是整个页面的风格和结构。
2. 它让我们摆脱了大量用include方式复用页面尴尬局面;
3. 也避免了tiles框架在团队开发中的复杂度;
4. 它还提供了很大的灵活性以及给我们提供了整合异构Web系统页面的一种方案。
* OpenSymphony是一个开源项目,致力于提供企业级的J2EE组件。OpenSymphony的组件重点强调简洁、一体化、插件化(还是翻译为可插拔?)以及符合规范。
* 鉴于上面翻译不够准确,特意附上原文如下:OpenSymphony is an Open Source project dedicated to providing enterprise class J2EE components. Our components aim to stress simplicity, integration, pluggability and specification compliance.
二、介绍SiteMesh
* SiteMeshs是OpenSymphony的组件之一,用来在JSP中实现页面布局和装饰(layout and decoration)的框架组件,能够帮助网站开发人员较容易实现页面中动态内容和静态装饰外观的分离。
* 它是一个优于Apache Tiles的Web页面布局、装饰框架。
* SiteMesh的功能基础:Sitemesh是由一个基于Web页面布局、装饰及与现存Web应用整合的框架。它能帮助我们再由大量页面工程的项目中创建一致的页面布局和外观,如一致的导航条、一致的banner、一致的版权等。它不仅能处理动态的内容,如JSP、PHP、ASP、CGI等产生的内容,还能处理静态的内容,比如HTML的内容,使得它的内容也符合你的页面结构的要求。甚至它能像 include那样将HTML文件作为一个面板的形式嵌入到别的文件中去。所有的这些,都是GOF的Decorator模式的最生动的实现。装饰模式是在不必改变原类文件和使用集成的情况下,动态地扩展一个对象的功能。它能通过穿件一个包装对象,也就是装饰来包裹真是的对象。尽管它是由Java语言来实现的,但是它能与其他Web应用很好的集成。
* 为什么要使用SiteMesh?
将UI层很多共用的静态或动态部分抽取出来,以达到界面风格统一和美观的目的。Apache Tiles框架可以达到整合通用的静态或动态UI的目的,再加上它与Struts的完美集成,导致大小项目都把他作为UI层的首选框架,但是Tiles也有很多不足,而SiteMesh则刚好可以弥补这些不足。
三、SiteMesh vs Apache Tiles
SiteMesh的优点:
1. 使用角度,SiteMesh最强的一个特性是SiteMesh将decorator模式用在过滤器上,任何需要被装饰的页面都不知道它要被谁装饰,所以它就可以用来装饰来自php asp cgi等产生的页面。
2. 可以定义若干个装饰器,根据参数动态地选择装饰器,产生动态的外观以满足要求。
3. SiteMesh也有一套功能强大的属性体系,它能帮助你构建功能强大而灵活的装饰器。
4. 简单,系统设计阶段就能把模板文件和SiteMesh框架搭好,哪些页面使用框架,哪些页面不使用框架,通过UI Demo很快就能定义出来。
5. 在后续开发中所有成员几乎感受不到SiteMesh的存在,各自仅仅关心自己模板功能实现。
Apache Tiles的缺点:
1. Apache Tiles框架要求所有人不仅仅要了解并且清楚Apache Tiles的存在,并且要特别熟悉每一个Tiles layout模板的作用,否则就可能出现用错模板的情况;
2. 每个人涉及到的所有WEB页面都需要去配置文件里面逐个配置,不仅麻烦出错的几率还高;
四、SiteMesh的基本原理
一个请求到服务器后,如果该请求需要SiteMesh装饰,(1)服务器先解释被请求的资源,(2)然后根据配置文件获得用于该请求的装饰器,(3)最后用装饰器装饰被请求资源,(4)将结果一同返回给客户端浏览器。
五、如何使用SiteMesh
以struts2+spring2+hibernate3构架的系统为例
1、下载SiteMesh,下载地址:http://www.opensymphony.com/sitemesh/download.action
2、在工程中引入SiteMesh的必要jar包,和struts2-sitemesh-plugin-2.0.8.jar;
3、修改你的web.xml,在里面加入sitemesh的过滤器,示例代码如下:
<!-- sitemesh配置 -->
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>
com.opensymphony.module.sitemesh.filter.PageFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意过滤器的位置:应该在struts2的org.apache.struts2.dispatcher.FilterDispatcher过滤器之前,org.apache.struts2.dispatcher.ActionContextCleanUp过滤器之后,否则会有问题;
4、在下载的SiteMesh包中找到sitemesh.xml,(\sitemesh-2.3\src\example-webapp\WEB-INF目录下就有),将其拷贝到/WEB-INF目录下;(可选)
5、在sitemesh.xml文件中有一个property结点(如下),该结点指定decorators.xml在工程中的位置,让 sitemesh.xml能找到它;按照此路径新建decorators.xml文件,当然这个路径你可以任意改变,只要property结点的 value值与其匹配就行;
<property name="decorators-file" value="/WEB-INF/decorators.xml"/>
6、在WebRoot目录下新建decorators目录,并在该目录下新建一个模板jsp,根据具体项目风格编辑该模板,如下示例:我的模板:main.jsp
具体代码见OpenSymphony——SiteMesh——Decorators(3)
这就是个简单的模板,页面的头和脚都由模板里的静态HTML决定了,主页面区域用的是<decorator:body />标签;
也就是说凡是能进入过滤器的请求生成的页面都会默认加上模板上的头和脚,然后页面自身的内容将自动放到<decorator:body />标签所在位置;
<decorator:title default="Welcome to test sitemesh!" />:读取被装饰页面的标题,并给出了默认标题。
<decorator:head />:读取被装饰页面的<head>中的内容;
<decorator:body />:读取被装饰页面的<body>中的内容;
7、如果某个特殊的需求请求路径在过滤器的范围内,但又不想使用模板,SiteMesh也可以很好的解决这个问题。用第5步说到的decorators.xml进行配置。
下面是我的decorators.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<decorators defaultdir="/decorators">
<!-- Any urls that are excluded will never be decorated by Sitemesh -->
<excludes>
<pattern>/index.jsp*</pattern>
<pattern>/login/*</pattern>
</excludes>
<decorator name="main" page="main.jsp"> <!-- 指明了一个名为main的装饰器 -->
<pattern>/*</pattern>
</decorator>
</decorators>
decorators.xml有两个主要的结点:(main装饰器默认情况下装饰web应用根路径下的所有页面)
1. decorator结点指定了模板的位置和文件名,通过pattern来指定哪些路径引用哪个模板
2. excludes结点则指定了哪些路径的请求不使用任何模板
如上面代码,/index.jsp和凡是以/login/开头的请求路径一律不使用模板;
另外还有一点要注意的是:decorators结点的defaultdir属性指定了模板文件存放的目录;
六、使用SiteMesh总结
1. 使用SiteMesh带来的不仅仅是页面结构问题,它的出现让我们有更多的时间去关注底层业务逻辑,而不是整个页面的风格和结构。
2. 它让我们摆脱了大量用include方式复用页面尴尬局面;
3. 也避免了tiles框架在团队开发中的复杂度;
4. 它还提供了很大的灵活性以及给我们提供了整合异构Web系统页面的一种方案。
发表评论
-
bootstrap布局设计在线工具
2015-10-03 17:02 1038http://www.runoob.com/ http://w ... -
HTML5的<canvas>实用网站
2014-11-03 09:52 8201,SketchPad Sketchpad 是个优秀的 HTM ... -
js获取网页高度
2014-07-16 16:00 839<script> function getInf ... -
response.setContentType
2014-06-09 17:23 826HTML format (.htm or .html): te ... -
EasyUI form ajax submit后,在IE下提示下载内容的解决办法
2014-05-19 21:25 8613使用EasyUI form插件创建或编辑成功后返回json,在 ... -
e.keycode详解
2014-05-18 16:44 1114function submitLoginForm(e) { ... -
easyui form 方式提交数据
2014-05-16 22:24 25499<form id="ff" meth ... -
jsp 静态引入与动态引入
2014-05-15 18:08 13251.动态引入<jsp:include page=&quo ... -
apache tomcat的几个版本
2014-05-14 12:05 761* zip 不需要安装,解压后直接 ... -
HTML让表单 文本框 只读不可编辑的方法
2014-05-12 10:46 19181: onfocus=this.blur() <inpu ... -
js获取项目根路径
2014-02-08 11:50 923//js获取项目根路径,如: http://localhost ... -
http状态代码含义
2013-12-02 01:00 528100 - 表示已收到请求的一部分,正在继续发送余 ... -
SSL证书请求文件(CSR)生成指南 - Apache SSL
2013-11-18 16:31 4659SSL证书请求文件(CSR)生 ... -
SSL证书请求文件(CSR)生成指南 - Apache SSL
2013-11-14 11:08 1433http://www.willrey.com/support/ ... -
javascript 代码中window.external的使用
2013-05-28 15:57 13667C#与javascript交互 1. 在Form中,要让We ... -
将html table中的数据封装成json格式数据
2013-03-14 19:21 3988var tab=document.getElement ... -
jsp打印log4j日志
2013-01-08 14:48 1442Logger _log1= Logger.getLogger( ... -
out.print()与out.write()区别
2013-01-04 17:43 2948在servlet中: PrintWriter out = re ... -
Dump、javacore内存分析资源
2012-02-27 17:05 1634http://www.alphaworks.ibm.com/t ... -
websphere的IIOP服务端口
2012-02-27 15:30 2175was5.0上default server的默认boots ...
相关推荐
<constant name="struts.plugins" value="com.opensymphony.sitemesh"/> ``` 2. **配置 SiteMesh**:在 Web 应用的 `web.xml` 配置文件中,添加 SiteMesh 过滤器,指定装饰器路径和默认装饰器。例如: ```xml ...
这可以通过 `<sitemesh:decorate>` 标签或者在 `decorators.xml` 文件中进行配置。 4. **使用 SiteMesh**:一旦配置完成,SiteMesh 将自动处理所有指定的请求,将页面内容插入到 Decorator 中。你可以在每个 JSP ...
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class> <filter-name>sitemesh <url-pattern>/* ``` 这段配置会将所有URL映射到Sitemesh Filter,从而让Sitemesh能够处理所有请求...
2. **过滤器(Filter)配置**: 在`web.xml`中,需要配置`com.opensymphony.sitemesh.webapp.SiteMeshFilter`以启用Sitemesh。配置包括设置过滤器的顺序和其他必要的初始化参数。 3. **装饰规则(Decoration Rules)...
<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class> <filter-name>sitemesh <url-pattern>/* ``` 3. **定义Decorator**:创建decorators.xml文件,用于定义页面装饰器。例如...
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class> <filter-name>sitemesh <url-pattern>/* ``` 此配置告诉服务器使用`PageFilter`作为过滤器,并将其应用于所有URL路径...
- **定义装饰器目录**:创建一个名为`decorators`的目录,用于存放装饰器文件(即使用Sitemesh标签的JSP文件)。 - **编写装饰器模板**:创建一个装饰器文件,例如命名为`mymain.jsp`,并放置在`decorators`目录下。...
<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class> <filter-name>Sitemesh <url-pattern>/* ``` 这段代码将Sitemesh过滤器应用到所有URL,这意味着所有请求都会经过Sitemesh...
可以通过官方网址下载:[http://www.opensymphony.com/sitemesh/](http://www.opensymphony.com/sitemesh/)。 3. **创建装饰器配置文件** `decorators.xml` 在`WEB-INF`目录下创建`decorators.xml`文件,该文件...
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class> <filter-name>sitemesh <url-pattern>/* ``` 2. **taglib定义**:在web.xml中定义Sitemesh的taglib,以便在JSP页面中...
<constant name="struts.plugins" value="com.opensymphony.sitemesh.webapp.decorator.struts2.Struts2DecoratorPlugin"/> |/logout.action|/error.jsp" /> ``` 4. **创建装饰器文件**:在Web应用程序的WEB-INF/...
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class> <filter-name>sitemesh <url-pattern>/* ``` 这段配置会告诉Servlet容器(例如Tomcat),当用户请求任何URL时,都要先...
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class> ``` 3. **struts2**过滤器:Struts2框架自带的过滤器,用于处理所有Struts2相关的请求。 ```xml <filter-name>struts2 ...
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class> <filter-name>sitemesh <url-pattern>/* ``` ### 2. 创建装饰器(Decorator) 装饰器是 sitemesh 的核心概念,它是一个 ...
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class> <filter-name>Sitemesh <url-pattern>/* ``` 3. **设置默认装饰器**:在Web应用的根目录下创建`WEB-INF/decorators....
3. **创建装饰模板**:Sitemesh 使用一个名为 `decorators` 的目录来存储装饰模板。这些模板定义了页面的通用结构,如头部、底部和侧边栏。例如,你可以创建一个 `default.jsp` 文件,其中包含你的页面布局。 4. **...
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class> <filter-name>decorator <url-pattern>/* ``` 4. 创建装饰模板(Decorator):在Web应用的`WEB-INF/decorators`目录下...
com.opensymphony.module.sitemesh.filter.PageFilter <param-name>debug.pagewriter <param-value>true <filter-name>sitemesh <url-pattern>/* ``` 2. **定义修饰器**:在`WEB-INF`目录下创建...
3. **设置装饰器目录**: Sitemesh 会查找特定目录下的装饰器文件,默认为 `WEB-INF/decorators`。如果需要自定义,可以配置 `decorators-file` 参数。 **创建装饰器模板** Sitemesh 使用 JSP 或 FreeMarker 等模板...