Spring2.5、Struts2.1、Hibernate3.2、sitemesh、freemarker整合开发常见问题及解决方案
基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发

基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发(1)写这个主题的文章在网络上应该暂时没有吧,也看过许多SSH整合开发的书,许多都是旧版本的框架整合,而且大部分都是以XML配置文件的方式,即使谈到Annotation也是针对其中一个框架而言的。
随着开源框架更新版本中不断引进对Annotation的支持,使得我们可以用单方面去管理我们的类与关系,而不用像以往那样,一旦遇到问题,就要不断在Java视图和XML视图中切换。
好,开始吧,既然网络中暂时没有这方面的文章,我就来开创个先例。
自己探索学习一下,也让大家来学习和提出批评和建议。
首选说一下我们的开发准备吧!开发环境:Tom cat 6.0,JDK1.6,MySQL5.0开发工具:Eclipse-jee(Eclipse的官网上下载)所要下载的框架包:struts-2.0.11.2-all.zip,spring-framework-2.5.5-with-dependencies.zip,hibernate-distribution-3.3.1.GA-dist.zip,这三个压缩包在其官方网站都可以下载。
当然,这个小项目所要用到不止这些,我们用到的时候再去下载。
好,我们来开始第一阶段的探索——Hibernate3.3的Annotation的实现。
新建我们的Dynamic Web Project,取名为"ssh_annotation”,配置Tom cat6.0的支持,打开MySQL,建立一个空数据库,取名为"ssh_annotation"。
记得,要引进MySQL 的JDBC驱动包mysql-connector-java-5.0.8-bin.jar。
在解压缩的hibernate-distribution-3.3.1.GA目录中,把hibernate.jar,和\lib\required\下的所用jar包引进到我们项目的lib目录下。
Java的strutsspringhibernate精通SSH三大框架的底层机制及原理

Java的struts、spring、hibernate精通SSH三大框架的底层机制及原理1. 什么是SSH框架SSH是由Struts、Spring、Hibernate三个框架整合而成的,它是一种企业级、全栈式框架,非常适合开发大型Web应用程序。
Struts是MVC架构模式中的控制器层,负责接收请求并转化成对应的业务逻辑进行处理,同时也控制着视图层进行渲染。
Spring是一个轻量级的开源框架,它可以被用来构建Java企业级应用,能够提供全周期的、全栈式的框架服务。
Hibernate是一个ORM(对象关系映射)框架,之前在持久化层需要进行数据库的操作,但是Hibernate可以让开发者不用直接操作数据库,而是通过Java对象与数据库进行交互。
2. SSH框架的优势SSH框架的三个组件各自拥有一系列的优势。
Struts提供了用于Web开发的MVC架构,使得应用程序的开发和维护更加清晰、明了。
Spring专注于解决企业开发中的复杂问题,比如事务管理、安全管理、远程调用、Web框架等。
Hibernate则是优秀的ORM框架,可以将Java对象与关系型数据库进行映射,让开发者不用关心具体的SQL语句。
3. SSH框架的实现机制SSH框架的三个组件相互整合,形成了一个高效、稳定、易于使用的开发框架。
在SSH框架中,Web请求首先被Struts2框架接收,Struts2框架通过ActionContext来向Action中注入Spring容器管理的Bean完成业务逻辑处理,而Bean之间的关系都是由Spring的IOC容器维护的。
声明式事务管理交给Spring框架完成,Hibernate框架在ORM层将Java对象映射到数据库记录。
下面分别来详细介绍一下SSH框架各自的底层机制及原理。
3.1 Struts2框架Struts2框架是一个基于MVC模式的Web应用程序框架。
在Struts2中,负责接收请求转发的控制器为Action。
Struts、Spring、Hibernate三大框架的原理和优点

Struts的原理和优点.Struts工作原理MVC即Model—View—Controller的缩写,是一种常用的设计模式。
MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。
MVC的工作原理,如下图1所示:Struts 是MVC的一种实现,它将Servlet和JSP 标记(属于J2EE 规范)用作实现的一部分。
Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展.Struts的工作原理,视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。
控制:在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。
ActionServlet是一个通用的控制组件。
这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。
它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。
另外控制组件也负责用相应的请求参数填充Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。
动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。
最后动作类把控制权传给后续的JSP 文件,后者生成视图。
所有这些控制逻辑利用Struts-config.xml文件来配置。
模型:模型以一个或多个java bean的形式存在。
这些bean分为三类:Action Form、Action、JavaBean or EJB.Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。
Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。
Spring MVC 简明教程

Spring框架从创建伊始就致力于为复杂问题提供强大的、非侵入性的解决方案。
Spring 2.0当中为缩减XML配置文件数量引入定制命名空间功能,从此它便深深植根于核心Spring框架(aop、context、jee、jms、 lang、tx和util命名空间)、Spring Portfolio项目(例如Spring Security)和非Spring项目中(例如CXF)。
Spring 2.5推出了一整套注解,作为基于XML的配置的替换方案。
注解可用于Spring管理对象的自动发现、依赖注入、生命周期方法、Web层配置和单元/集成测试。
探索Spring 2.5中引入的注解技术系列文章由三部分组成,本文是其中的第二篇,它主要讲述了Web层中的注解支持。
最后一篇文章将着重介绍可用于集成和测试的其它特性。
这个系列文章的第一部分论述了Java注解(annotation)是如何代替XML来配置Spring管理对象和依赖注入的。
我们再用一个例子回顾一下:@Controllerpublic class ClinicController {private final Clinic clinic;@Autowiredpublic ClinicController(Clinic clinic) {this.clinic = clinic;}...@Controller表明ClinicController是Web层组件,@Autowired请求一个被依赖注入的Clinic实例。
这个例子只需要少量的XML语句就能使容器识别两个注解,并限定组件的扫描范围:<context:component-scanbase-package="org.springframework.samples.petclinic"/>这对Web层可谓是个福音,因为在这层Spring的XML配置文件已日益臃肿,甚至可能还不如层下的配置来得有用。
Structs2-Sprint2.5-Hibernate3.1整合图解

我自学Struts2+ Spring2.5+Hibernate框架,用了一天的时间,才将Struts2 + Spring2.5+Hibernate3.1的框架搭建好。
由此想到各位新手应该和我一样啊,我将我的经验分享给大家。
但首先声明,本文档只限于有对j2ee有相关了解的人看,如果您对j2ee开发不了解,可能没有什么作用。
创建一个web工程:
填写工程名称,选择版本:
点击“finish”完成,这样一个web项目就常见好了。
首先我们在src 下创建一个struts.xml文件
填写文件名:
建struts.xml 后,从下载的struts2-2.x.x-all.zip 的拿到struts.xml的头文件
我们找到struts-core.2.x.x.jar 包,将其解压,从中找到到struts-2.1.dtd 文件,复制scr 目录下,并修改头文件,如下图:(这样没网的时候也会有提示)
Struts 的环境已经好了,下面我们添加Spring 支持
Spring 环境添加完成,最后添加Hibernate环境;首先我们要创建一个连接:
连接创建好了,现在添加hiberate 环境
选择刚刚创建的链接
添加s-s-h环境结束(如下图),报错,是正常的,因为我们还没有添加jar包。
添加3大框架的jar包,挑出以下jar ,添加到WEB-INF /lib 目录下
环境基本配置完成,现在要做的是修改spring配置文件,和web.xml文件
Spring (2.5)头文件
数据源的配置
Web.xml 的配置
OK,部署运行吧;
文子。
搭建SSH框架(Struts1,Spring2.5,Hibernate3)

搭建SSH框架:Struts1.* + Spring2.5 + Hibernate3.0 一,项目结构:图(1)Jsp页面省略,主要是一些添删改查的页面;二,开始搭建项目环境,步骤如下:使用平台:MyEclipse6.0/6.5框架版本:Struts1.* + Spring2.5 + Hibernate3.0;1,添加过程:1>,新建项目: 打开MyEclipse,在Package Explorer视图下,右键单击New-> Web Project;注意:在新建项目时,JDK的版本最好要选择Java EE 5.0;因为版本过低,可能有些JSP方面的功能不支持;新建玩项目之后,把该导的包导入到下面,下图为SS H 框架所需要的Jar包,注意,该项目用的是ORACLE数据库;其中,activation与mail这两个包为Java发邮件的包;classes12为Oracle数据库的驱动包,如果不是Oracle数据库,可更换该Jar包;dwe为Ajax dwr 框架中的包;2>,接着就开始用MyEclipse辅助开发Struts,Spring,Hibernate了;3>,首先MyEclipse辅助开发Struts,方法:右键单击你所建的项目,出现一级菜单,选择Myeclipse,选择Myeclipse之后会出现二级菜单,接着选择Add Struts Capabilities;;接着具体操作如下面图示:点击Finish按钮完成;完成之后,可将包删除;在上图中,如果那个勾没有去掉的话,就会自动生产如下标签:当然,如果你觉得标签对你没什么用的话,可以删除;如果该勾去掉的话,就只生成标签,这是Struts的核心标签;4>,MyEclipse辅助开发Spring,方法跟上面的一样,选择Add Spring apabilities;;接着具体操作如下面图示:然后点击Next,具体操作如下图:接着点击 Finish按钮,完成此项操作;5>,,最后MyEclipse辅助开发Hibernate,在执行和上面类似方法之前,Hibernate 需要先做另外一件事情,那就是和数据建立连接,具体操作如下图:点击上图位置的或者右边的>> ,然后再选择MyEclipse Database Explorer切换到如下图页面:,然后右键单击,新建一个Database Driver;如下图:下面这个截图是该项目的数据库链接图:如图所示,测试数据库链接成功;然后可直接点击Finish完成;接着切换到窗口,按照上面第三小步的方法,选择Add Hibernate apabilities;;接着具体操作如下面图示:点击下一步:点击下一步:点击下一步:点击下一步:点击 Finish 完成;6>,最后一步,就是运用Hibernate的映射机制,把数据库的表与JAVA的对形成一个关系映射;在此之前,首先应该在项目SRC的目录下面新建一个包,如该项目所示,用来存放映射生成的POJO对象以及映射文件;如下图:有一点说一下,你生成的*.hbm.xml文件可能不止一个,对,你可以把它们整合到一个文件中;然后新建按第五小步的方法,把窗口切换到MyEclipse Database Explorer界面,然后打开右键刚才所建立的链接,选择属于你自己的用户;然后选择Tble;右键选择如上图的属性:接下来的操作如下图:点击 Next,进入下一步:点击 Next,进入下一步:至此,项目环境己经搭建完成;三,项目搭建完成,SSH各个部分配置文件的说明,以及它们之间存在的关系:1,首先是Struts的核心配置文件,即struts-config.xml:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN""/dtds/struts-config_1_2.dtd"><struts-config><data-sources /><form-beans><!—建立Form表单,在此处进行登记 -→<form-bean name="userForm"type="erForm" /> </form-beans><global-exceptions /><global-forwards /><!—各个Action对应与之相对应的表单 -→<action-mappings><!-- 用户管理 --><action parameter="opers" attribute="userForm" name="userForm"path="/doUser" scope="request"><forward name="login_ok" path="/welcome.jsp"></forward><forward name="login_no" path="/index.jsp"></forward> </action></action-mappings><controllerprocessorClass="org.springframework.web.struts.DelegatingRequestProc essor"></controller><message-resourcesparameter="ermanagerview.struts.ApplicationResources"> </message-resources><!—Spring辅助Struts管理Struts-→<plug-inclassName="org.springframework.web.struts.ContextLoaderPlugIn"><set-property property="contextConfigLocation"value="/WEB-INF/action-servlet.xml" /></plug-in></struts-config>2,其次就是Springd的applicationContext.xml文件和action-servlet.xml文件:applicationContext.xml文件:<?xml version="1.0" encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.5.xsd"><!-- Session 工厂 --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation"value="classpath:hibernate.cfg.xml"><!-- 可以不要配置文件(hibernate.cfg.xml),直接写在这个Spring的配置文件中 --></property></bean><!-- 模板 --><bean id="hibernateTemplate"class="org.springframework.orm.hibernate3.HibernateTemplate"><property name="sessionFactory" ref="sessionFactory" /> </bean><!-- 事务器 --><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManage r"><property name="sessionFactory" ref="sessionFactory" /> </bean><!-- 对外代理 --><!-- 1,用户管理 --><bean id="userDaoImp"class="erDaoImp"><property name="hibernateTemplate" ref="hibernateTemplate" /> </bean><bean id="userServiceTarget"class="erServiceImp"> <property name="userdao"><ref local="userDaoImp" /></property></bean><bean id="userService"class="org.springframework.transaction.interceptor.TransactionProxyF actoryBean"><property name="transactionManager"><ref local="transactionManager" /></property><property name="target"><ref local="userServiceTarget" /></property><property name="transactionAttributes"><props><prop key="*">PROPAGATION_REQUIRED</prop></props></property></bean></beans>action-servlet.xml文件:<!—Spring辅助Struts管理Struts-<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.0.xsd"> <bean name="/doUser"class="erAction"scope="prototype"></bean></beans>3,最后就是Hibernate的hibernate.cfg..xml文件:<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration><session-factory><property name="ername">wangxiaodong</property><property name="connection.url">jdbc:oracle:thin:@192.168.0.2:1521:ALIZEEDB</property><property name="dialect">org.hibernate.dialect.Oracle9Dialect</property><propertyname="myeclipse.connection.profile">Test</property><property name="connection.password">donny</property><property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><mappingresource="com/ygkq/usermanager/model/entity/User.hbm.xml" /></session-factory></hibernate-configuration>该文件基本上不用动,都是自动生成的代码;当然,你也可以根据自己的需要添加代码,例如,你想在执行HQL语句的时候让它显示SQL语句,可将<property name="hibernate.show_sql">true</property>插入代码中;另外在图(1)中还有两个配置文件没有提到,那就是log4j.properties 与mytag.tld;其中log4j.properties是配置日志信息的;而mytag.tld主一个自定义标签;四,SSH框架搭建完成:SSH框架基本搭建完成,如果有不对或者不妥之处,请随时指教!~E-mail:jerry8059@。
轻量级框架

用spring、Hibernate、Struts组建轻量级架构发布时间:2006.03.09 00:13 来源:CSDN 作者:轻量级J2EE架构版本0.1版权© 2005 成湘均文中肯定有错误和理解不正确的地方,欢迎给我指正。
我的邮箱:chengxiangjun@ -------------------------------------------------------------------------------- 目录前言1. 整体框架1.1. UI层1.2. 业务层1.3. 数据持久层1.4. 域对象层2. Struts2.1. 概述2.2. 快速入门2.3. ActionForm2.4. Action2.5. 客户端验证3. springFramework3.1. 概述3.2. 为什么使用Spring3.3. 快速入门3.4. 搭建Web应用环境3.5. Spring IOC3.6. Spring AOP4. hibernate4.1. 概述4.2. 为什么使用Hibernate4.3. 快速入门4.4. 工具的配合使用4.4.1. 生成影射文件4.4.2. 生成映射对象4.4.3. 根据映射对象生成映射文件4.5. 专用词4.5.1. cascade(级联)4.5.2. inverse(反转)4.5.3. Lazy Loading(延时装载)4.6. 一对一表关联操作4.7. 多对一表关联操作4.8. 一对多表关联操作4.9. 多对多表关联操作4.10. 与spring的结合使用4.11. Hibernate DAO5. log4j5.1. 概述5.2. 快速入门前言在java的应用领域,有许多成熟的开源软件,利用它们一样可以打造优越、灵巧的应用框架,本文首先将先介绍所要构建的系统结构和借助的开源产品。
然后逐一讲解各开源软件的具体运用。
希望本文能给那些正在学习这些开源软件的同行提供参考。
struts2+hibernate3.2+spring2.5集成步骤

Struts2+Hibernate3.2+Sprint2.5整合Hibernate使用数据库连接池、MyEclipse6.5Tomcat6.0创建项目,整合Hibernate右键项目,MyEclipse—>Add Hibernate Capabilities使用Spring管理,把勾去掉整合Spring2.5右键项目,MyEclipse—>AddSpring Capabilities配置Hibernate的数据源Hibernate自带的连接池算法相当不成熟。
它只是为了让你快些上手,并不适合用于产品系统或性能测试中。
出于最佳性能和稳定性考虑你应该使用第三方的连接池。
只需要用特定连接池的设置替换hibernate.connection.pool_size 即可。
这将关闭Hibernate自带的连接池。
例如,你可能会想用C3P0.C3P0是一个随Hibernate一同分发的开源的JDBC连接池,它位于lib目录下。
如果你设置了hibernate.c3p0.*相关的属性,Hibernate将使用C3P0ConnectionProvider来缓存JDBC连接。
如果你更原意使用Proxool,请参考发行包中的hibernate.properties并到Hibernate网站获取更多的信息。
<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:jee="/schema/jee"xsi:schemaLocation="/schema/beans[url]/schema/beans/spring-beans-2.0.xsd[/url] [url]/schema/jee[/url][url]/schema/jee/spring-jee-2.0.xsd[/url]"><!--********************配置数据源,采用C3P0********************--> <bean id="dataSource"class="boPooledDataSource"destroy-method="close"><property name="driverClass"><value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value> </property><property name="jdbcUrl"><value>jdbc:sqlserver://localhost:1433;DatabaseName=shopping</value> </property><property name="user"><value>sa</value></property><property name="password"><value>sa</value></property><!--连接池中保留的最小连接数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.在搭建SSH开发平台的时候,由MyEclipse自动导入的包存在一些冲突,主要有
(1) asm.jar与asm-2.2.3.jar
asm-2.2.3是spring所依赖,而asm.jar是hibernate依赖的,应该删除asm-2.2.3.jar这个包
(2). commons-logging-1.0.4.jar与commons-logging-api-1.1.jar
这两个包中commons-logging-1.0.4.jar是spring和hibernate以及struts都要用的包,但是struts2.1以上的版本还需要commons-logging-api-1.1.jar,其实这两个包几乎一样,commons-logging-api-1.1.jar版本较新而已。
(3)异常
严重: Exception starting filter struts2
ng.NullPointerException
at
com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectF actory.java:203)
...
可能的原因是spring的默认配置文件applicationContext.xml改了名,或者没有放在classpath的根路径下面,并且没有在web.xml文件中配置spring的监听器,解决办法在web.xml中添加
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
(4)异常
严重: Exception sending context initialized event to listener instance of class
org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]
可能的原因是虽然配置了spring的监听器,但是没有在web.xml中配置contextConfigLocation来指定spring配置文件列表及相应的具体路径。
解决的办法是在web.xml文件中添加,例如:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/csdn-spring*.xml</param-value>
</context-param>
(5)异常
org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is
org.hibernate.exception.GenericJDBCException: Cannot open connection
可能的原因是缺少相应的JDBC驱动包,请把驱动包拷贝到/WEB-INF/lib下面,或者是数据源的配置有问题,例如用户名、者密码或者URL错误。
javax.servlet.ServletException: Error applying decorator: null
org.apache.struts2.sitemesh.FreeMarkerPageFilter.applyDecorator(FreeM arkerPageFilter.java:164)
org.apache.struts2.sitemesh.TemplatePageFilter.applyDecorator(Templat ePageFilter.java:116)
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilte r.java:62)
org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionCon textCleanUp.java:102)
org.springframework.web.filter.CharacterEncodingFilter.doFilterIntern al(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerR equestFilter.java:76)
Struts2的sitemesh插件struts2-sitemesh-plugin-2.1.6的一个BUG,是FreeMarkerPageFilter的getLocale方法没有对invocation添加非空判断造成的,解决办法是解压包,然后找到org.apache.struts2.sitemesh.FreeMarkerPageFilter这个类,将
[java]view plaincopyprint?
1.protected Locale getLocale(ActionInvocation invocation, Configuration configura
tion) {
2. if (invocation.getAction() instanceof LocaleProvider) {
3. return ((LocaleProvider) invocation.getAction()).getLocale();
4. } else {
5. return configuration.getLocale();
6. }
7.}
1.protected Locale getLocale(ActionInvocation invocation, Configuration configura
tion) {
2. if (invocation != null && invocation.getAction() instanceof LocaleProvider) {
3. return ((LocaleProvider) invocation.getAction()).getLocale();
4. } else {
5. return configuration.getLocale();
6. }
7.}。