看过了两三个SSH搭建的视频(浪曦风中叶老师、尚学堂李勇老师的两个视频),也跟着视频把这个框架搭了两遍,有点迷迷糊糊的,为了加深印象,我决
定不依靠视频再来搭一遍,经过一天的调试与处理,终于能够独立自主地把SSH框架给搭建起来了,不容易啊。其中出现的错误以及各种各样的BUG不计其数,
通过查阅文档以及Google得到了解决。这里,我就来做一个总结:
SSH框架的基本配置:
1.相关jar包的引入,这里我采用的是spring2 + struts2 +
hibernate3的组合,搭完了之后才发现Spring已经到3了,不知道在Spring3上面的配置是否相同,有待尝试。
-
-
# spring.jar
-
# struts2-core.jar
-
# xwork-core.jar
-
# mysql-connector-java.jar
-
# hibernate3.jar
-
# struts2-spring-plugin.jar
-
-
# commons-collections.jar
-
# commons-fileupload.jar
-
# commons-logging.jar
-
# freemarker.jar
-
# log4j.jar
-
# ognl.jar
-
# dom4j.jar
-
# jta.jar
-
# cglib-nodep.jar
-
# antlr.jar
-----核心jar包-----
# spring.jar
# struts2-core.jar
# xwork-core.jar
# mysql-connector-java.jar
# hibernate3.jar
# struts2-spring-plugin.jar
-----在默认配置下核心jar所依赖的jar包---
# commons-collections.jar ---|
# commons-fileupload.jar-----|------------这三个jar包是在jakarta-commons项目中一些
# commons-logging.jar--------| 基于JDK上扩展的工具包。
# freemarker.jar
# log4j.jar
# ognl.jar
# dom4j.jar
# jta.jar
# cglib-nodep.jar
# antlr.jar ------------ 这个jar包是spring AOP 采用 动态代理 时需要的jar包。
2.相关的配置
i)/WEB-INF/web.xml
a.需要配置一个Struts2的Filter:
-
<
filter
>
-
<
filter-name
>
struts2
</
filter-name
>
-
<
filter-class
>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</
filter-class
>
-
</
filter
>
-
<
filter-mapping
>
-
<
filter-name
>
struts2
</
filter-name
>
-
<
url-pattern
>
/*
</
url-pattern
>
-
</
filter-mapping
>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
b.由于从struts2.1.3之后的版本不再建议采用
org.apache.struts2.dispatcher.FilterDispatcher,所以,我们最好配置成
StrutsPrepareAndExecuteFilter或者StrutsExecuteFilter以及StrutsPrepareFilter,
需要注意的是:如配置成StrutsExecuteFilter需要将StrutsPrepareFilter也配置上,否则将会报错。所以建议就只直接
采用StrutsPrepareAndExecuteFilter。
c.此外还需要配置一个ContextListener:
-
<
listener
>
-
<
listener-class
>
org.springframework.web.context.ContextLoaderListener
</
listener-class
>
-
</
listener
>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
如果你的applicationContext.xml没有配置在/WEB-INF/目录或者采用的不是默认的文件名,则还需要配
context-param,让Spring找到对应的配置文件,如下(注意:param-name的内容一定是
contextConfigLocation,Spring将根据该名称注入到相应的对象中):
-
<
context-param
>
-
<
param-name
>
contextConfigLocation
</
param-name
>
-
<
param-value
>
classpath*:application-Context.xml
</
param-value
>
-
</
context-param
>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:application-Context.xml</param-value>
</context-param>
ii)applicationContext.xml,这个文件是比较核心的文件:
a)配置sessionFactory,有两种配置方式:
(1)采用传统的Hibernate配置文件,将其映射到
sessionFactory中:
-
<
bean
id
=
"sessionFactory"
class
=
"org.springframework.orm.hibernate3.LocalSessionFactoryBean"
>
-
<
property
name
=
"configLocation"
>
-
<
value
>
classpath:hibernate.cfg.xml
</
value
>
-
</
property
>
-
</
bean
>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" >
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
采用这种方式时,需要在hibernate.cfg.xml文件中配置数据连接相关信息,这里与一般的hibernate配置文件一样:
-
<
hibernate-configuration
>
-
<
session-factory
>
-
-
<
property
name
=
"hibernate.connection.driver_class"
>
com.mysql.jdbc.Driver
</
property
>
-
<
property
name
=
"hibernate.connection.url"
>
jdbc:mysql://localhost:3306/ssh_test
</
property
>
-
<
property
name
=
"hibernate.connection.username"
>
root
</
property
>
-
<
property
name
=
"hibernate.connection.password"
>
orange
</
property
>
-
<
property
name
=
"hibernate.dialect"
>
org.hibernate.dialect.MySQLDialect
</
property
>
-
-
<
property
name
=
"hibernate.show_sql"
>
true
</
property
>
-
-
-
<
mapping
resource
=
"com/ssh/bean/User.hbm.xml"
/>
-
</
session-factory
>
-
</
hibernate-configuration
>
-
(2)采用
sessionFactory属性的方式配置数据源相关信息,如下:
-
-
-
<
bean
id
=
"dataSource"
class
=
"org.apache.commons.dbcp.BasicDataSource"
destroy-method
=
"close"
>
-
<
property
name
=
"driverClassName"
value
=
"com.mysql.jdbc.Driver"
/>
-
<
property
name
=
"url"
value
=
"jdbc:mysql://localhost:3306/mytest"
/>
-
<
property
name
=
"username"
value
=
"root"
/>
-
<
property
name
=
"password"
value
=
"orange"
/>
-
<
property
name
=
"maxActive"
value
=
"100"
/>
-
<
property
name
=
"maxIdle"
value
=
"30"
/>
-
<
property
name
=
"maxWait"
value
=
"500"
/>
-
<
property
name
=
"defaultAutoCommit"
value
=
"true"
/>
-
</
bean
>
-
-
-
<
bean
id
=
"sessionFactory"
class
=
"org.springframework.orm.hibernate3.LocalSessionFactoryBean"
>
-
<
property
name
=
"dataSource"
ref
=
"dataSource"
/>
-
<
property
name
=
"hibernateProperties"
>
-
<
props
>
-
<
prop
key
=
"hibernate.dialect"
>
org.hibernate.dialect.MySQLDialect
</
prop
>
-
<
prop
key
=
"hibernate.show_sql"
>
true
</
prop
>
-
</
props
>
-
</
property
>
-
<
property
name
=
"mappingResources"
>
-
<
list
>
-
<
value
>
com/test/bean/User.hbm.xml
</
value
>
-
</
list
>
-
</
property
>
-
</
bean
>
<hibernate-configuration>
<session-factory>
<!-- connection configuration -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/ssh_test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">orange</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- the following configuration just for programming and debug -->
<property name="hibernate.show_sql">true</property>
<!-- mapping resource -->
<mapping resource="com/ssh/bean/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
(2)采用sessionFactory属性的方式配置数据源相关信息,如下:
<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mytest" />
<property name="username" value="root" />
<property name="password" value="orange" />
<property name="maxActive" value="100" />
<property name="maxIdle" value="30" />
<property name="maxWait" value="500" />
<property name="defaultAutoCommit" value="true" />
</bean>
<!-- 将数据源映射到sessionFactory中 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/test/bean/User.hbm.xml</value>
</list>
</property>
</bean>
b)配置完sessionFactory后,还可以根据需要配置以下三方面的内容,也可以不配置选择采用默认的方式:
-
-
<
bean
id
=
"transactionManager"
class
=
"org.springframework.orm.hibernate3.HibernateTransactionManager"
>
-
<
property
name
=
"sessionFactory"
>
-
<
ref
bean
=
"sessionFactory"
/>
-
</
property
>
-
</
bean
>
-
-
-
<
tx:advice
id
=
"txAdvice"
transaction-manager
=
"transactionManager"
>
-
<
tx:attributes
>
-
<
tx:method
name
=
"add*"
propagation
=
"REQUIRED"
/>
-
<
tx:method
name
=
"del*"
propagation
=
"REQUIRED"
/>
-
<
tx:method
name
=
"modify*"
propagation
=
"REQUIRED"
/>
-
<
tx:method
name
=
"*"
read-only
=
"true"
/>
-
</
tx:attributes
>
-
</
tx:advice
>
-
-
-
<
aop:config
>
-
<
aop:pointcut
id
=
"allManagerMethod"
expression
=
"execution(* xxx.xxx.*.*(..))"
/>
-
<
aop:advisor
pointcut-ref
=
"allManagerMethod"
advice-ref
=
"txAdvice"
/>
-
</
aop:config
>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="modify*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 那些类的哪些方法参与事务 -->
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution(* xxx.xxx.*.*(..))"/>
<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
</aop:config>
这样就基本完成了我们的ssh的相关配置。
3.SSH的基本使用:
具体分工:
# 在applicationContext.xml中配置相关的bean信息
-
<
bean
id
=
"userService"
class
=
"com.ssh.service.impl.UserServiceImpl"
>
-
<
property
name
=
"userDao"
ref
=
"userDao"
/>
-
</
bean
>
-
-
<
bean
id
=
"loginAction"
class
=
"com.ssh.action.LoginAction"
>
-
<
property
name
=
"service"
ref
=
"userService"
/>
-
</
bean
>
<bean id="userService" class="com.ssh.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="loginAction" class="com.ssh.action.LoginAction">
<property name="service" ref="userService" />
</bean>
这里的property属性中name值对应的是相应处理类生成时需要IoC容器注入的属性,比如说id为loginAction的处理类为
com.ssh.action.LoginAction(它其中应当设置一个setService(UserService
service)方法),这样在需要使用该bean时,IoC容器会调用这个setService方法来将生成的userService对象传入。
需要注意的是,如果想让IoC容器注入相应属性,则必须要实现相应属性的set方法。
# 在struts.xml中配置action的相关信息
相关注意事项:
由于所有的bean都由Spring来管理,那么在
struts.xml中一个action的class属性就不能写成具体的类,而是要使用该类在applicationContext.xml文件中配置
的Bean的id,如:
-
<
action
name
=
"login"
class
=
"loginAction"
>
-
<
result
name
=
"success"
>
/result.jsp
</
result
>
-
<
result
name
=
"input"
>
/index.jsp
</
result
>
-
</
action
>
<action name="login" class="loginAction">
<result name="success">/result.jsp</result>
<result name="input">/index.jsp</result>
</action>
这个loginAction对应的就是上面的id为loginAction的bean,而这个bean的class属性中设置的才是真正的对应
的Action的处理类。
# 对于每个模型,都要有一*.hbm.xml
3.其它一些注意点:
Spring中一些的概念很重要:AOP,IOC。
分享到:
相关推荐
SSH(Struts2、Spring、Hibernate...总的来说,SSH环境搭建涉及众多组件和配置,但是一旦完成,可以提供强大的功能和良好的可维护性。理解每个部分的工作原理和它们之间的协同,是成为一名熟练的Java Web开发者的关键。
以上是SSH环境搭建的基本过程,通过这个过程,你可以建立一个安全的远程访问通道,保护你的数据不受网络威胁。在实际操作中,根据具体需求和安全策略调整配置是至关重要的。在 Rico-Cai 的博客中可能有更具体的实践...
### MyEclips集成SSH环境搭建详解 #### 一、为什么要进行SSH整合? 在软件开发领域,特别是Java Web开发中,Struts2、Hibernate、Spring(简称SSH)这三大框架各自独立时,都能完成一定的任务。然而,在实际项目中...
然而,这里的"ssh环境搭建需要的jar包2"可能是指与SSH协议相关的Java库,用于实现远程管理和自动化任务。 首先,我们来了解一下SSH协议的核心组件。OpenSSH是广泛使用的SSH实现,它包含了ssh客户端和服务端程序,...
在进行SSH环境搭建前,我们需要先添加JUnit作为测试框架。在工程名上右击,选择`Build Path`,然后点击`Add Libraries...`,按照向导步骤引入JUnit库,以便在项目中进行单元测试。 **一、配置Struts2** 1. 添加...
SSH环境搭建步骤** - **安装JDK**:首先确保系统中已经安装了Java开发环境,并设置好环境变量。 - **下载框架**:分别下载Struts2、Spring和Hibernate的最新稳定版本。 - **创建项目**:在IDE(如Eclipse或IntelliJ...
以下是对SSH环境搭建项目的详细解析: 1. **Struts2**:Struts2是一个基于MVC设计模式的Web应用框架,它继承了Struts1的优点,并引入了更多功能和改进。在本项目中,Struts2主要负责控制层的工作,处理HTTP请求,...
在“ssh环境搭建”过程中,主要包括以下几个步骤: 1. **安装SSH服务器**:首先,你需要在目标服务器上安装SSH服务器软件,如OpenSSH。在Ubuntu或Debian系统中,可以使用`sudo apt-get install openssh-server`命令...
本压缩包提供了搭建SSH环境所需的核心jar包,让我们来详细探讨一下这些框架及其在构建Java Web应用中的作用。 1. Struts2:Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,主要负责控制层。...
### jBPM4.3与SSH环境搭建详解 #### 一、引言 jBPM (JBoss Business Process Management) 是一个开源的工作流管理系统,它提供了用于定义业务流程的工具和APIs。本文将详细介绍如何在开发环境中安装并配置jBPM4.3...
在IT领域,SSH环境的搭建与配置是系统管理员和开发者必备的技能之一,尤其在进行远程服务器管理时。本示例将详细介绍如何在Linux环境中设置SSH服务,并进行基本的配置。 首先,我们需要确保系统已经安装了OpenSSH...
在Eclipse开发环境中,我们可以利用这些注解来构建SSH2应用。首先,需要导入SSH2相关的库,然后创建项目,并在项目中添加相应的注解到类和方法上。例如,创建一个简单的"CreateDemo"应用,可以创建一个`@Controller`...
网络上好多Myeclipse8.5+flex4.5+Blazeds+SSH环境搭建及实例,个人实验过程中出现了不少问题,通过从网络上搜索各种资源,最后成功整合,以供大家学习。当然,还有部分内容没有修改完,但至少能够成功运行
如果Tomcat能正常启动且示例页面能正确显示,那么SSH环境搭建就成功了。 在实际开发过程中,你可能还需要配置其他相关组件,如数据库驱动,以及根据具体业务需求对Spring和Hibernate进行更详细的配置。SSH框架的...