-
SSH框架的职责
- SSH的业务流程
- Struts2的业务流程
- Action的三种实现方式
- Spring框架优点
- Spring关于JDBC配置
- Spring关于Hibernate配置
- Spring获取操作事务操作
SSH框架
职责:
从职责上看,该框架可以分为四层:表示层业务逻辑层、数据持久层和域模块层(实体层)。
其中,Struts2作为其框架的基础架构,负责MVC的分离,控制业务跳转。利用hibernate事务对永久层数据进行操作。
业务流程:
jsp(表示层)实现页面交互,request(请求),response(响应) -> Struts通过配置文件将ActionServlet委派给对应的Action进行处理 -> 通过Spring IOC(控制反转)容器提供业务操作类对象(业务层) -> 根据操作类中的相关属性、函数,进行数据持久化操作(数据持久层)
1.Struts2框架:
工作流程:
用户进行页面交互,发送request ——> 根据web.xml文件配置,请求被filterDispatch(调度员)接收 ——> filterDispatch通过询问filterMapping获取所需要访问的Action,并通过IOC(控制反转)的方式注 入给Action ——> 业务逻辑判断完成后返回result ——> 跳转到对应的HTTP界面
Action的三中实现方式:
第一种:定义普通的POJO(Plain Ordinary Java Object,简单的java对象)类。
public class ActionModel{
public boolean excute(){
return SUCCESS;
}
}
第二种:继承 ActionSupport 父类,其中的 user 属性,需要构造出 GETTER(),SETTER()函数:
package action;
import com.opensymphony.xwork2.ActionSupport;
public class MyStrutsAction extends ActionSupport{
private User user;
public void setUser(User user){
this.user = user;
}
public User getUser(){
return this.user;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("使用 excute 方法!");
return super.execute();
}
public String add(){
System.out.println("使用 add 方法!");
return SUCCESS;
}
}
第三种:实现接口 ModelDriver<T>:
在实现该接口的相关对象中,需要实现 getModel()方法,该方法将会返回一个与 T 类型相对应的对象。
在实现该接口的时候,泛型 T 需要一个对象模型,而这个对象模型,需要在实现该接口的类中进行实例化,如:
public class Login implement ModelDriver<User>{
private User user = new User();
@Override
public User getModel(){
return user;
}
}
注意:
在使用ModelDriver<T>的方式进行获取页面请求数据的时候,前端Form表单页面代码中的相关name属性,需要通过相应Action中的所实例化的对象,以 对象.属性 的方式进行定义,否则getModel将会获取不到相关的表单信息。
在使用ActionSupport继承方式,获取Form表单信息的时候,需要将Form表单中的name属性,设置为与对应Action中 SETTER ()对象名称相同。
Spring框架:
-
-
- 降低耦合度(IOC):在spring中,创建的对象是通过依赖、注入的方式进行创建的,这样对象的使用就得到了统一的管理;
- 面向切面(AOP):方便程序进行拦截和监控;
- 事务声明:通过配置就能实现对事务的管理;
-
Spring 对 JDBC 相关信息的配置:
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/project_db"></property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="username" value="root"></property>
<property name="password" value="hyfroot0803"></property>
</bean>
Spring 对 Hibernate 相关信息配置:
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.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>admin/dao/TAdminInfoDao.hbm.xml</value>
<value>admin/dao/TFilesInfo.hbm.xml</value>
<value>admin/dao/TWebInfo.hbm.xml</value>
<value>admin/dao/TStudentInfo.hbm.xml</value>
<value>admin/dao/VStudentJob.hbm.xml</value>
<value>admin/dao/TGetJob.hbm.xml</value>
<value>admin/dao/VSchool.hbm.xml</value></list>
</property>
</bean>
Spring通过注入的方式,获取到事务相关操作对象:
<!-- 系统管理员 的相关方法属性注入 -->
<bean name="adminImpl" class="admin.imple.AdminImple">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 手机客户端学生服务 -->
<bean name="appStuServes" class="android.services.db.impl.AppServiceImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
注意:
在 bean 相对应实现的 class 类中,需要有对应的 SessionFactory sessionFactory 对象的属性,并且还要同时有 set()方法;
关于方法实现类的调用方式:在Spring 中,对象的调用交有 Spring 框架进行创建,所以在需要进行业务处理的Action中,其调用方式为:
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
AdminIo service = (AdminIo)ac.getBean("adminImpl");
通过获取到配置文件,根据所需服务的相关对象,获取到对应的 bean ,记住,在 bean 的转换中,必须使用接口类型。