SSH结束之后,NOVA团队就基于SSH实现了NOVA音乐视频网站,通过在这里进行说明一下全程的开发流程,也许是上学期就应该进行总结的,
但是上学期一直没有一直没有完善与Ajax的结合.现在实现了.也保存一下自己对SSH架设的基本思想.对后面有警示的作用!
建议先懂Struts,hibernate,Spring的基础后看此帖子有效!
1.主要说明SSH各部分的作用:
1>Struts,Struts总的来说就是两个字--"动作"
全程通过struts-config.xml进行配置动作,配置表单,配置动作以及转发:主要有ActionForm,Action的书写(Action我建议用Struts的DispathAction,后面在Spring的配置的时候大大减少配置量)和struts-config.xml的配置!
2>hibernate,hibernate总的来说就是三个字--"持久层"
主要负责持久层:通过hibernate.cfg.xml配置数据库的连接,配置javabean的数据库映射xml文件,书写持久层,这里的持久层Manager,通过spring注入的DAO数据库的实现完成一些方法,其中hibernate 的DAO要通过Spring提供的HibernateDaoSupport类,进行方法的实现与数据库的增删改,更新等操作.
3>spring,spring总的来说就是两个字--"管理",管理整个流程,
对事务的管理,对hibernate的管理(创建数据库的连接),对Struts的管理(管理Struts全部的动作),管理hibernate的Manager和Dao(主要是对Manager中的dao进行对象的注入).
2.主要的配置和代码:
1>.总的配置web.xml
web.xml是J2EE web方向的心脏,配置如下:
<web-app> <!--配置struts--> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>3</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>3</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- 配置spring --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:applicationContext-*.xml</param-value> <!--这里有三个spring的配置文件applicationContext-actions,applicationContext-beans,applicationContext-commons--> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 这是Spring中的一个编码过滤器--> <filter> <filter-name>Spring character encoding filter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>Spring character encoding filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 这个过滤器是用在一个页面请求时,打来Session,生成完页面生关闭Session,这样就可以解决laze --> <filter> <filter-name>hibernateFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>hibernateFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--spring来对hibernate的应用--> </web-app>
web.xml主要配置基本的动作转发交给struts-config.xml,Spring的监听器listener:org.springframework.web.filter.CharacterEncodingFilter
,乱码的处理UTF-8,和hibernate的小配置org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.
2>Struts的配置:
Struts-config配置(主要介绍Action的配置,这里的Action为DispathAction)
<action-mappings> <!--这个进行User的全部操作,一般为这种款式的链接/User.do?Action=login--> <action path="/User" type="org.springframework.web.struts.DelegatingActionProxy" name="UserActionForm" parameter="Action" scope="request" validate="false"> <!-- 登陆转发页面 --> <forward name="Login_Success" path="/user/ShowMessage.jsp"/> <forward name="Login_Failed" path="/login_f.jsp" /> </action>
Action 由 操作业务层要用到Spring的注入(构造/设置)的Manager,我代码:
XXXAction extemds DispathAction{ private VideoManager videoManager; //设置注入 public void setVideoManager(VideoManager videoManager) { this.videoManager = videoManager; } //后面就可以直接用videoManager去操作业务层了, }
//这里为什么能注入videoManager,是因为这里的XXXAction由Spring管理,而Struts的Action只是通过org.springframework.web.struts.DelegatingActionProxy让Spring来管理,当产生这个动作,Spring就set注入videoManager到XXXAction的类中.所以这里videoManager有值!!!
3>hibernate的配置
主要的hibernate.cfg.xml和javabean的映射,DAO的书写问题
hibernate.cfg.xml和javabean的映射没有什么变化(单用hibernate的经验就ok),主要是DAO的实现问题:
这里可以用Spring提供的类HibernateDaoSupport,很好很强大,这样就不必担心事务(Spring会自动处理),而只是写简短的代码,简化操作,这又体现Spring的管理!!!
简短代码展示:
XXXDAOImp extends HibernateDaoSupport implements XXXDAO { public void AddMusic(MusicTO music) throws Exception { getHibernateTemplate().save(music); } //这就是添加音乐的代码 }
这里的XXXDAOImp也要纳入到Spring的管理之中(见后面的Spring配置,主要对Manager里面的DAO进行注入)
4>Spring的配置
a.applicationContext-actions.xml主要对Struts的动作进行配置(管理全部的Struts动作)
<!-- 对user的全部的Action进行处理,这里用到了DispatchAction,链接形如:NovaMedia/User.do?Action=Login--> <bean name="/User" class="greatwqs.struts.action.UserAction"> <property name="userManager" ref="userManager"></property> <property name="musicManager" ref="musicManager"></property> </bean>
b.applicationContext-beans.xml
主要对hibernate里面的DAO和Manager进行全部的配置(管理hibernate)
<!-- GREATWQS说明:这个只是配置一切的DAO和Manager的配置和联系 --> <bean id="adminDAO" class="greatwqs.hibernate.dao.imp.AdminDAOImp"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="adminManager" class="greatwqs.spring.service.imp.AdminManagerImp"> <property name="adminDAO" ref="adminDAO"/> </bean> <!--配置管理员的DAO和Manager完毕-->
c.applicationContext-commons.xml主要配置(Spring的基本配置)
<beans> <!--GREATWQS说明:这个配置文件是针对spring的常用的功能进行的配置:sessionFactory,事务,AOP等的配置--> <!-- 配置SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation"> <value>classpath:hibernate.cfg.xml</value> </property> </bean> <!-- 配置事务管理 --> <bean id="TxManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 配置事务的传播性 --> <tx:advice id="txAdvice" transaction-manager="TxManager"> <tx:attributes> <!--propagation="REQUIRED"有事务则直接用,无事务则直接开启--> <tx:method name="Add*" propagation="REQUIRED"/> <tx:method name="Delete*" propagation="REQUIRED"/> <tx:method name="Modify*" propagation="REQUIRED"/> <tx:method name="*" read-only="true"/> </tx:attributes> </tx:advice> <!-- 配置那些类的那些方法参与事务 --> <aop:config> <aop:pointcut id="pointcut" expression="execution(* greatwqs.hibernate.dao.imp.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/> <!--这里进行应用上面的配置属性,失误的传播属性等方案--> </aop:config> </beans>
3.后面的Ajax思考:
原来写Ajax的代码都是new的对象,再去全部进行的数据库的操作,用了Spring就模糊了,对象不能new了,但是最后还是由Spring的全局管理给我了答案(既然动作都是由Spring管理,我的Ajax的传值也用动作再附加参数,再通过这个动作再进行Spring的注入获得数据库的连接,最后生成jsp的xml文件)成功的利用起了.
也给我一个启示:Spring的管理,管理全局
以前在网上查询的ssh架设,利用Ajax很多都用到了jquery,也很好很强大!!
SSH架构,在这里进行记录一下.没有事情的时候翻翻....