`
hb_keepmoving
  • 浏览: 230567 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

学习SSH全注解实例 过程(二)

阅读更多

    原文链接:http://www.java3z.com/cwbwebhome/article/article8/81136.html

 

在上一章中详细分析了JAR 包的选择,那么这次我将对例子中 的一些必须 的配置文件进行下说明。虽然这些配置在网上也很容易找到,但是很多都没有讲个因为所以出来,这样根本就得不到提高。在此,大象为各位详细分析一下这些内 容。

    实例中涉及的配置文件有这么几个
     applicationContext.xml
     jdbc.properties
     log4j.properties
     struts.xml
    web.xml  

    我准备在本章中只讲applicationContext.xml jdbc.properties web.xmllog4j 的 配置大同小异而且也不在本文范围。至于struts.xml 我 准备留到后面与Action 代码一起来讲,因为用的是struts2-convention-plugin 插 件来实现struts2 的注解,所以这两个结合起来讲要好一些。

 

 

第二部分:分析配置文件

    1 jdbc.properties
    本例采用MySQL 数据库,所以我设置了一个属性文件,用 来存放一些连接信息和Hibernate 相关的设置。


    因为我们使用的是Hibernate 来 与数据库进行交互,把这些东西写在单独的文件里,是方便修改,如果你想换成SQL Server 或是Oracle ,只需要更改driverurl 以及 dialect ,而且还可以自由控制 sql 语句的显示的开关,非常方便。至于写在这里怎么用呢?请接着看下 面的 applicationContext.xml 说明。
    2applicationContext.xml
    这个文件就是spring 的主配置文件了,当然,本 例也只有这么一个spring 的配置文件,内容不多,但做的工作还是很多的,下面我给大家详细分析一下。



    我把这两部分放在一起是因为这两者是相互联系的,而且也比较好说明。可以这样来理解,PropertyPlaceholderConfigurer 这 个类就是读取jdbc. properties 文件,并将它们设置到这个类的属性中。然后再将下面数 据源配置中定义的这些$ {jdbc.driver}$ {jdbc.url} 字符串换成属性文件中相 同名称的值。$ {} 这种写法,是类里面方法解析用的,网上都说这是叫占位符,我看了源代码的,其实是把它们当成字符串截取 前后的特殊字符,再根据里面定义的名称找属性文件中对应的值。所以这个类只能读取properties 格式的文件,你如果还有其它 需要加入的属性文件,可以在list 之间加入,写在value 标签里面。      

    根据base-package 指定的路径,扫描其下所有包含注解的Bean , 并自动注入。比如@Repository@Service 这些都是注解,前者表示持久层, 后者表示业务层。这可是非常非常好的一个功能,是从Spring2.5 开始加入的一个非常棒的特性。有了它,我们将不用再去写那 繁琐的<bean id="" class="" /> 。本文的主旨就是全注解,就是为了告诉大家不用写配置文件(当然不是绝对不写)来怎样进行开发工作。关于这部 分的具体情况,在后面代码章节中会详细讲解。



    这就是在Spring 中定义Hibernate 相 关的配置,Spring 已经集成了这部分功能。通过class 里面定义的类名称我们很容易就能理解, 这是使用注解的方式映射实体以及创建Hiberante SessionFactory$ {hibernate.dialect}$ {hibernate.show_sql} 和 上面的数据源配置获取方式一样,当applicationContext.xml 定义好之后,就不用再对它进行修改,而是将修改对 象变成了jdbc.properties 文件。
    另外在Spring 2.5.6 版中,加入了一个很有用的小功能,就是packagesToScan 属性,它是根据value 中 定义的路径来扫描其下所有的注解实体类。大象对这个路径做了多种测试,另外又看了源代码,发现它只能匹配某一类型的路径, 而不是所有路径。比如上面的 value 值表示,扫描entity 包下面的所有包中的注解类,如果你将 类直接放在entity 包下,那么服务器启动和程序运行时都不会报错,但是当你的代码需要用到这个类的时候,就会出现异 常,提示你找不到实体。
     


    这是事务定义,而且是使用注解方式定义事务 @Transactional ), proxy-target-class = "true" 表示采用动态代理类来管理事务,如果是false 表示采用接口代理来管理事务(默认值为false )。 什么意思呢?就是说对于需要加入事务处理的类,如果是实现接口,那么将采用Spring 的默认事务管理(Spring 默 认方式为接口),如果不采用接口,而直接使用类,那么就需要cglib 类库的支持,它通过动态的创建目标类(就是你需要加入事务的类)的 子类,然后对这子类中的方法(当然是从目标类中继承来的)进行事务管理。这其实就是AOP 切面,而且从中可以看出来,需要加入事务的 方法不能为privatestaticfinal 的方法。这样说也不是很严格,说它不 能加入事务,是说它不能主动的启动一个事务,如果某个private 方法是被某个public 方法调用的,而public 方 法是可以被动态代理加入事务的,所以这个private 方法也一样被加入了事务,只是它处在public 方 法的事务之中。但是staticfinal 这两类方法因为不能被子类覆盖,所以无法加入事务。如果这两类型的 方法不被其它的事务方法所调用,那么它们就会以无事务的方式运行,因此很容易造成隐患,这一点请大家特别注意。



    上 面这个就是使用配置式来定义事务,两种方式的区别主要是,注解式只用写那么一句话,然后在业务类或方法中加入 @Transactional 这个注解标记,就完成事务声明,不过对于 每个业务类都需要在类或方法中加入这些标记。而配置式声明,就是不用加这些标记,只要你的方法名称命名比较统一,就可以像上面这样定义事务规范,然后在aop 标 签中定义切入点与执行通知就行了。我感觉如果业务逻辑不是太复杂的情况,配置式会比较简单,而且修改起来也方便,这两种方 式我都写出来了,至于用哪一种,由你们自己决定。
    3web.xml
    现在使用的Servlet 容器还是2.4 版, 因此web.xml 里 面还是需要写配置文件的,到了3.0 版就可以采取注解的方式来实现了。

    Spring ApplicationContext 配置文件的路径, 可使用通配符 applicationContext*.xml 表示所有以 applicationContext 开头的 xml 文件。 多个路径用, 号 分隔。比如可以这样写:

    不过推荐采用通配符的写法,能够简单点,为什么还要弄那么复杂呢?
    context-param 是在容器启动后最先被执行的,并且被放入到容器上下文中。在这里引入 spring 的配置文件,是供 Spring ContextLoaderListener 监听器使用。而这个监听器中会有一个 ContextLoade 类用来获取这个配置文件中的信息。从而进行 Spring 容器的初始化工作。 因为是采用注解的方式来进行开发,所以 spring 的配置文件其实只有一个,上面那个星号可以去掉。

    这个监听器就是为了读取Spring 的 配置文件,这在上面已经讲到了。



    这是Spring 提供的一个用来防止内存泄漏的监听 器。在我们使用struts2 框架,或其它的某些类库时,因为它们自身的设计,会用到Introspector (内省)机制来获取 Bean 对象的信息。但不幸的 是,这些框架或类库在 分析完一个类之后却没有将它从内存中清除掉,内存中还保留有大量的静态资源,而这些东西又无法进行 垃圾回收,因此产生了很严重的内存泄漏问题。直接表现为服务器的内存使用会随着时间而不断上升,最后的结果当然就是服务器当掉。所以在这里加入此监听器, 能够帮助我们更好的处理内存资源回收的问题。


    这是Spring 的编码过滤器,我们可以直接拿来用,相信这段配置应该很好理 解,不过请大家注意forceEncoding 这个参数,把它设置为true 表示不管请求中的编码是什么格式,都将强 制采用encoding 中设置的编码方式。另外对于响应也将按照encoding 指定的编码进行设置。 另外不建议将编码设置成gb2312 或是gbk 格式,请采用基于UnicodeUTF-8 编码。



    这个过滤器是个好东西,有了它,我们在使用Hibernate 延 迟加载的时候,就不会再为因Session 被关闭,导致延迟加载数据异常而头痛了。网上有很多人说这个不好,其实在使用中,效果还是不错 的。


    首先我要说这个过滤器的名字很雷,不知道写这类的家伙是不是个变态,或 者喜欢恶搞。主要原因就是,这个过滤器的功能是推迟清理值栈中的值,以便在web 层中进行访问,另外就是为了配合SiteMesh 装 饰器进行工作(官方中的说明)。如果不加这个,那么Struts2 的默认过滤器就会清空值栈中的值,这样就会导致异常。所以说这 类的名字和功能完全不搭边,很容易让人产生误解。



    2.1.6 版本里面,已经用这个过滤器取代了以前的FilterDispatcher ,而且在api 文 档中已经标注为 @deprecated (过时) ,并说明是从Struts 2.1.3 版开始就弃用这个过滤器了,改用StrutsPrepareAndExecuteFilter ,除此之外,还 可以选择StrutsPrepareFilterStrutsExecuteFilter 。不过大 象建议大家还是选择StrutsPrepareAndExecuteFilter 吧,这也是官方推荐的。至于这个过滤器的真正用 途,我想在后面具体讲代码的时候再来详细分析它。
    web.xml 里面的几个重要的配置就这些,不过不要忘了,给这些filter 加 上filter-mapping 映 射。还有一点,请注意这些过滤器的顺序,这个顺序是很重要的,程序运行时,是根据这些filter-mapping 的排列顺序依次执行 过滤操作的。如果不想出现莫名其妙的错误,请控制好这些过滤器映射的顺序。

    原文链接:http://www.java3z.com/cwbwebhome/article/article8/81136.html

分享到:
评论
1 楼 i_feng 2012-11-05  
讲的很详细啊,学习啦

相关推荐

    SSH全注解实例详解,hibernate,struts,spring

    在实际开发中,SSH框架的使用往往结合IDE(如Eclipse或IntelliJ IDEA)进行,这些工具通常有对SSH支持的插件,能帮助开发者快速生成和管理注解配置。同时,持续集成工具(如Jenkins)和版本控制系统(如Git)也是...

    SSH注解小实例

    SSH注解实例通常会包含以下步骤: 1. **创建实体类**:在实体类上使用Hibernate注解,如`@Entity`,`@Table`,`@Id`等,定义数据库表和字段映射。 2. **配置Hibernate**:在Spring配置文件中,使用`SessionFactory...

    ssh2实例+ssh2注解实例

    总的来说,SSH2实例和SSH2注解实例是学习SSH2框架和Java Web开发的重要资源。通过对这两个实例的学习和实践,你可以熟练掌握SSH2的使用,提升自己的技能,为未来在复杂的企业环境中开发安全、高效的应用奠定坚实的...

    SSH注解方式整合小例子

    在这个“SSH注解方式整合小例子”中,我们将深入探讨如何使用注解来简化SSH框架的配置过程,使得开发更加便捷。 **Struts2** 是一个基于MVC设计模式的Action驱动的Web应用框架,它通过注解可以实现Action类的声明式...

    ssh注解完整实例源代码

    ssh注解完整实例源代码 可直接运行 初级使用

    ssh注解开发案例

    SSH注解开发是SSH框架中的一项重要技术,它允许开发者在不写XML配置的情况下进行开发,提高开发效率并减少配置错误。 标题“ssh注解开发案例”表明我们将探讨如何在SSH框架中使用注解进行开发。SSH框架通过注解可以...

    SSH2整合全注解实例

    SSH2整合全注解实例是基于Struts2、Spring和Hibernate这三个开源框架的集成应用,它们共同构建了一个强大的Web应用程序开发平台。SSH2是Java Web开发中的经典组合,提供了模型-视图-控制器(MVC)的设计模式,使得...

    SSH全注解登录

    "SSH全注解登录"指的是使用SSH框架,并且利用注解(Annotation)的方式来实现登录功能。注解是一种元数据,它可以提供关于代码的额外信息,使得框架能自动配置和管理对象。例如,在Spring中,可以使用`@Autowired`...

    ssh2注解实例详解

    在这个SSH2的全注解实例中,开发者会逐步学习如何在MyEclipse环境下创建项目,配置框架,编写Action、Service、DAO和实体类,并通过注解进行相应的配置。同时,SQL语句的使用和数据库的交互也是实例的重要组成部分,...

    SSH2框架实例(全注解)

    总的来说,SSH2框架全注解实例的学习,可以帮助初学者快速掌握Java Web开发的核心技术,理解MVC架构、依赖注入和ORM的工作原理,以及如何在实际项目中应用这些技术。同时,通过CRM_T4实例,可以实践从数据库设计到...

    ssh注解整合实例包含jar包

    总的来说,SSH注解整合实例是一个实用的学习资源,它可以帮助开发者快速理解如何在实际项目中应用这些注解,提升开发效率,减少配置文件的工作量。在实际开发过程中,灵活运用SSH框架的注解,可以使代码更具有可读性...

    全注解版SSH增删改查实例

    总结来说,全注解版SSH增删改查实例是Java Web开发中一个实用的学习资源,它展示了如何在不依赖XML配置的情况下,利用Spring、Struts2和Hibernate的注解实现高效的业务逻辑处理。这样的实例有助于开发者快速理解和...

    SSH纯注解开发

    在SSH整合的项目中,Spring通常作为容器管理其他两个框架的实例。通过`@Autowired`,Spring可以自动将Struts2的Action与Service和DAO进行关联,而Hibernate的SessionFactory和Session则可以通过Spring的`@Scope`和`@...

    SSH环境 注解方式 包含jar 简单实例 直接运行

    本教程将通过注解方式,提供一个简单的SSH应用实例,可以直接运行。 首先,让我们详细了解SSH框架的核心组件: 1. **Struts2**:这是一个基于MVC设计模式的Java Web框架,它简化了创建用户交互层的工作。Struts2...

    学习SSH2经典实例的jar包3

    在"学习SSH2经典实例的jar包3"中,你可能会找到关于这三个框架集成使用的示例代码和库文件。这些实例可能涵盖了用户登录验证、数据展示、表单验证、动态加载数据等常见应用场景,通过实际操作加深对SSH2的理解。此外...

    关于SSH框架注解的小例子

    - 这个项目的名称可能是智慧YCweb,可能是一个Web应用,使用SSH框架实现,包含各种Controller、Service、DAO层的注解实例。 - 可能包含了Model类,用Hibernate注解描述数据库模型。 - 控制器类中,使用Struts2和...

    SSH注解-配置方式

    总结来说,SSH框架的注解配置大大简化了开发过程,通过注解可以快速定义Action的行为、自动装配bean以及实现ORM映射。这种方式使得代码更加简洁,提高了开发效率,同时也降低了出错的可能性。理解和熟练运用SSH框架...

    SSH框架注解方式,struts自身创建Action

    在本项目中,SSH框架通过注解方式进行配置,使得开发更加简洁高效。Struts2作为控制层,主要负责处理HTTP请求,并将请求转发给对应的Action进行业务处理。以下是对SSH框架注解方式和Struts2自身创建Action的详细解析...

    ssh2全注解方式整合demo

    这个全注解方式的整合Demo应该包含了上述所有配置和示例代码,便于开发者理解和学习如何在实际项目中使用SSH2框架进行注解方式的开发。通过这样的实践,开发者可以更加高效地编写代码,减少繁琐的XML配置,提高开发...

    ssh2 注解 事物

    2. **连接管理**:建立SSH2连接通常涉及创建一个SSH2客户端实例,设置必要的参数(如主机名、端口、用户名),然后发起连接请求。注解可用于简化这些步骤,如自动加载配置信息。 3. **通道与会话**:SSH2允许通过...

Global site tag (gtag.js) - Google Analytics