摘要:jsp文件1.index.jsp Index Page 2.login.jsp Index Page 3.login_success.jsp Index Page 您还没有登录哦。。。 ${user.username},欢迎登录附图注意:运行本项目需要jstl标签库的支持,如果你使用的是java ee 5的话就不需要另外...
阅读全文
摘要:1.准备工作建好一个Web项目,加入必要的jar包(见本文末的附图),本文将演示一个用户登录的例子,使用的是struts2.1.6,java ee 52.代码User.java/** @(#)User.java 2009-7-29** Copyright (c) 2009 by jadmin. All Rights Reserved.*/package com.jsoft.domain;/*** ...
阅读全文
摘要:验证Email地址是否合法验证IP地址 IPV4_PATTERN = "(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])"; IPV6_PATTERN = "([0-9a-f]{1,4}:){7}([0-9a-f]){1,4}";待续。。。
阅读全文
摘要:1.准备工作除了必要spring的支持外,还需要引入两个jar包,分别是activation.jar和mail.jar2.代码SimpleHtmlMailSender.java/** @(#)SimpleHtmlMailSender.java 2009-7-28** Copyright (c) 2009 by jadmin. All Rights Reserved.*/package com.js...
阅读全文
摘要:Spring在TransactionDefinition接口中7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:1.PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。2.PROPAGATION_SUPPORTS支持当前事务,如果当前没有事务,就以非事务方式执行。3.PROPAGAT...
阅读全文
摘要:在web应用开发中,为了使视图与数据逻辑分离,需要使用标签,jstl就是其中之一。一、用法配置JSTL的版本和servlet规范的版本不同时,配置方式是不同的,以下以servlet2.4和jstl1.1为例。核心标签c:1、web.xml中的配置如下(其实ide已经帮你配置好了)2、在jsp页面导入声明二、常用标签1、用于输出内容例子:2、用于设置作用域变量例子:3、用于清除作用域变量4、用于循环...
阅读全文
摘要:3声明式管理Hibernate分布式事务通过Spring,还可以很方便地切换至另一种事务管理策略。比如需要提供分布式事务管理策略时,只要替换一下配置即可,如代码10.29所示。代码10.29 appContext-jta.xml java:comp/env/jdbc/myds1 java:comp/...
阅读全文
摘要:2声明式管理Hibernate本地事务Spring提供了一种统一的IoC方式来管理Hibernate事务(本地或者分布式事务)。从Spring接手hibernate.cfg.xml(Hibernate的基本配置文件)起,Hibernate事务便轻易交由Spring拖管了。说明:在上一章介绍IBatis和DAO的时候,曾经针对事务和DAO的关系简单的进行了探讨。通常DAO的粒度应该都是比较细的,即它...
阅读全文
摘要:1在Spring上下文中配置SessionFactory通过上文的描述,可以知道,Spring使用JdbcTemplate时必须和特定的数据源进行绑定。而在Hibernate中,数据源是对用户屏蔽的,它使用一个称为“Session”的强劲武器。Session具有建立或取消对象的持久关联、同步对象状态和数据库以及事务管理等等复杂功能。Session是Hibernate的核心概念,就如同SqlMap与...
阅读全文
摘要:Spring提供了一个很实用的工具,可以让Web应用灵活配置log4j,这个工具类是:org.springframework.web.util.Log4jConfigListenerorg.springframework.web.util.Log4jConfigServlet由于:Note that this class has been deprecated for containers imp...
阅读全文
摘要:然后我们要改一下代理对象DynaProxyHello中的代码.如下:1packagesinosoft.dj.aop.proxyaop;23importjava.lang.reflect.InvocationHandler;4importjava.lang.reflect.Method;5importjava.lang.reflect.Proxy;67publicclassDynaProxyHell...
阅读全文
摘要:从上面的例子我们看出.只要你是采用面向接口编程,那么,你的任何对象的方法执行之前要加上记录日志的操作都是可以的.他(DynaPoxyHello)自动去代理执行被代理对象(Hello)中的每一个方法,一个java.lang.reflect.InvocationHandler接口就把我们的代理对象和被代理对象解藕了.但是,我们又发现还有一个问题,这个DynaPoxyHello对象只能跟我们去在方法前后...
阅读全文
摘要:但是我们会发现一个问题,如果我们像Hello这样的类很多,那么,我们是不是要去写很多个HelloProxy这样的类呢.没错,是的.其实也是一种很麻烦的事.在jdk1.3以后.jdk跟我们提供了一个API java.lang.reflect.InvocationHandler的类. 这个类可以让我们在JVM调用某个类的方法时动态的为些方法做些什么事.让我们把以上的代码改一下来看看效果.同样,我们...
阅读全文
摘要:好长时间没有用过Spring了. 突然拿起书.我都发现自己对AOP都不熟悉了.其实AOP的意思就是面向切面编程.OO注重的是我们解决问题的方法(封装成Method),而AOP注重的是许多解决解决问题的方法中的共同点,是对OO思想的一种补充!还是拿人家经常举的一个例子讲解一下吧:比如说,我们现在要开发的一个应用里面有很多的业务方法,但是,我们现在要对这个方法的执行做全面监控,或部分监控.也许我们就会...
阅读全文
摘要:选择爱好: 足球 篮球 音乐 上网 跳舞 全选
阅读全文
摘要:一、AOP 概念 Joinpoint:它定义在哪里加入你的逻辑功能,对于Spring AOP,Jointpoint指的就是Method。 Advice:特定的Jointpoint处运行的代码,对于Spring AOP 来讲,有Before advice、AfterreturningAdvice、ThrowAdvice、AroundAdvice(MethodInteceptor)等。 Pointcu...
阅读全文
摘要:需明确的几个概念:l 通知(Advice):用于告知系统将有哪些新的行为。l 切入点(Pointcut):定义了通知应该在应用到那些连接点。l 目标对象(Target):被通知的对象。l 代理(Proxy):将通知应用到目标对象后创建的对象。Spring有两种代理创建方式:1.如果目标对象实现了一个或多个接口暴露的方法,Spri...
阅读全文
摘要:Spring2.5是Spring2.1各个里程碑版本的终结。Spring2.5是对Spring2.0的增强,增加了一些新的特性:全面支持java6和javaEE5(JDBC 4.0, JTA 1.1, JavaMail 1.4, JAX-WS 2.0等)全特性的注释驱动依赖注入,包括对限定词的支持支持基于classpath的组件扫描,自动侦测有注释的类支持AspectJ切点表达式中包含bean n...
阅读全文
摘要:一、事务管理 事务传播1、required:方法在一个事务中执行,如果调用的方法在一个事务中,则使用该事务,否则将创建一个新的事务。(必须有,有就用,没有就建)2、mandatory:如果运行于事务中的客户调用了该方法,方法在客户的事务中执行。如果客户没有关联到事务中,容器就会抛出TransactionRequiredException.(必须有,有就用,没有报错)3、requiresnew:方法...
阅读全文
摘要:切面(Aspect): 一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。 在Spring AOP中,切面可以使用通用类(基于模式的风格) 或者在普通类中以 @Aspect 注解(@AspectJ风格)来实现。 连接点(Joinpoint): 在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。...
阅读全文
摘要:数据库查询性能的提升也是涉及到开发中的各个阶段,在开发中选用正确的查询方法无疑是最基础也最简单的。SQL语句的优化 使用正确的SQL语句可以在很大程度上提高系统的查询性能。获得同样数据而采用不同方式的SQL语句在性能上的差距可能是十分巨大的。 由于Hibernate是对JDBC的封装,SQL语句的产生都是动态由Hibernate自动完成的。Hibernate产...
阅读全文
摘要:Hibernate是对JDBC的轻量级封装,因此在很多情况下Hibernate的性能比直接使用JDBC存取数据库要低。然而,通过正确的方法和策略,在使用Hibernate的时候还是可以非常接近直接使用JDBC时的效率的,并且,在有些情况下还有可能高于使用JDBC时的执行效率。 在进行Hibernate性能优化时,需要从以下几个方面进行考虑:● 数据库设计调整。● ...
阅读全文
摘要:在前面介绍了Hibernate的缓存技术以及基本的用法,在这里就具体的Hibernate所提供的查询方法与Hibernate缓存之间的关系做一个简单的总结。 在开发中,通常是通过两种方式来执行对数据库的查询操作的。一种方式是通过ID来获得单独的Java对象,另一种方式是通过HQL语句来执行对数据库的查询操作。下面就分别结合这两种查询方式来说明一下缓存的作用。 ...
阅读全文
摘要:查询缓存 查询缓存是专门针对各种查询操作进行缓存。查询缓存会在整个SessionFactory的生命周期中起作用,存储的方式也是采用key-value的形式来进行存储的。 查询缓存中的key是根据查询的语句、查询的条件、查询的参数和查询的页数等信息组成的。而数据的存储则会使用两种方式,使用SELECT语句只查询实体对象的某些列或者某些实体对象列的组合时,会直接缓存整个结果集...
阅读全文
摘要:二级缓存 与Session相对的是,SessionFactory也提供了相应的缓存机制。SessionFactory缓存可以依据功能和目的的不同而划分为内置缓存和外置缓存。 SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句,映射元数据是映射文件中数据的副本,而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来的。SessionF...
阅读全文
摘要:大家都知道,Hibernate是以JDBC为基础实现的持久层组件,因而其性能肯定会低于直接使用JDBC来访问数据库。因此,为了提高Hibernate的性能,在Hibernate组件中提供了完善的缓存机制来提高数据库访问的性能。 什么是缓存 缓存是介于应用程序和物理数据之间的,其作用是为了降低应用程序对物理数据访问的频次从而提高应用系统的性能。缓存思想的提出主要...
阅读全文
摘要:并发控制 当数据库系统采用Read Committed隔离级别时,会导致不可重复读取和两次更新丢失的并发问题,可以在应用程序中采用锁机制来避免这类问题的产生。 从应用程序的角度上看,锁可以分为乐观锁和悲观锁两大类。悲观锁 在多个客户端可能读取同一笔数据或同时更新一笔数据的情况下,必须要有访问控制的手段,防止同一个数据被修改而造成混乱,最简单的手段就是对数据进行锁...
阅读全文
摘要:在现在的B/S体系结构的软件开发中,对于数据库事务处理中最常使用的方式是每个用户请求一个事务。也就是说,当服务器端接收到一个用户请求后,会开始一个新的事务,直到对用户请求的所有处理都进行完毕并且完成了响应用户请求的所有输出之后才会关闭这个事务。 对于使用Hibernate实现持久化功能的系统来说,事务的处理是这样的:服务器端在接收到用户的请求后,会创建一个新的Hibern...
阅读全文
摘要:为了避免上面出现的几种情况,在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同。● 未授权读取(Read Uncommitted):允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个数据则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。● 授权读取(Read Committed):允许不可重复读取,...
阅读全文
摘要:数据库的事务处理是在进行数据库应用开发中必须进行处理的一个问题。那么对于选择Hibernate作为持久层组件,了解Hibernate的事务处理机制就显得尤为重要了。事务的基本概念 事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转账工作:从一个账号扣款并使另一个账号增...
阅读全文
摘要:6.5.4 使用HibernateCallBackHibernateTemplate还提供了一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。HibernateTemplate的灵活访问方式可通过如下两个方法完成: ● Object execute(HibernateCallback action)。 ● List execute(HibernateCa...
阅读全文
摘要:6.5 Spring整合Hibernate时至今日,可能极少有J2EE应用会直接以JDBC方式进行持久层访问。毕竟,用面向对象的程序设计语言来访问关系型数据库,是一件让人沮丧的事情。大部分时候,J2EE应用都会以ORM框架来进行持久层访问,在所有的ORM框架中,Hibernate以其灵巧、轻便的封装赢得了众多开发者的青睐。Spring具有良好的开放性,能与大部分ORM框架良好整合。下面将详细介绍S...
阅读全文
摘要:Struts的plug-in配置部分明确指出,Spring的配置文件有两个:applicationContext.xml和action-servlet.xml。其实,完全可以使用一个配置文件。通常,习惯将Action Bean配置在控制器的context内。action-servlet.xml用于配置表现层上下文,其详细配置信息如下: 因为每次请求都应该启动新...
阅读全文
摘要:6.4 Spring整合Struts虽然Spring也提供了自己的MVC组件,但一来Spring的MVC组件过于繁琐,二 来Struts的拥护者实在太多。因此,很多项目都会选择使用Spring整合Struts框架。而且Spring确实可以无缝整合Struts框架,二者结合成一个更实际的J2EE开发平台。6.4.1 利用Struts的PlugIn来启动Spring容器使用Spring的Web...
阅读全文
摘要:6.3.2 Spring事务策略的优势虽然在上面的配置片段中,仅仅配置了JDBC局部事务管理器、Hibernate局部事务管理器、JDBC全局事务管理器等。但Spring支持大部分持久化策略的事务管理器。不论采用何种持久化策略,Spring都提供了一致的事务抽象,因此,应用开发者能在任何环境下,使用一致的编程模型。无须更改代码,应用就可在不同的事务管理策略中切换。Spring同时支持声明式事务管理...
阅读全文
摘要:6.3 Spring的事务Spring的事务管理不需与任何特定的事务API耦合。对不同的持久层访问技术,编程式事务提供一致的事务编程风格,通过模板化的操作一致性地管理事务。声明式事务基于Spring AOP实现,却并不需要程序开发者成为AOP专家,亦可轻易使用Spring的声明式事务管理。6.3.1 Spring支持的事务策略Spring事务策略是通过PlatformTransactionMana...
阅读全文
摘要:6.2.4 代理接口当目标Bean的实现类实现了接口后,Spring AOP可以为其创建JDK动态代理,而无须使用CGLIB创建的代理,这种代理称为代理接口。创建AOP代理必须指定两个属性:目标Bean和处理。实际上,很多AOP框架都以拦截器作为处理。因为Spring AOP与IoC容器的良好整合,因此配置代理Bean时,完全可以利用依赖注入来管理目标Bean和拦截器Bean。下面的示例演示了基于...
阅读全文
摘要:6.2 Spring的AOPAOP(Aspect Orient Programming),也就是面向切面编程,作为面向对象编程的一种补充。问世的时间并不太长,甚至在国内的翻译还不太统一(有些书翻译成面向方面编程),但它确实极好地补充了面向对象编程的方式。面向对象编程将程序分解成各个层次的对象,而面向切面编程将程序运行过程分解成各个切面。可以这样理解,面向对象编程是从静态角度考虑程序结构,面向切面编...
阅读全文
摘要:6.1 两种后处理器Spring 框架提供了很好的扩展性,除了可以与各种第三方框架良好整合外,其IoC容器也允许开发者进行扩展。这种扩展并不是通过实现BeanFactory或ApplicationContext的子类,而是通过两个后处理器对IoC容器进行扩展。Spring提供了两种常用的后处理器: ● Bean后处理器,这种后处理器会对容器中特定的Bean进行定制,例如功能的 加强。...
阅读全文
摘要:4.9 Struts与Hibernate的整合策略前面介绍了Hibernate的一些相关知识点,距离Hibernate进入实际开发还有一段路要走。Hibernate作为持久层解决方案,必须与其他表现层技术组合在一起才可形成一个J2EE开发框架。经常看到网上一些朋友给出的Hibernate入门示例,居然在JSP页面中访问Hibernate Configuratioin对象。甚至看到某些所谓的精通J2...
阅读全文
摘要:4.8 事 件 机 制通常,Hibernate执行持久化过程中,应用程序无法参与其中。所有的数据持久化操作,对用户都是透明的,用户无法插入自己的动作。通过事件框架,Hibernate允许应用程序能响应特定的内部事件,从而允许实现某些通用的功能,或对Hibernate功能进行扩展。Hibernate的事件框架由两个部分组成: ● 拦截器机制,对于特定动作拦截,回调应用中的特定动作。 ● 事件...
阅读全文
摘要:4.7 事 务控 制每个业务逻辑方法都是由一系列的数据库访问完成,这一系列的数据访问可能会修改多条数据记录,这系列的修改应该是一个整体,绝不能仅修改其中的几条。也就是说,多个数据库原子访问应该绑定成一个整体——这就是事务。事务是一个最小的逻辑执行单元,整个事务不能分开执行,要么同时执行,要么同时放弃执行。4.7.1 事务的概念事务是一步或几步基本操作组成的逻辑执行单元,这些基本操作作为一个整体执行...
阅读全文
摘要:数据过滤并不是一种常规的数据查询方法,而是一种整体的筛选方法。数据过滤也可对数据进行筛选,因此,将其放在Hibernate的数据查询框架中介绍。如果一旦启用了数据过滤器,则不管数据查询,还是数据加载,该过滤器将自动作用于所有数据,只有满足过滤条件的记录才会被选出来。过滤器与定义在类和集合映射文件上的“where”属性非常相似。它们的区别是过滤器可以带参数,应用程序可以在运行时决定是否启用指定的过滤...
阅读全文
摘要:4.5 SQL查询Hibernate还支持使用SQL查询,使用SQL查询可以利用某些数据库的特性,或者用于将原有的JDBC应用迁移到Hibernate应用上。使用命名的SQL查询还可以将SQL语句放在配置文件中配置,从而提高程序的解耦,命名SQL查询还可以用于调用存储过程。如果是一个新的应用,通常不要使用SQL查询。SQL查询是通过SQLQuery接口来表示的,SQLQuery接口是Query接口...
阅读全文
摘要:4.4 条 件 查 询条件查询是更具面向对象特色的数据查询方式。条件查询可通过如下3个类完成: ● Criteria,代表一次查询。 ● Criterion,代表一个查询条件。 ● Restrictions,产生查询条件的工具类。执行条件查询的步骤如下:(1)获得Hibernate的Session对象。(2)以Session对象创建Criteria对象。(3)增加Criterion查询...
阅读全文
摘要:4.3 使用HQL查询Hibernate提供了异常强大的查询体系,使用Hibernate有多种查询方式。可以选择使用Hibernate的HQL查询,或者使用条件查询,甚至可以使用原生的SQL查询语句,此外还提供了一种数据过滤功能,这些都可用于筛选目标数据。下面分别介绍Hibernate的4种数据筛选方法:4.3.1 HQL查询HQL是Hibernate Query Language的缩写,HQL的...
阅读全文
摘要:Hibernate的批量处理Hibernate完全以面向对象的方式来操作数据库,当程序里以面向对象的方式操作持久化对象时,将被自动转换为对数据库的操作。例如调用Session的delete()方法来删除持久化对象,Hibernate将负责删除对应的数据记录;当执行持久化对象的set方法时,Hibernate将自动转换为对应的update方法,修改数据库的对应记录。问题是如果需要同时更新100 00...
阅读全文
摘要:作为昔日开发语言的王者,Java已经有14岁了,它创新变革的脚步一直没有停下来。现在Java已经不单单是一种计算机语言,Java更是一个平台,一个社区,以及一个生态系统。在2009年,Oracle收购了SUN,Java留下的,只是一个王者的背影。 JavaSE 目前JDK的正式版本是JDK 6 Update 12。JDK 6 Update 10以来的版本,关键功能包括: Java内核大大...
阅读全文
摘要:struts.action.extension The URL extension to use to determine if the request is meant for a Struts action 用URL扩展名来确定是否这个请求是被用作Struts action,其实也就是设置 action的后缀,例如login.do的'do'字。 str...
阅读全文
摘要:在*.hbm.xml必须声明的子元素是一个Java类的名字,用来为该持久化类的实例生成唯一的标识。这是一个非常简单的接口;某些应用程序可以选择提供他们自己特定的实现。当然,Hibernate提供了很多内置的实现。下面是Generator子元素的一些内置生成器的快捷名字:increment(递增)用于为long, short或者int类型生成唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用...
阅读全文
摘要:在Hibernate中有三种状态,对它的深入理解,才能更好的理解hibernate的运行机理,刚开始不太注意这些概念,后来发现它是重要的。对于理解hibernate,JVM和sql的关系有更好的理解。对于需要持久化的JAVA对象,在它的生命周期中有三种状态,而且互相转化。Hibernate三种状态之一:临时状态(Transient):用new创建的对象,它没有持久化,没有处于Session中,处于...
阅读全文
摘要:Hibernate访问多个数据库的设计思路:利用 Hibernate中config = new Configuration().configure(configFile);可以加载不同数据库配置信息的原理,编写一个数据库操作类,再编写一个数据库管理程序[map],将加载的数据库连接实例put早数据库管理程序中,具体实现见下面:Hibernate访问多个数据库步骤一:hibernate配置文件loc...
阅读全文
摘要:Hibernate延时加载,其实这个异常写的非常之清楚,就是会话关闭,无法对Hibernate实体进行操作。造成这样的情况有很多,什么书写错误啊,逻辑错误啊。但就此说一下关于lazy机制:Hibernate延时加载包括延迟初始化错误,这是运用Hibernate开发项目时最常见的错误。如果对一个类或者集合配置了延迟检索策略,那么必须当代理类实例或代理集合处于持久化状态(即处于Session范围内)时...
阅读全文