`
xinklabi
  • 浏览: 1591893 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

Appfuse中web.xml配置内容(补充)

阅读更多

Spring中,BeanFactory

提供了一种先进的配置机制来管理任何种类bean(对象), ApplicationContextBeanFactory的完全超集, 我们大部分时间面对的是ApplicationContext,通过它取得bean,处理bean,而其他的事务管理、远程访问等则交由Spring容器去管理好了。

 

 

 

很多情况下,用户代码不需要实例化BeanFactory, 因为Spring框架代码会做这件事。例如,web层提供支持代码,在J2EE web应用启动过程中自动载入一个Spring ApplicationContext

 

 

 

ApplicationContext

可以通过编码加载并实例化,对于web应用,Spring提供了可配置的ApplicationContext加载机制。加载器目前有两种选择:ContextLoaderListenerContextLoaderServlet,这两者在功能上完全相同,只是一个基于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监听器执行父类ServletContextListenercontextInitialized事件,在该初始化事件中,会调用SpringcontextInitialized事件初始化SpringApplicationContext

 

 

 

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等依赖特定事务资源的事务处理(即:自己硬编码rollbackcommit),又提供了依赖容器的参数化事务支持(即:又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.xmlSessionFactory进行设定。

 

 

 

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)       配置dataSourcesessionFactorytransactionManager服务器于名为

 

 

 

txProxyTemplateTransactionProxyFactoryBean, txProxyTemplate

 

 

 

transactionAttributes属性中,定义事务策略。将所有以saveremove开始的

 

 

 

方法纳入事务管理范围,如果这些方法抛出异常,在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容器加载SpringApplicationContext配置如下:

 

 

 

Ø

通过监听器

 

 

 

<listener>

 

 

 

<listener-class>

 

 

 

 

org.springframework.web.context.ContextLoaderListener

 

 

 

</listener-class>

 

 

 

  </listener>

 

 

 

Ø

通过Servlet

 

 

 

    <servlet>

 

 

 

                <servlet-name>context</servlet-name>

 

 

 

                <servlet-class>

 

 

 

 

 org.springfr

分享到:
评论

相关推荐

    appfuse.tar.gz

    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常用命令.doc

    AppFuse 是一个开源项目,它提供了一种快速构建基于Java Web应用的方式。它结合了多种框架和技术,如Spring、Hibernate、Struts等,简化了开发流程。文档中提到的是AppFuse中与Maven相关的常用命令,特别是针对...

    APPFUSE工具研究.doc

    AppFuse 是一个基于Java平台的开源项目,旨在加速和简化Web应用程序的开发。它通过集成各种流行框架,如Struts、Spring、Hibernate等,提供了一个项目骨架,使得开发者能够快速搭建新项目的结构。AppFuse分为1.x和...

    AppFuse资料整理.chm

    AppFuse资料整理.chm AppFuse 整理 chm java 辛苦 个人学习收集网上资料辛苦整理而成

    Appfuse开发教程.rar

    Appfuse是一款开源的Java Web应用框架,它旨在简化开发过程,提供一个快速开发基础Web应用程序的平台。Appfuse使用了Maven作为构建工具,结合Spring、Hibernate、Struts2等流行框架,为开发者提供了一个标准的架构...

    Appfuse教程Appfuse开发.pdf

    package org.appfuse.model; /** @hibernate.class table="PERSON" */ public class Person extends BaseObject { private Long id; private String firstName; private String lastName; // Getter and ...

    appfuse-spring.pdf

    密码:ilovejava.taobao.com

    Appfuse 2.doc

    ### Appfuse 2.0 入门指南及源码下载详解 #### 一、概述 本文档旨在为初学者...mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-jsf -DremoteRepositories=...

    appfuse开放web service指南

    appfuse开放web service指南 appfuse开放web service指南

    AppFuse1.x快速构建J2ee应用

    在 AppFuse 1.x 版本中,开发者可以快速地搭建起一个基本的 MVC(Model-View-Controller)架构的 Web 应用,同时支持多种框架,如 Struts、Spring MVC 和 Tapestry。 ### 1. AppFuse 概览 AppFuse 提供了一个基础...

    appfuse 配置说明 doc 格式

    AppFuse是一个开源的Java Web应用程序框架,它集成了多种流行的开源技术如Spring、Hibernate、Struts等,旨在简化Web应用的开发流程,提高开发效率。AppFuse通过提供一套预配置的模板和工具,帮助开发者快速构建出...

    AppFuse项目研究

    1. 初始化配置信息:从 `web.xml` 中读取配置参数,例如 `DAO.TYPE`,并将其存储到全局的应用环境上下文(`ServletContext`)中。这样做的好处是,这些配置信息可以在整个应用程序中被任何需要的地方访问。 2. 配置...

    appfuse

    通过查阅AppFuse 2.0的官方文档或者从已知的依赖列表中,你可以找到必要的库,如Spring、Hibernate等,并将它们的依赖条目添加到`pom.xml`中。每个依赖项通常包含groupId、artifactId和version,例如: ```xml ...

    建立项目原型骨架的步骤(最新版本appfuse)appfuse2.1.0-M2

    `mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-struts-archetype -DarchetypeVersion=2.1.0-M2 -DgroupId=cn.xue.app -DartifactId=xueAppFuse` ...

    appfuse-tutorial-struts-1.6.zip_appfuse

    你需要学习如何编写Action类,以及如何在struts-config.xml中配置它们。 4. **Form Beans**:Form Beans用于在Action和视图之间传递数据。它们可以封装用户输入,并在请求处理过程中作为参数传递。在Struts应用中,...

    appfuse2学习日记

    - **配置示例**:在 `Maven_Home/conf/settings.xml` 文件中进行配置。 ```xml &lt;!--localRepository The path to the local repository maven will use to store artifacts. Default: ~/.m2/repository ...

    APPFUSE2.0中加入FCKeditor

    2. **配置Web应用**:接着,需要在Web应用的配置文件(如web.xml)中,为FCKeditor添加URL映射,确保可以通过特定的URL访问编辑器。 3. **引入JavaScript和CSS**:在需要使用FCKeditor的JSP页面中,通过`&lt;script&gt;`...

Global site tag (gtag.js) - Google Analytics