com.opensymphony.module.sitemesh.filter.pagefilter作用?

转载 2011年02月23日 15:03:00

1.sitemesh简介

2.与strust tiles比较

3.基本原理

4.简单例子

5.总结

6.参考资料

1.sitemesh简介

     sitemesh是由一个基于web页面布局、装饰以及与现存web应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外 观,如一致的导航条,一致的banner,一致的版权,等等。它不仅仅能处理动态的内容,如jsp,php,asp等产生的内容,它也能处理静态的内容, 如htm的内容,使得它的内容也符合你的页面结构的要求。甚至于它能将html文件象include那样将该文件作为一个面板的形式嵌入到别的文件中去。 所有的这些,都是gof的decorator模式的最生动的实现。尽管它是由java语言来实现的,但它能与其他web应用很好地集成。

2.与strust tiles比较

     从使用角度来看,tiles似乎是sitemesh标签<page:applydecorator>的一个翻版。其实sitemesh 最强的一个特性是sitemesh将decorator模式用在过滤器上。任何需要被装饰的页面都不知道它要被谁装饰,所以它就可以用来装璜来自php、 asp、cgi等产生的页面了。你可以定义若干个装饰器,根据参数动态地选择装饰器,产生动态的外观以满足你的需求。它也有一套功能强大的属性体系,它能 帮助你构建功能强大而灵活的装饰器。相比较而言,在这方面tiles就逊色许多。

3.基本原理

    一个请求到服务器后,如果该请求需要sitemesh装饰,服务器先解释被请求的资源,然后根据配置文件获得用于该请求的装饰器,最后用装饰器装饰被请求资源,将结果一同返回给客户端浏览器。

下边是由jsp和cgi产生的两个页面,它们通过sitemesh装饰后,形成了一致的用户界面。

4.简单例子

   环境说明:

   windows2k+、tomcat4.0+

1.安装:

    将sitemesh-2.1.jar复制到lib目录下;修改web.xml文件,也就是在web.xml中加入粗倾体标记的部分;

<?xml version="1.0" encoding="gb2312"?>

<! doctype web-app public "-//sun microsystems, inc.//dtd web application  2.3//en" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<filter>

        <filter-name>sitemesh</filter-name>

         <filter-lass>com.opensymphony.module.sitemesh.filter.pagefilter</filter-class></filter>

<filter-mapping>

        <filter-name>sitemesh</filter-name>

        <url-pattern>/*</url-pattern>

</filter-mapping>


</web-app>

2.建立一个目录,名字叫decorators,当然你也可以取别的,用于放装饰器(也就是一个使用了sitemesh标签的jsp文件)用;

3.定义一个你的模板并把它放到decorators目录下,我的文体名称叫:mymain.jsp文件内容如下:

<%@ taglib  uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"  %>

<%@ taglib uri="http://www.opensymphony.com/sitemesh/page"  prefix="page" %>


<html>

<head>

<meta http-equiv="content-language" content="zh-cn">

<meta http-equiv="content-type" content="text/html;  charset=gb2312">

<meta name="generator" content="microsoft frontpage 4.0">

<meta name="progid" content="frontpage.editor.document">

<title>ap - <decorator:title default="welcome to  architecture pub!" />

</title>

<decorator:head />

</head>

< body><table border="0" cellpadding="2" width="100%" height= "151">  <tr>    <td width="20%" height="74">      <p  align="center"><font color="#000080" size="5">test sitemesh< /font></td>    <td width="73%" height="74"></td>   </tr>  <tr><td width="20%" height="28" bgcolor="#f3f3f3"  valign="top" >

<page:applydecorator page="/menu.jsp" name="panel" />

</td>    <td width="73%" height="28" bgcolor="#bed6fa">

<decorator:body />

< /td>  </tr>  <tr>    <td width="100%" height="31"  colspan="2" bgcolor="#f1f0ed">      <p align="center">powered  by gagaghost</td>  </tr></table></body>< /html>

说明:

<decorator:title default="welcome to test sitemesh!" />:读取被装饰页面的标题,并给出了默认标题。

<decorator:head />:读取被装饰页面的<head>中的内容;

<page:applydecorator page="/menu.jsp" name="panel" />:把menu.jsp文件用 panel指定的装饰器装饰,并把结果插入到该位置;

<decorator:body />:读取被装饰页面的<body>中的内容;

当然还有很多的标签,这里不再详细描述。

4.在docorators.xml文件里配置刚写好的模板mymain.jsp,内容如下:

<?xml version="1.0" encoding="iso-8859-1"?>

<decorators defaultdir="/decorators">

    <decorator name="main" page="mymain.jsp">

        <pattern>/*</pattern>

</decorator>

    <decorator name="panel" page="panel.jsp"/>

    <decorator name="printable" page="printable.jsp"/>

</decorators>

这里我是把对所有的请求都用mymail.jsp来装饰。

5.好了,run一下你的“小板凳”!你会看到如下结果:

5.总结

     使用sitemesh给我们带来的是不仅仅是页面结构问题,它的出现让我们有更多的时间去关注底层业务逻辑,而不是整个页面的风格和结构。它让我们 摆脱了大量用include方式复用页面尴尬局面,它也提供了很大的灵活性以及给我们提供了整合异构web系统页面的一种方案。我们期望它在未来的版本中 会有更多的特性出现。

6.参考资料

http://www.opensymphony.com/

Cannot load excludes configuration file "/WEB-INF/decorators.xml" as specified in "sitemesh.xml" or "sitemesh-default.xml"(已解决)

 错误内容如下: 严重: Servlet.service() for servlet jsp threw exceptioncom.opensymphony.module.sitemesh.facto...
  • cresswang
  • cresswang
  • 2009年11月26日 10:52
  • 6398

Spring的作用、Struts的作用、Hiberante的作用

Spring的作用 Struts的作用 Hiberante的作用
  • master_yao
  • master_yao
  • 2015年12月02日 21:21
  • 1830

com.opensymphony.module.sitemesh.filter.PageFilter页面装饰器

1.sitemesh简介            sitemesh是由一个基于web页面布局、装饰以及与现存web应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外 观,如一致...
  • u011097980
  • u011097980
  • 2013年09月06日 16:57
  • 1440

SiteMesh简介

Web.xml中的写法: sitemeshFilter com.opensymphony.sitemesh.webapp.SiteMeshFilter sitemesh...
  • fox_lht
  • fox_lht
  • 2012年04月03日 18:02
  • 10827

static作用const作用

static: 1.声明为static的变量,即使是在函数内部;它也仅仅初始化一次,被存放在全局数据段内; 2.声明为static的全局变量,仅仅在本文件中具有可见性;其他文件不可见,防止命名冲突; ...
  • cwj649956781
  • cwj649956781
  • 2013年11月21日 10:07
  • 610

电容的作用?电容器的作用?

电容的作用? 电容的作用有滤波、耦合、旁路、去耦的功能。请问下: 1、滤波、旁路和去耦有什么区别? 2、滤波、旁路和去耦是指电容并联在电路中吗?耦合是指电容串联在电路中吗? 3、0.1UF的电容(并...
  • cfxzy
  • cfxzy
  • 2014年12月04日 15:40
  • 699

sitemesh异常及解决

整合以前的老系统,当访问某一Action并跳转到某一页面时,sitemesh报异常如下: java.lang.ArrayIndexOutOfBoundsException: -1 at com.op...
  • im110
  • im110
  • 2011年02月23日 14:48
  • 2260

SiteMesh和Struts2,Filter的配置顺序

Sitemesh和Struts2结合时要特别注意它们各自Filter的顺序,否则会导致双方都不能正常工作。而又由于Struts2在2.1.3之前使用的是FilterDispatcher,2.1.3之后...
  • gaojinshan
  • gaojinshan
  • 2014年04月03日 23:01
  • 1985

浅谈对于作用域的理解

最经在学一个工作流框架JBMP的时候,又
  • u010930968
  • u010930968
  • 2014年07月22日 16:29
  • 967

JavaScript中的作用域以及this变量

今天我想简单讨论下关于Javascript的作用域和this变量。“作用域”的概念就是说,我们的代码能够从哪里去访问某些函数或者变量,也就是它们所存在的上下文,或者说就是它们被执行的地方。第一种作用域...
  • zlxadhkust
  • zlxadhkust
  • 2014年04月26日 11:05
  • 1017
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:com.opensymphony.module.sitemesh.filter.pagefilter作用?
举报原因:
原因补充:

(最多只允许输入30个字)