- 浏览: 209666 次
- 性别:
- 来自: 厦门
-
文章分类
- 全部博客 (100)
- java设计模式学习 (1)
- javascript (2)
- sqlserver (3)
- java基础 (18)
- spring (8)
- webwork (3)
- itext (4)
- xstream (1)
- freemarker (2)
- jsp (6)
- hibernate (7)
- jquery (1)
- json (1)
- poi (2)
- iprocess (1)
- bw (1)
- bpm (0)
- java2word (0)
- ireport (1)
- Struts2.0 (13)
- webservice (6)
- j2ee基础 (7)
- jms (3)
- protocol buffer (3)
- jfreechart (1)
- spring mvc (0)
- http编程机制探析 (1)
- pb (2)
- oracle (0)
- sso (0)
- mybatis (0)
- ssl与ca认证 (0)
- cas (1)
最新评论
-
mayucai:
这个博客写的我是真服,写了一大堆,结果最后来一句这是错的。
poi获取excel和word总页数 -
iris_1992:
2005年以前,国外开原报表完全碾压国产软件,但是现在国内软件 ...
ireport与jasperreports开发总结 -
高攀sky:
...
Servlet中的八大Listener -
rmn190:
多谢, 试了N多个后, 终于参考您的内容, 设置出来了。老天开 ...
ireport与jasperreports开发总结 -
辣油_:
System.out.println("草 ...
Spring-JNDI配置
1.在工程中引入SiteMesh的必要jar包,和struts2-sitemesh-plugin-2.0.8.jar(该包在strut2.0的lib目录中可以找到);
2.Struts2的所有值是保存在Stack Context或者ValueStack中的,默认情况是,
某个过滤器一旦访问了该Stack Context或ValueStack后,里面对应的值将会被清除掉,
如果先使用Struts2的FilterDispatcher来过滤用户请求,
则SiteMesh的过滤器将无法取得Stack Context或者ValueStack中的数据。
为了解决整个问题,Struts2提供了ActionContextCleanUp类。在Struts2的架构中,
标准的过滤器链(filter-chain)一般以 ActionContextCleanUp 开始,后面跟着其他需要的过滤器,
最后,由 FilterDispatcher来处理请求,FilterDispatcher通常是将请求传递给ActionMapper
但问题是: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过滤器。
3.
struts2.13前配置如下:
- filter>
- <filter-name>ActionContextCleanUp</filter-name>
- <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
- </filter>
- <filter>
- <filter-name>sitemesh</filter-name>
- <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
- </filter>
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
- </filter>
从struts2.1.3开始ActionContextCleanUp 和 FilterDispatcher过滤器,已经不建议使用了。将使用StrutsPrepareFilter 和StrutsExecuteFilter拦截器替代。正确的配置方式如下:
- <filter>
- <filter-name>struts-prepare</filter-name>
- <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
- </filter>
- <filter>
- <filter-name>sitemesh</filter-name>
- <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
- </filter>
- <filter>
- <filter-name>struts-execute</filter-name>
- <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts-prepare</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>sitemesh</filter-name>
- <url-pattern>/*</url-pattern>
- <dispatcher>REQUEST</dispatcher>
- <dispatcher>FORWARD</dispatcher>
- <dispatcher>INCLUDE</dispatcher>
- </filter-mapping>
- <filter-mapping>
- <filter-name>struts-execute</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <servlet>
- <servlet-name>sitemesh-freemarker</servlet-name>
- <servlet-class>org.apache.struts2.sitemesh.FreemarkerDecoratorServlet</servlet-class>
- <init-param>
- <param-name>default_encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>sitemesh-freemarker</servlet-name>
- <url-pattern>*.ftl</url-pattern>
- </servlet-mapping>
- <listener>
- <listener-class>org.apache.struts2.dispatcher.ng.listener.StrutsListener</listener-class>
- </listener>
<filter> <filter-name>struts-prepare</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class> </filter> <filter> <filter-name>sitemesh</filter-name> <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class> </filter> <filter> <filter-name>struts-execute</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts-prepare</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> </filter-mapping> <filter-mapping> <filter-name>struts-execute</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>sitemesh-freemarker</servlet-name> <servlet-class>org.apache.struts2.sitemesh.FreemarkerDecoratorServlet</servlet-class> <init-param> <param-name>default_encoding</param-name> <param-value>UTF-8</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>sitemesh-freemarker</servlet-name> <url-pattern>*.ftl</url-pattern> </servlet-mapping> <listener> <listener-class>org.apache.struts2.dispatcher.ng.listener.StrutsListener</listener-class> </listener>
注意:
1. com.opensymphony.sitemesh.webapp.SiteMeshFilter这个过滤器是必需的,否则装饰不起作用
2. 为了支持FreeMaker或Velocity,必须添加org.apache.struts2.sitemesh.FreemarkerDecoratorServlet这个Servlet,官方原话:
3. 而已从2.2.x开始,必须添加org.apache.struts2.dispatcher.ng.listener.StrutsListener这个监听器
4.在webroot目錄下面建decorators文件夾,裡面放裝飾的模型main.jsp(decorators是装饰文件默认路径)
<%@ page contentType="text/html;charset=UTF-8"%>
<%@taglib prefix="decorator"
uri="http://www.opensymphony.com/sitemesh/decorator"%>> //导入sitemesh标签库
<%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page"%<html>
<head>
<title><decorator:title /></title>
<decorator:head />
</head>
<body>
<p>
Add head decorator...
</p>
<decorator:body />
<p>
Add foot decorator...
</p>
</body>
</html>
5.配置decorators-file文件.該文件名称和路径为sitemesh-default.xml中 <property name="decorators-file" value="/WEB-INF/decorators.xml"/>配置的名称.所以该文件必须放在WEB-INF目录下.名称为decorators.xml.
decorators.xml配置如下:
<?xml version="1.0" encoding="utf-8"?>
<decorators defaultdir="/decorators"> //其中/decorators是装饰文件默认路径.也可以配置为其他路径
<!--excludes結點則指定了哪些路徑的請求不使用任何模板-->
<excludes>
<pattern>/index.jsp*</pattern>
<pattern>/login/*</pattern>
</excludes>
<!--decorator結點指定了模板的位置和文件名,通過pattern來指定哪些路徑引用哪個模板-->
<decorator name="main" page="mode.jsp">
<pattern>/*</pattern>
</decorator>
</decorators>
发表评论
-
Struts2 AJAX请求 Session失效处理
2014-01-17 17:01 797在Struts应用中,我们发出的请求都会经过 相应的拦截器进行 ... -
Struts2的ognl学习(转)
2011-05-17 16:53 840学习Struts2的时候,觉得OGNL表达式语言很抽象,看 ... -
struts2采用convention-plugin实现零配置(转)
2011-04-25 10:31 1116零配置并不是没有配置,而是通过约定大于配置的方式,大量通过约定 ... -
有关Struts2的标签不支持<%%>和$(EL表达式的符号)的问题
2011-04-22 18:03 0在struts2的2.0.11及以上版本的changelog里 ... -
struts2 中 OGNL表达式的使用(转)
2011-04-22 15:01 874OGNL是Object Graph Navigation ... -
Struts2 与JSON,JQUERY整合使用(转)
2011-04-12 11:14 1435请参见: Struts2.2+Spring3.1+Hibern ... -
Struts2.0中ActionInvocation使用
2011-04-08 16:18 2459Interceptor说明 Interceptor的接口定 ... -
struts2表送式符号(#、%、$)(转)
2011-04-08 11:52 1668#:从actioncontext中取值,前面加上# ... -
Struts2中OGNL,valueStack,stackContext的学习(转)
2011-04-08 10:38 1621Java代码 <s:form ac ... -
Struts2.0配置文件语法用法
2011-04-07 17:35 11101.struts2.0配置文件中可以使用El表达式(${})如 ... -
Struts2.0请求过程图解(转)
2011-04-07 17:21 1421Struts2架构图 当 ... -
Struts2.0实现文件上传
2011-04-07 17:12 11151.struts2.0上传三个关键字段 上传文件名、上传文件类 ... -
freeMarker语法
2010-12-20 09:37 1018EG.一个对象BOOK 1.输出 ...
相关推荐
将Struts2.0与Sitemesh整合,可以让Struts2处理业务逻辑,而Sitemesh负责页面的装饰和布局。这样,开发者可以专注于业务代码编写,而无需关心页面的样式细节。通常,整合步骤包括: 1. **添加依赖**:在项目中引入...
这将告诉Struts2如何与Sitemesh协作。 ```xml <constant name="struts.plugins" value="com.opensymphony.sitemesh.webapp.decorator.struts2.Struts2DecoratorPlugin"/> <constant name="struts.action....
将Struts2与SiteMesh整合,可以实现更加统一和规范化的网站外观,并减少重复代码。 整合Struts2和SiteMesh主要涉及以下几个步骤: 1. **添加依赖**:首先,在项目中引入SiteMesh的jar包。如果使用的是Maven,可以...
通过整合Struts2与SiteMesh,开发者可以在保持Struts2框架的灵活性的同时,利用SiteMesh实现一致且美观的页面布局设计。 #### 配置基础 要使Struts2与SiteMesh协同工作,首先需要确保项目中包含了以下三个库文件:...
`struts2-sitemesh-plugin-2.2.1.1.jar`是Struts2框架与Sitemesh集成的插件,使得Struts2应用能够利用Sitemesh的功能来美化和规范化页面布局。 **Struts2框架** Struts2的核心功能包括动作映射、结果处理、数据绑定...
struts2-sitemesh-plugin-2.0.8.jar
struts2-sitemesh-plugin-2.1.6.jar
**Struts2与Sitemesh集成** 将Struts2和Sitemesh集成,可以充分利用两者的优点,创建既有良好结构又美观的Web应用。集成过程主要包括以下步骤: 1. 添加Sitemesh的依赖到项目中,通常在Maven的pom.xml文件中添加...
- `struts2-sitemesh-plugin`: 集成了Sitemesh,用于页面布局和装饰,可以统一网站的外观和风格。 5. **动作(Action)支持**: - `struts2-json-plugin`: 提供JSON支持,使Action可以直接返回JSON格式的数据,...
Struts2.0+Hibernate+Spring是一个经典的Java Web开发技术栈,这一体系结构被广泛应用于构建企业级的Web应用程序,尤其是那些需要高效数据管理、强大业务逻辑和灵活控制层的系统。在这个“Struts2.0+Hibernate+...
struts框架与sitemesh框架整合的插件,在java web开发中可以制作模板页,使自己做的网站看起来更专业
struts2-sitemesh-plugin-2.1.8.1.jar
解决 java.lang.NoSuchFieldException: DEFAULT_PARAM>问题,下载后替换即可。
这些文件可以作为学习和实践Freemarker与Sitemesh整合的起点,帮助开发者理解如何在实际项目中应用这两种技术。 通过这样的整合,开发者可以利用Freemarker的强大模板语言处理动态内容,同时借助Sitemesh保持页面的...
6. **集成性**:Struts2可以与Spring、SiteMesh和Tiles等其他框架无缝集成,提高开发效率。 7. **OGNL集成**:OGNL(Object-Graph Navigation Language)是Struts2中的默认表达式语言,提供了强大的数据访问和操作...
Struts2、Spring2.5 和 SiteMesh 是Java Web开发中的三个重要框架,它们共同构建了一个强大且灵活的Web应用程序架构。在这个小DEMO中,我们将深入探讨这三个框架的集成和工作原理。 **Struts2** 是一个基于MVC...
虽然 Apache Tiles 在 Web 开发领域也有广泛的应用,特别是在与 Struts 框架结合时,但相较于 SiteMesh,它存在一些局限性: 1. **配置繁琐**:在 Tiles 中,每个页面都需要在配置文件中明确指定,这不仅增加了开发...
Sitemesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大 量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的banner,一致的版权,等等。 它不仅仅能处理动态的...