`
lwz52169
  • 浏览: 36595 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

在Struts2中使用SiteMesh插件

阅读更多
    通过使用SiteMesh插件,就可以在Struts2应用中使用SiteMesh装饰器页面来统一应用程序所有页面的显示风格。实际上,在Struts2中使用SiteMesh非常简单,因为Struts2将所有的值都保存在Stack Context或ValueStack中,因此在SiteMesh页面中使用Struts2的标准标签即可。

1 安装SiteMesh插件
与整合其他框架类似,Struts2与SiteMesh框架的整合也使用了插件方式进行管理,因此为了在Struts2中使用SiteMesh的页面装饰,必须安装SiteMesh插件。安装SiteMesh插件非常简单,将Struts2下的struts2-sitemesh-plugin-2.0.6.jar文件复制到Web应用的根路径下,即可完成SiteMesh插件的安装。
正如前面看到的,为了整合SiteMesh框架必须在web.xml文件中配置SiteMesh的核心过滤器,让该核心过滤器来过滤所有的用户请求。但我们知道,Struts2的所有值是保存在Stack Context或者ValueStack中的,默认情况是,某个过滤器一旦访问了该Stack Context或ValueStack后,里面对应的值将会被清除掉,如果先使用Struts2的FilterDispatcher来过滤用户请求,则SiteMesh的过滤器将无法取得Stack Context或者ValueStack中的数据。
为了解决整个问题,Struts2提供了ActionContextCleanUp类。在Struts2的架构中,标准的过滤器链(filter-chain)一般以 ActionContextCleanUp 开始,后面跟着其他需要的过滤器,最后,由 FilterDispatcher来处理请求,FilterDispatcher通常是将请求传递给ActionMapper。
ActionContextCleanUp 的一个重要作用是整合SiteMesh页面装饰器,它通知FilterDispatcher在正确的时间清楚ActionContext中的请求数据。
注意:如果需要在SiteMesh的修饰器页面中访问ActionContext,ActionContextCleanUp 过滤器必须放在过滤器链的起点。
ActionContextCleanUp过滤器用来与FilterDispatcher协同工作来整合SiteMesh,通常,我们会把把ActionContextUp过滤器排在第一位,似乎将FilterDispatcher排在第二位是较好解决方案。
但问题是:ActionContextCleanUp过滤器只能保证在FilterDispatcher之前先不清除Stack Context和ValueStack中的值。如果将SiteMesh过滤器排在FilterDispatcher之后,这会导致SiteMesh过滤器无法访问到Stack Context和ValueStack中的值。
因此,为了让SiteMesh过滤器和FilterDispatcher都可访问到Stack Context和ValueStack中的值,且FilterDispatcher可以在合适时机清除Stack Context和ValueStack中的值,应该使用如下的过滤器顺序:
(1)ActionContextCleanUp过滤器。
(2)SiteMesh核心过滤器。
(3)FilterDispatcher过滤器。
为此,在web.xml配置文件中使用如下三个过滤器,且过滤器的排列顺序也不能改变。
<!-- 定义ActionContextCleanUp过滤器 -->
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<!-- 定义SiteMesh的核心过滤器 -->
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<!-- 定义Struts2的核心过滤器 -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<!-- 定义过滤器链 -->
<!-- 排在第一位的过滤器是:ActionContextCleanUp过滤器。 -->
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 排在第二位的过滤器是:SiteMesh核心过滤器。 -->
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 排在第三位的过滤器是:FilterDispatcher过滤器。 -->
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
正如前面配置文件看到的,配置文件中定义了三个过滤器,这三个过滤器都会过滤所有的用户请求。这三个过滤器按顺序分别是:ActionContextCleanUp过滤器、SiteMesh核心过滤器和FilterDispatcher过滤器,这也正是前面分析的过滤器排列结果。

2 在Struts2中使用SiteMesh
一旦完成了SiteMesh插件的安装后,在Struts2应用中使用SiteMesh就变得非常简单了。
安装了SiteMesh插件后,在Struts2中使用SiteMesh框架可以按如下步骤进行:
(1)将SiteMesh的二进制JAR文件复制到Web应用的的WEB-INF/lib路径下。
(2)定义装饰器页面。
(3)通过decorators.xml文件来配置装饰器页面。
下面以MyFaces+Struts2+Spring的整合应用为基础,并且使用装饰器来装饰该应用。
实际上,这里所介绍的步骤可以为任何一个Web应用增加统一的页面装饰风格,为一个Web应用增加统一的页面装饰风格按如下步骤进行:
(1)正如前面介绍的,将SiteMesh的二进制文件,也就是sitemesh-2.3.jar文件复制到Web应用的WEB-INF/lib路径下,再将Struts2的SiteMesh插件文件,也就是struts2-sitemesh-plugin-2.0.6.jar文件复制到Web应用的WEB-INF/lib路径下。
(2)修改web.xml文件,增加ActionContextCleanUp过滤器定义和SiteMesh的PageFilter过滤器定义,修改后的web.xml文件的代码如下:
<?xml version="1.0" encoding="GBK"?>
<web-app id="jsf" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 定义ActionContextCleanUp过滤器 -->
<filter>
   <filter-name>struts-cleanup</filter-name>
   <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<!-- 定义SiteMesh的核心过滤器 -->
<filter>
   <filter-name>sitemesh</filter-name>
   <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<!-- 定义Struts2的核心过滤器 -->
    <filter>
        <filter-name>struts</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
<!-- 定义过滤器链 -->
<!-- 排在第一位的过滤器是:ActionContextCleanUp过滤器。 -->
    <filter-mapping>
        <filter-name>struts-cleanup</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
<!-- 排在第二位的过滤器是:SiteMesh核心过滤器。 -->
    <filter-mapping>
        <filter-name>sitemesh</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
<!-- 排在第三位的过滤器是:FilterDispatcher过滤器。 -->
    <filter-mapping>
        <filter-name>struts</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
<!-- 定义一个Listener,该Listener在应用启动时创建Spring容器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
<!-- 定义一个Listener,该Listener在应用启动时加载MyFaces的Context -->
<listener>
        <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
    </listener>
<!-- 配置JSF的FacesServlet,让其在应用启动时加载 -->
<servlet>
   <servlet-name>faces</servlet-name>
   <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
   <load-on-startup>1</load-on-startup>
</servlet>
<!-- 让FacesServlet拦截所有以*.action结尾的请求 -->
<servlet-mapping>
   <servlet-name>faces</servlet-name>
   <url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
经过上面的配置,已经增加了SiteMesh的支持。
(3)定义装饰器页面。
(4)增加装饰器定义文件,也就是在Web应用的WEB-INF/路径下下增加decorators.xml。

分享到:
评论

相关推荐

    struts2-sitemesh-plugin-2.2.1.1.jarstruts2

    **使用Struts2 Sitemesh插件** 在Struts2的Action配置中,可以使用`decorator`结果类型指定装饰器: ```xml &lt;result type="decorator"&gt;/myLayout_decorator ``` 这里的`/myLayout_decorator`是装饰器模板的名称,...

    Struts2整合SiteMesh技巧

    3. **Struts2 SiteMesh插件**:作为桥梁连接Struts2与SiteMesh。 #### 过滤器配置 在项目的`web.xml`文件中,需要添加三个过滤器来支持Struts2与SiteMesh的整合: 1. **struts-cleanup**过滤器:该过滤器的作用是...

    Struts2整合SiteMesh

    2. **配置Struts2**:在struts.xml配置文件中,添加SiteMesh插件的配置,使Struts2知道需要使用SiteMesh进行页面装饰: ```xml &lt;constant name="struts.action.excludePattern" value="/decorator.*"/&gt; ...

    SiteMesh 开发 struts插件

    4. **标记可装饰的页面**:在 Struts2 的 Action 类或者 JSP 页面中,使用 `@Decorator` 注解或 `&lt;sitemesh:meta&gt;` 标签指定页面是否需要被装饰以及使用的装饰器名称。 例如,在 Action 类中: ```java @Decorator...

    struts2与sitemesh整合所需架包

    3. **配置struts2-sitemesh-plugin**:在Struts2的配置文件(struts.xml)中启用Sitemesh插件。这将告诉Struts2如何与Sitemesh协作。 ```xml &lt;constant name="struts.plugins" value=...

    struts2+sitemesh例子

    Struts2和Sitemesh是两个非常流行的Java Web开发框架,它们在构建高效、结构化的MVC(模型-视图-控制器)应用中起到关键作用。Struts2是一个基于MVC设计模式的开源框架,主要用于控制应用程序的流程,而Sitemesh则是...

    struts2-sitemesh-plugin-2.0.6.jar

    struts框架与sitemesh框架整合的插件,在java web开发中可以制作模板页,使自己做的网站看起来更专业

    struts2sitemesh-freemarker 源码

    4. **整合与配置**:在源码中,你会看到`struts-plugin.xml`文件,这是Struts2的插件配置,用于集成Sitemesh。同时,Sitemesh的配置文件(通常为`sitemesh.properties`)也会影响装饰效果,例如设置哪些URL应该被...

    struts2 + spring2+hibernate3+sitemesh+myeclipse

    Struts2、Spring2、Hibernate3和Sitemesh是经典的Java Web开发框架组合,它们在构建企业级应用中发挥着重要作用。MyEclipse则是一款强大的集成开发环境,为这种组合提供了便捷的开发支持。 Struts2是MVC(模型-视图...

    Struts2 in action中文版

    9.1 为什么在Struts 2中使用Spring 196 9.1.1 依赖注入能做些什么 197 9.1.2 Spring如何管理对象和注入依赖 199 9.1.3 使用接口隐藏实现 200 9.2 将Spring添加到Struts 2 202 9.2.1 让Spring管理动作、拦截器和结果...

    struts2参考文档(word版)

    此外,文档还介绍了Object-Graph Navigation Language (OGNL),这是Struts2中的表达式语言,用于数据绑定和类型转换。在进行数据校验方面,Struts2提供了一套内置的验证机制,确保了输入数据的正确性。Web项目国际化...

    Struts2漏洞检查工具2019版 V2.3.zip

    4. **插件漏洞**:Struts2有许多插件,如Struts2 Dojo、Struts2 Sitemesh等,它们可能会有自己的安全漏洞。保持这些插件的最新版本是防止攻击的重要步骤。 Struts2漏洞检查工具2019版 V2.3.exe 是一个专为检测这些...

    struts-2.3.37.zip

    9. **CLASSWORLDS-LICENSE.txt**:ClassWorlds可能是用于管理Maven构建过程中的类加载器,可能在Struts2的构建或部署过程中使用。 10. **XSTREAM-LICENSE.txt**:XStream是一个Java库,能够将任何对象序列化为XML,...

    Struts2讲义-作者:吴峻申

    - 在Struts2中集成SiteMesh非常简单,只需要在配置文件中添加相应配置即可。 #### 三、为什么选择Struts2 - **Struts2的优势**: - Struts2具有高度的灵活性和可扩展性。 - 它支持多种数据库访问技术和框架,如...

    struts2 讲义完整版

    OGNL是Struts2中的表达式语言,用于在视图层和模型层之间传递数据,支持复杂的数据绑定和动态方法调用。同时,OGNL也负责类型转换,自动将字符串转换为对应的Java类型。 1.2.6 进行校验 Struts2支持基于注解或XML的...

    SiteMesh入门示例

    你可以在每个 JSP 页面中使用 `&lt;%@ taglib prefix="sitemesh" uri="http://www.opensymphony.com/sitemesh/page"%&gt;` 导入 SiteMesh 的标签库,以便进行更精细的控制,比如排除某些部分不被装饰。 5. **源码分析**:...

    struts2 spring ibatis整合的最少最全jar包

    1. 添加依赖:整合SSH,需要在项目中引入相应的jar包,包括Struts2、Spring、iBatis以及它们的依赖库,例如sitemesh用于页面装饰。确保包含所有必要的jar,如描述中提到的,这里有18个jar包,涵盖了基本需求。 2. ...

    sitemesh3插件

    2. **配置web.xml**:在Web应用的配置文件web.xml中,需要添加Sitemesh3的Filter配置,指定装饰器的位置以及如何应用装饰。 3. **创建装饰模板**:创建一个或多个HTML模板文件,定义页面的通用结构,如header.html...

    Struts-2.2.3.1-all

    4. **OGNL-LICENSE.txt**:Object-Graph Navigation Language (OGNL) 是Struts2中的表达式语言,用于访问和修改对象属性。 5. **XPP3-LICENSE.txt, XSTREAM-LICENSE.txt**:这两个文件分别对应XPP3(XML Pull ...

Global site tag (gtag.js) - Google Analytics