最近研究了一下Spring的MVC框架感觉功能很强大,所以想把使用后的感想写出来。本人也不算什么牛人,所以写的理论性不是很强,之前开发了一个基于SSH框架的室内环境监测系统的客户端,说实话结构现在看起来有点乱,尤其是后期功能不断添加之后,更是有点力不从心,在此,为了给一些和我一样在框架里刚刚起步的同学们一点点鄙陋的建议,我把我当时的设计思想和现在一点点感悟写出来,分享给大家。我将从两部分来谈一下我对于SSH框架中MVC分层思想的应用,首先在这一部分,我将把我之前应用SSH框架并采用
MVC分层思想设计的系统整体架构写出来,有不合理的地方希望大家共同改进。
(一)项目文件布局
这个是我当时系统构建的第一个版本。
项目搭建平台:Resin3.0.21
项目开发软件:MyEclipse7.5
整体架构符合MVC分层方式,分为展现层,即WebRoot下面的js、jsp等等,和后台部分,即业务逻辑层和持久层。
业务逻辑层(Actions)采用Structs ActionServlet来处理,持久层(persistence)采用工厂模式进行设计。其中model相当于vo,manager包里面包含dao接口和实现类。目前看来,当时的业务逻辑层的forms完全没有什么用,有点繁琐,个人认为Structs的action完全可以用servlet来代替,所以目前看来structs的mvc结构用着不是很爽。
(二)MVC分层思想在SSH框架中的体现
通过以上两幅图的结合,多余的文字我就不过多赘述,希望可以给他家带来一个清晰直观的认识。
下面一步步逐层讲解一下我开始的设计思路,首先先理解一下web.xml设计。
首先注明一下web.xml的加载顺序:web.xml 的加载顺序是:ServletContext-> context-param ->listener -> filter -> servlet。首先在容器启动时,服务器会创建一个ServletContext,然后创建context-param,用于向 ServletContext提供键值对,即应用程序上下文信息。然后是listener、filter,最后是servlet,servlet执行是有顺序的,即<load-on-startup>。
PS:以上只是没看懂的请看http://blog.csdn.net/hongshan50/article/details/7335443
附本次项目我的web.xml文件:
<?xmlversion="1.0"encoding="UTF-8"?>
<web-appxmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"version="2.5"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!—加载Structs-->
<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>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!—Structs映射 -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!—Spring配置详解-->
<!—context-param是全局的,一旦配置在servletcontext中都可以得到下面的参数,比如contextConfigLocation,这个名字是固定的,Spring通过这个参数可以加载下面的文件生成beanfactory,且只初始化一次-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-actions.xml,
classpath:applicationContext-beans.xml,
classpath:applicationContext-common.xml</param-value>
</context-param>
<!-- listener负责读取我们context-param的配置文件-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!—解决Spring和Hibernate的解码问题-->
<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>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Spring character encoding filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<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>
</web-app>
下面分别列举一下我的structs-config.xml、Hibernate.cfg.xml、ApplicationContext-*.xml文件中的一些主要代码:
(1)
Hibernate.cfg.xml
<!DOCTYPEhibernate-configuration
PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property
name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property
name="connection.username">SRMS</property>
<property
name="connection.password">srms</property>
<property
name="dialect">org.hibernate.dialect.OracleDialect</property>
<property
name="hibernate.show_sql">false</property>
<property
name="cache.use_second_level_cache">false</property>
<property
name="jdbc.batch_size">50</property>
<property
name="current_session_context_class">thread</property>
<property
name="hibernate.query.factory_class">
org.hibernate.hql.classic.ClassicQueryTranslatorFactory
</property>
<mapping
resource="com/env/persistence/model/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
(2)
structs-config.xml
<?xmlversion="1.0"encoding="ISO-8859-1"?>
<!DOCTYPEstruts-config
PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-beanname="userForm"type="com.env.business.forms.UserForm"/>
</form-beans>
<action-mappings>
<!—直接跳转-->
<actionpath="/login"forward="/WEB-INF/jsp/login.jsp"></action>
<!—通过Spring注入跳转-->
<actionpath="/usermanager"
name="userForm"
type="org.springframework.web.struts.DelegatingActionProxy"
parameter="command"
>
<forwardname="add"path="/WEB-INF/jsp/center/usermanager/add.jsp"/>
<forwardname="success"path="/WEB-INF/jsp/center/usermanager/main.jsp"/>
<forwardname="modify"path="/WEB-INF/jsp/center/usermanager/modify.jsp"/>
</action>
</action-mappings>
</struts-config>
(3)
Spring配置文件我分成三个文件,分别是
applicationContext-actions.xml,applicationContext-beans.xml,applicationContext-common.xml
文件头,即命名空间都是一样的,如下:
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
其中applicationContext-beans.xml
<beanid="userManager"class="com.env.persistence.manager.UserManagerImpl">
<propertyname="sessionFactory"ref="sessionFactory"/>
</bean>
其中applicationContext-actions.xml
<beanname="/usermanager"class="com.env.business.actions.UserManagerAction">
<propertyname="userManager"ref="userManager"/>
</bean>
比较主要的是applicationContext-common.xml
<!-- 配置sessionFactory -->
<beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<propertyname="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
<!-- Hibernate配置事务管理器-->
<beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<propertyname="sessionFactory">
<refbean="sessionFactory"/>
</property>
<propertyname="dataSource"ref="dataSource"/>
</bean>
<!-- JDBC配置事务管理器
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource"ref="dataSource"/>
</bean>
-->
<!-- 配置事务的传播特性 -->
<tx:adviceid="txAdvice"transaction-manager="transactionManager">
<tx:attributes>
<tx:methodname="add*"propagation="REQUIRED"/>
<tx:methodname="del*"propagation="REQUIRED"/>
<tx:methodname="find*"read-only="true"/>
<tx:methodname="modify*"propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!--那些类的哪些方法参与事务 -->
<aop:config>
<aop:pointcutid="allManagerMethod"expression="execution(*
com.env.persistence.manager.*.*(..))"/>
<aop:advisorpointcut-ref="allManagerMethod"advice-ref="txAdvice"/>
</aop:config>
<!-- 以下配置的是对JDBC的支持 -->
<beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource">
<propertyname="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<propertyname="url">
<value>jdbc:oracle:thin:@localhost:1521:orcl</value>
</property>
<propertyname="username">
<value>SRMS</value>
</property>
<propertyname="password">
<value>SRMS</value>
</property>
<propertyname="defaultAutoCommit">
<value>false</value>
</property>
</bean>
</beans>
(未完待续)
分享到:
相关推荐
ssh框架优缺点ssh框架优缺点ssh框架优缺点ssh框架优缺点ssh框架优缺点
SSH框架与MVC架构之间的关系
ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh...
SSH框架的优缺点,重点讲述了轻量级SSH框架的特点
ssh2框架练习项目及代码 ssh2框架练习项目及代码 ssh2框架练习项目及代码
ssh框架介绍及优缺点,体现出JAVA中的SSH框架在同级开发中的优势
三大框架整合开发案例,最适合初学者。对一个发布系统的优化及增删改查
MVC与SSH的区别MVC与SSH的区别MVC与SSH的区别MVC与SSH的区别MVC与SSH的区别MVC与SSH的区别MVC与SSH的区别MVC与SSH的区别MVC与SSH的区别MVC与SSH的区别MVC与SSH的区别MVC与SSH的区别MVC与SSH的区别MVC与SSH的区别
里面是SSH框架搭建登录的demo,清楚的描述了SSH框架搭建过程的各种配置,另附博客地址:http://blog.csdn.net/u010539352
ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ...
ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ...
JSPssh研究生毕业环节管理系统 是一套完善的WEB设计系统,对理解JSP java 编程开发语言有帮助,系统采用ssh框架 MVC模式进行开发,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。本系统运用MVC设计模式,...
一个完整的SSH框架demo,适合正在开始学SSH框架的小伙伴
idea配置ssh框架
该文档主要针对那些一开始学SSH框架时迷茫,不知所措的人,希望对你们有点帮助!
javaSSH框架javaSSH框架javaSSH框架javaSSH框架
用ssh框架写的OA项目,仅供参考
在此基础上,本文对SSH框架和jQuery技术在Java-Web开发中的应用进行了探讨。同时,本文结合时代技术发展的特点,对基于SSH框架的Java-Web数据库配置设计方法进行了研究,并对基于jQuery技术的Java-Web功能优化设计方法...
ssh框架文件 代码 详细解释 纯净版
一个最简单的SSH框架Struts 、 spring 、 Hibernate 在各层的作用 1 ) struts 负责 web 层 . ActionFormBean 接收网页中表单提交的数据,然后通过 Action 进行处理,再 Forward 到对应的网页。 在 struts-config...