- 浏览: 1591905 次
- 性别:
- 来自: 吉林
文章分类
- 全部博客 (624)
- C/C++ (33)
- Java (181)
- 网络相关 (7)
- 我爱篮球 (3)
- 也爱足球 (4)
- 杂谈 (1)
- 系统架构 (3)
- Web Service (14)
- Framework (3)
- 系统命令 (8)
- 管理平台相关 (8)
- 其它 (35)
- Websphere (1)
- Struts2 (24)
- Hibernate (16)
- Spring (23)
- javascript (20)
- jquery (23)
- html/css/div (28)
- 数据库 (40)
- JavaWeb (27)
- 设计模式 (2)
- 文档编写 (3)
- SVN (5)
- Ant (1)
- Maven (13)
- 软件项目管理 (8)
- AOP (1)
- kindeditor (1)
- JSON (2)
- Servlt/JSP (4)
- WordXML (2)
- XML (12)
- 面试相关 (7)
- Tomcat (11)
- 性能与调优 (29)
- 职业发展 (2)
- 操作系统 (7)
- AJAX (2)
- DWR (1)
- Eclipse (12)
- 持续集成 (3)
- 批处理命令 (1)
- Mozilla Rhino (2)
- 新鲜技术 (18)
- Apache mina (2)
- 底层技术 (18)
- Linux (22)
- 新鲜技术,IT历史 (1)
- 敏捷开发 (1)
- 版本控制 (5)
- 较火技术 (7)
- 集群 (2)
- Web前端 (13)
- 报表工具 (3)
- 网站架构 (5)
- 大数据 (8)
- 分布式存储 (5)
- 云计算 (8)
- TCP/IP协议 (1)
- 负载均衡 (3)
- 硬件 (1)
- 表现层技术 (3)
- Velocity (3)
- jvm (6)
- 并发编程 (10)
- hadoop (8)
- 数据结构和算法 (12)
- 计算机原理 (1)
- 测试驱动开发-TDD (3)
- 开发技巧 (1)
- 分词器 (1)
- 项目构建工具 (2)
- JMX (4)
- RMI (1)
- 测试技术 (22)
- 网络完全 (1)
- Git (4)
- apache开源包 (4)
- Java常用 (1)
- mock (2)
- OSGi (2)
- MongoDB (1)
- JBPM (1)
- Storm (3)
- mysql (2)
- telnet (1)
- 正则表达式 (1)
- bootstrap (4)
- Apache ActiveMQ (1)
- redis (9)
- Nginx (2)
- rsync+inotify文件同步 (2)
- testng (1)
- 原型设计工具 (1)
- 工程能力 (1)
- 风险控制 (3)
- ibatis (1)
- 分布式 (4)
- 安全技术 (1)
- 计算机基础 (4)
- 消息中间件 (1)
- UML (2)
最新评论
-
u012236967:
java命令执行jar包(里面的main函数)的方式(包括依赖其它的jar包问题) -
世界尽头没有你:
Selenium自动化测试从入门到精通(Java版)百度网盘地 ...
自动化测试工具 Selenium WebDriver 入门教程(针对主流浏览器) -
小小西芹菜:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
dwr实现Reverse Ajax推送技术的三种方式 -
hellozhouqiao:
楼主,请教一点问题.现在我们需要在excel 的页脚里面加上图 ...
FreeMaker + xml 导出word(处理目录,图片和页眉页脚问题) -
乱在长安:
使用Timer会有各种各样的问题好嘛?!书上推荐使用Sched ...
DelayQueue (ScheduledThreadPoolExecutor调度的实现)
Spring中,BeanFactory
提供了一种先进的配置机制来管理任何种类bean(对象), ApplicationContext是BeanFactory的完全超集, 我们大部分时间面对的是ApplicationContext,通过它取得bean,处理bean,而其他的事务管理、远程访问等则交由Spring容器去管理好了。
很多情况下,用户代码不需要实例化BeanFactory, 因为Spring框架代码会做这件事。例如,web层提供支持代码,在J2EE web应用启动过程中自动载入一个Spring ApplicationContext。
ApplicationContext
可以通过编码加载并实例化,对于web应用,Spring提供了可配置的ApplicationContext加载机制。加载器目前有两种选择:ContextLoaderListener和ContextLoaderServlet,这两者在功能上完全相同,只是一个基于Servlet2.3版本中新引入的Listener接口实现,而另一个基于Servlet接口实现。[引用]
● AppFuse
中的Spring配置
(1) 指定ApplicationContext配置文件的位置,该参数不是必须的
如果不指定该参数,web容器会自动加载
WEB-INF/applicationContext.xml,
并实例化
ApplicationContext
Ø
WEB-INF/web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-*.xml</param-value>
</context-param>
(2) AppFuse中的ApplicationContext加载是通过ContextLoaderListener配置实现的,但是AppFuse不是直接在web.xml配置ContextLoaderListener监听器来实现ApplicationContext的初始化的,而是通过自定义的StartupListener监听器实现配置的。
(3) ApplicationContext的初始化
StartupListener 监听器继承了ContextLoaderListener监听器
和ServletContextListener监听器。
Ø Web
容器启动时,执行StartupListener监听器
Ø StartupListener监听器执行父类ServletContextListener的contextInitialized事件,在该初始化事件中,会调用Spring的contextInitialized事件初始化Spring的ApplicationContext。
public class StartupListener extends ContextLoaderListener
implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
// call Spring's context ContextLoaderListener to initialize
// all the context files specified in web.xml
super.contextInitialized(event);
(4) 初始化完ApplicationContext后,就可以通过以下方式
引用ApplicationContext来管理beans了:
ApplicationContext ctx =
WebApplicationContextUtils.getRequiredWebApplicationContext(context);
(5) Spring
事务管理配置
Spring
即提供了对于JDBC,Hibernate Trasaction等依赖特定事务资源的事务处理(即:自己硬编码rollback、commit),又提供了依赖容器的参数化事务支持(即:又Spring容器管理事务)。
使用Hibernate提供的openSessiojnInView技术,即在视图层开启和关闭
Session
,在service层进行Transaction管理,这个较为简单,只需要设置一
个filter即可,在web.xml中配置
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate.support.OpenSessionInViewFilter</filter-class>
</filter>
(6) 配置数据源,这里采用Jndi访问方式。
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/dudu</value>
</property>
</bean>
(7) 配置SessionFactory,Hibernate通过SessionFactory创建和维护session,一个session代表了以此数据的访问回话。通过Spring我们就无须通过Hibernage.cfg.xml对SessionFactory进行设定。
SessionFactoryj节点的mappingResources属性包含了映射文件的路径。
hibernateProperties节点容纳了所有的属性配置。[引用]。
<bean id="sessionFactory"
class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource"><ref bean="dataSource"/></property>
<property name="mappingResources">
<list>
<value>org/dudu/model/Role.hbm.xml</value>
<value>org/dudu/model/User.hbm.xml</value>
<value>org/dudu/model/UserCookie.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect
</prop>
<!--prop key="hibernate.show_sql">true</prop-->
<!--prop key="hibernate.hbm2ddl.auto">update</prop-->
</props>
</property>
</bean>
(8) 配置事务管理,引用sessionFactory。
<bean id="transactionManager"
class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
(9) 配置dataSource、sessionFactory、transactionManager服务器于名为
txProxyTemplate的TransactionProxyFactoryBean, txProxyTemplate
的
transactionAttributes属性中,定义事务策略。将所有以save、remove开始的
方法纳入事务管理范围,如果这些方法抛出异常,在Spring将当前事务回滚,如
果方法正常结束,则提交事务。而对其他所有的方法则以只读的事务处理机制进行,
(设为只读性事务,可以是持久层尝试对数据操作进行优化,如对于只读事务
hibernate将不执行flush操作,而某些数据库连接池和JDBC驱动也对只读性操作
进行了优化), TransactionProxyFactoryBean使得我们可以脱离每次数据库操作
必须首先获得Session实例、启动事务、提交、回滚事务以及繁琐的
try/catch/finally的烦杂工作从而获得代码精干集中的逻辑呈献效果。[引用]
org.springframework.transaction.interceptor.TransactionProxyFactoryBean
利用AOP,将TransactionManager和普通的Service编织起来。
<bean id="txProxyTemplate" abstract="true"
class="org.springframework.transaction.interceptor.
TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
(10) 实际的事务处理模板定义
AppFuse没有直接使用txProxyTemplate来管理事务,而是又具体的管理类继承该类,完成具体事务管理。
<!-- Generic manager that can be used to do basic CRUD operations on any objects -->
<bean id="manager" parent="txProxyTemplate">
<property name="target">
<bean class="org.dudu.service.impl.BaseManager">
<property name="DAO"><ref bean="dao"/></property>
</bean>
</property>
</bean>
<!-- Transaction declarations for business services. To apply a generic
transaction proxy to
all managers, you might look into using the BeanNameAutoProxyCreator -->
<bean id="userManager" parent="txProxyTemplate">
<property name="target">
<bean class="org.dudu.service.impl.UserManagerImpl">
<property name="userDAO"><ref bean="userDAO"/></property>
</bean>
</property>
<!-- Override default transaction attributes b/c of LoginCookie methods -->
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*LoginCookie">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
(11) 数据访问形式
public class UserDAOHibernate extends BaseDAOHibernate implements UserDAO {
public void saveUser(final User user) {
getHibernateTemplate().saveOrUpdate(user);
getHibernateTemplate().flush();
}
}
(12) 以下是一些AppFuse中实现的,辅助的Spring监听器和过滤器
保证Spring所管理的JavaBeans能被正常的初始化和销毁,这个监听器不是
Spring
框架必须的。
Ø
WEB-INF/web.xml
<listener>
<listener-class>
org.springframework.web.util.IntrospectorCleanupListener
</listener-class>
</listener>
(13) 解决Web应用中POST的中文乱码问题,为用户请求定义字符编码,这是因为当前的浏览器一般都不设置字符编码,即便是你在Html文件获Form中设置了字符编码
Ø
WEB-INF/web.xml
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilte
r
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
注:一般的web容器加载Spring的ApplicationContext配置如下:
Ø
通过监听器
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
Ø
通过Servlet
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>
org.springfr
发表评论
-
可以学习很多东西的博客(Appfuse以及其它管理平台相关的东西)
2011-04-29 15:40 1113http://www.blogjava.net/liuwent ... -
Appfuse中web.xml配置内容(转)
2011-04-29 15:17 2191出自:http://apps.hi.baidu.com/sha ... -
web.xml中的一些东西
2011-04-29 15:01 1385官网:http://www.opensymphon ... -
DWR的使用
2011-04-28 13:19 945DWR官网:http://directwebremoting. ... -
Spring Security 几篇好文章
2011-04-27 17:03 1058http://www.blogjava.net/redhatl ... -
Spring JTA应用JOTM:StandardXAPoolDataSource的使用
2011-04-27 15:03 3050本节将介绍JOTM在Spring中的配置。 JOTM(Jav ... -
Spring:PropertyPlaceholderConfigurer的使用
2011-04-27 12:50 5670PropertyPlaceholderConfigure ...
相关推荐
Get your questions answered on the mailing list at http://appfuse.org/forums. Eclipse 3.2+: ---------- From the command line, cd into the appfuse directory and run: mvn eclipse:eclipse -...
AppFuse 是一个开源项目,它提供了一种快速构建基于Java Web应用的方式。它结合了多种框架和技术,如Spring、Hibernate、Struts等,简化了开发流程。文档中提到的是AppFuse中与Maven相关的常用命令,特别是针对...
AppFuse 是一个基于Java平台的开源项目,旨在加速和简化Web应用程序的开发。它通过集成各种流行框架,如Struts、Spring、Hibernate等,提供了一个项目骨架,使得开发者能够快速搭建新项目的结构。AppFuse分为1.x和...
AppFuse资料整理.chm AppFuse 整理 chm java 辛苦 个人学习收集网上资料辛苦整理而成
Appfuse是一款开源的Java Web应用框架,它旨在简化开发过程,提供一个快速开发基础Web应用程序的平台。Appfuse使用了Maven作为构建工具,结合Spring、Hibernate、Struts2等流行框架,为开发者提供了一个标准的架构...
package org.appfuse.model; /** @hibernate.class table="PERSON" */ public class Person extends BaseObject { private Long id; private String firstName; private String lastName; // Getter and ...
密码:ilovejava.taobao.com
### Appfuse 2.0 入门指南及源码下载详解 #### 一、概述 本文档旨在为初学者...mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-jsf -DremoteRepositories=...
appfuse开放web service指南 appfuse开放web service指南
在 AppFuse 1.x 版本中,开发者可以快速地搭建起一个基本的 MVC(Model-View-Controller)架构的 Web 应用,同时支持多种框架,如 Struts、Spring MVC 和 Tapestry。 ### 1. AppFuse 概览 AppFuse 提供了一个基础...
AppFuse是一个开源的Java Web应用程序框架,它集成了多种流行的开源技术如Spring、Hibernate、Struts等,旨在简化Web应用的开发流程,提高开发效率。AppFuse通过提供一套预配置的模板和工具,帮助开发者快速构建出...
1. 初始化配置信息:从 `web.xml` 中读取配置参数,例如 `DAO.TYPE`,并将其存储到全局的应用环境上下文(`ServletContext`)中。这样做的好处是,这些配置信息可以在整个应用程序中被任何需要的地方访问。 2. 配置...
通过查阅AppFuse 2.0的官方文档或者从已知的依赖列表中,你可以找到必要的库,如Spring、Hibernate等,并将它们的依赖条目添加到`pom.xml`中。每个依赖项通常包含groupId、artifactId和version,例如: ```xml ...
`mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-struts-archetype -DarchetypeVersion=2.1.0-M2 -DgroupId=cn.xue.app -DartifactId=xueAppFuse` ...
你需要学习如何编写Action类,以及如何在struts-config.xml中配置它们。 4. **Form Beans**:Form Beans用于在Action和视图之间传递数据。它们可以封装用户输入,并在请求处理过程中作为参数传递。在Struts应用中,...
- **配置示例**:在 `Maven_Home/conf/settings.xml` 文件中进行配置。 ```xml <!--localRepository The path to the local repository maven will use to store artifacts. Default: ~/.m2/repository ...
2. **配置Web应用**:接着,需要在Web应用的配置文件(如web.xml)中,为FCKeditor添加URL映射,确保可以通过特定的URL访问编辑器。 3. **引入JavaScript和CSS**:在需要使用FCKeditor的JSP页面中,通过`<script>`...