- Struts+Spring+Hibernate
- 本次配置环境:Myeclipse5.5、MySQL5.0、Struts1.2、Spring2.0、Hibernate3.1
- 一、建工程
- 略。。。。。。
- 二、要使用Struts、Spring、Hibernate必须导入必需的包
- 1、Struts(和之前没区别)
- 2、Spring
- 分别导入Spring 2.0 Core Libraries、Spring 2.0 Web Libraries
- 选择把*.jar Copy到工程/WebRoot/WEB-INF/lib下; 点击NEXT
- 选择applicationContext.xml的目录,/WebRoot/WEB-INF;点击finish
- 3、Hibernate
- 在导入Hibernate时,当然先要配置DataSource咯,这里就不再说了
- 选择导入Hibernate全选上
- 选上复选框:Hibernate 3.1 Core......、Hibernate 3.1 Advanced......、Spring 2.0 ORM/DAO.......
- 同样选择把*.jar Copy到工程/WebRoot/WEB-INF/lib下; 点击NEXT
- 这里我们选择把hibernate交给spring去管理
- 选中单选按钮 Spring configuration file...... 点击NEXT
- 选择已存在的applicationContext.xml文件,
- 填写SessionFactory ID :sessionFactory 点击NEXT
- 这里我们需要填写Bean Id :dataSource
- 选择 DB Driver :选择刚才配置的DataSource 点击NEXT
- 这里不需要创建 SessionFactory Class 点击Finish
- 注意:查看applicationContext.xml的变化
- 三、映射VO、数据操作
- 首先工程的结构建好,比较简单的结构:
- org.chenwj.dao
- org.chenwj.struts
- org.chenwj.struts.action
- org.chenwj.struts.form
- org.chenwj.vo
- 映射表userinfo创建持久类到org.chenwj.vo目录
- 在dao下创建数据库操作类 UserDAO 这里只是对数据库进去插入,代码如下:
- private SessionFactory sessionFactory;
-
- public SessionFactory getSessionFactory() {
- return sessionFactory;
- }
- public void setSessionFactory(SessionFactory sessionFactory) {
- this.sessionFactory = sessionFactory;
- }
-
- public boolean regist(Userinfo user) {
- try {
- Session session = sessionFactory.openSession();
- Transaction tx = session.beginTransaction();
- session.save(user);
- tx.commit();
- session.close();
- return true;
- } catch (Exception ex) {
- ex.printStackTrace();
- return false;
- }
- }
- 使用依赖注入,setter设值 sessionFactory
- 到此数据层已经完成
-
- 四、配置struts-config.xml
- 添加action、form、jsp 略……
- 首先在struts-config.xml添加一个插件
- <plug-in
- className="org.springframework.web.struts.ContextLoaderPlugIn">
- <set-property property="contextConfigLocation"
- value="/WEB-INF/applicationContext.xml" />
- </plug-in>
- 为什么要添回这个插件呢?
- 因为在后面会在applicationContext.xml下配置action,让action交给spring
- 去管理,实现了struts的依赖注入机制
- 接下来添加cuntroller,这里你可以使用DelegatingActionProxy代理
- <controller processorClass=
- "org.springframework.web.struts.DelegatingRequestProcessor"/>
- Controller取代了struts的RequestProcessor,在定义action里,我们可以省略
- type属性。(我个人比较喜欢用这个)下面让我们看配置好的struts-config.xml:
- <struts-config>
- <data-sources />
- <form-beans>
- <form-bean name="userForm"
- type="org.chenwj.struts.form.UserForm" />
- </form-beans>
- <global-exceptions />
- <global-forwards />
- <action-mappings>
- <action attribute="userForm" input="/index.jsp" name="userForm"
- path="/user" scope="request">
- <forward name="success" path="/success.jsp" />
- <forward name="error" path="/index.jsp" />
- </action><!--type属性可不写-->
- </action-mappings>
-
- <controller processorClass=
- "org.springframework.web.struts.DelegatingRequestProcessor"/>
-
- <message-resources
- parameter="org.chenwj.struts.ApplicationResources" />
- <plug-in
- className="org.springframework.web.struts.ContextLoaderPlugIn">
- <set-property property="contextConfigLocation"
- value="/WEB-INF/applicationContext.xml" />
- </plug-in>
- </struts-config>
-
- 五、在applicationContext.xml配置action
- 这里我们先在 action类里添加一些业务逻辑,代码如下:
- public class UserAction extends Action {
-
- private UserDAO userDao;
- private Userinfo user;
-
- public ActionForward execute(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response) {
- UserForm userForm = (UserForm) form;
-
- user.setName(userForm.getName());
- user.setPassword(userForm.getPassword());
- if(userDao.regist(user)){
- return mapping.findForward("success");
- }
- return mapping.findForward("error");
- }
-
- public Userinfo getUser() {
- return user;
- }
- public void setUser(Userinfo user) {
- this.user = user;
- }
- public UserDAO getUserDao() {
- return userDao;
- }
- public void setUserDao(UserDAO userDao) {
- this.userDao = userDao;
- }}
- 这里使用setter实现依赖注入了两个bean,接下来配置applicationContext.xml
- <beans xmlns="略……">
- <!—- 数据源 -->
- <bean id="dataSource"
- class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName"
- value="com.mysql.jdbc.Driver">
- </property>
- <property name="url"
- value="jdbc:mysql://localhost:3306/demo"></property>
- <property name="username" value="root"></property>
- <property name="password" value="root"></property>
- </bean>
- <!-- sessionFactory -->
- <bean id="sessionFactory" class=
- "org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource">
- <ref bean="dataSource" />
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">
- org.hibernate.dialect.MySQLDialect
- </prop>
- </props>
- </property>
- <property name="mappingResources">
- <list>
- <value>org/chenwj/vo/Userinfo.hbm.xml</value>
- </list>
- </property>
- </bean>
- <!-- 数据库操作类 -->
- <bean id="userDao" class="org.chenwj.dao.UserDAO">
- <property name="sessionFactory">
- <ref local="sessionFactory" />
- </property>
- </bean>
- <!-- action需要注意:这里是name属性不是ID,同时要和struts-config.xml
- 对应的 action path属性值相同,斜线也是必需的,通过这个属性scope=
- "prototype" 每次获取bean实例时都会产生新的实例,默认是单例-->
- <bean name="/user" class="org.chenwj.struts.action.UserAction"
- abstract="false" lazy-init="default" autowire="default"
- scope="prototype" dependency-check="default">
- <property name="userDao" ref="userDao" />
- <property name="user" ref="user" />
- </bean>
- <bean id="user" class="org.chenwj.vo.Userinfo" abstract="false"
- lazy-init="default" autowire="default"
- dependency-check="default">
- </bean>
- </beans>
- 到此所有的配置已经完成,测试:
- HTTP Status 404 - Servlet action is not available
- The requested resource (Servlet action is not available) is not available
- 这个错误是大部初学者整合 SSH 时都会遇到的问题
-
- 首先建议你使用测试类进行测试,这样我们可以很快找到错误所在的地方
- public static void main(String[] args) {
- ApplicationContext context = new FileSystemXmlApplicationContext(
- "/WebRoot/WEB-INF/applicationContext.xml");
- UserDAO dao = (UserDAO)context.getBean("userDao");
- Userinfo user = new Userinfo();
- user.setName("aaa");
- user.setPassword("bbb");
- boolean a = dao.regist(user);
- if(a){
- System.out.println("OK");
- }
- }
- 如果这里没出错,那么请你好好检查你的配置文件,是否写错或少了些什么东东了
- 这里出的错误也跟使用的版本有关系,这里报的错一般都是说找不到XX类所报的异常
- 那么请检查lib下有没commons-pool-1.2.jar包,如没请导入,这个问题也有可能是包
- 之间的****,删除这个包hibernate-annotations.jar
-
- 六、.sql文件、.jsp文件
- create table userinfo(
- id int(10) not null auto_increment,
- name varchar(20),
- password varchar(20),
- PRIMARY KEY (id))
- <body>
- <html:form action="/user">
- name : <html:text property="name"/><br/>
- password : <html:password property="password"/><br/>
- <html:submit/><html:cancel/>
- </html:form>
- </body>
- 七、作者心声
- 上面省略了一些类的代码,当然也是不紧要的,请慢看、细看、多做,相信很容易就可以配置成功。如有必要也可以联系我,我这有Demo和视频教程。
|