SiteMesh使用

阅读更多

什么是SiteMesh?
    SiteMesh是OpenSymphony下的一个项目,是基于PageFilter,Servlet过滤器的通用组件.



SiteMesh为我们带来什么?
    我們可以想像一下,当我们的应用程序有大量的页面时候,为每个页面include我们各种各样的标签库,引入的js和css等样式,这将会成为重复性的工作,而且只要其中一个标签库进行了更新升级,所有页面的标签声明都需要重新更改,这项工作无疑是恐怖而且毫无技术含量的,SiteMesh就是为了帮助我们解决这个问题,把共有的标签例如js,css,struts-tags等重复性的声明抽象到一个页面当中,从而实现集中处理,增加维护性和解除页面间的耦合.



SiteMesh原理:
    SiteMesh应用了Decorator模式,用filter截取request和response,把页面组件head,content,banner结合为一个完整的视图。通常我们都是用include标签在每个jsp页面中来不断的包含各种header, stylesheet, scripts and footer,现在,在SiteMesh的帮助下,我們可以不再编写那些重复性的代码,从而集中在一个地方进行管理.容器接收到页面请求时,会把请求传递给PageFilter,PageFilter收集应用程序的响应细节,生成自定义的响应对象,然后连同请求一起传递给web应用程序.web应用程序把响应资源写入到自定义响应对象里,再返回给PageFilter.



SiteMesh使用:
    本事例使用基于Struts2来进行编写
    1.首先在我们的项目当中添加Maven的依赖


	opensymphony
	sitemesh
	2.4.2
	jar
	compile



	org.apache.struts
	struts2-sitemesh-plugin
	2.2.3
	jar
	compile



    2.在web.xml文件中增加如下配置

	sitemesh
	com.opensymphony.sitemesh.webapp.SiteMeshFilter

	

	sitemesh
	*.action
	REQUEST
	FORWARD
	INCLUDE



    3.在WEB-INF建立decorators.xml,该文件描述各个装饰器页面和如何过滤页面





	
	
	
		*no-decorate*
		/login*
	
	
	
	
		
		*
	
	
	


     以下为main.jsp代码



	
	<decorator:title/>
	
	




总结:
    使用了SiteMesh后,更集中的管理了各個頁面的标签,css,js的引入,虽然在实际开发当中一般会首先固定各个技术使用的版本,但由于需求的变更和技术的更新发展,有时候不得不更新所使用的版本,大量分散在不同页面的引入标签修改起来简直就是噩梦般的事情,而且SiteMesh的简单易用,我们何乐而不为的去使用SiteMesh呢?

   

你可能感兴趣的:(web,sitemesh)