目录
一、开发环境:
开发工具:idea2017
开发环境: JDK8.0;tomcat7.09; mySQL8.0;
利用maven 做struts spring hibernate的jar包管理;实体是通过hibernate生成,映射xml也是。
二、页面样式效果:
完成后效果图:
1、 JSP页面:
form表单中,
action标识struts的方法的名称,在struts,xml中进行配置Action的id,class,method
method:是请求的类型:post
input中的typpe= submit:表示定义提交按钮。提交按钮会把表单数据发送到服务器
onsubmit :提交之后调用checkFrom()方法
novalidate: 还不是很明白,是HTML5的一个特性,表示不校验
2、struts.xml
<struts>
<!-- 告知Struts2运行时使用Spring来创建对象 -->
<constant name="struts.objectFactory" value="spring" />
<package name="default" extends="struts-default" namespace="/">
<action name="userThree_*" class="userAction" method="regist">
</action>
</package>
</struts>
3、对应的java类:
类名userAction
/**
* Created by 邢美玲 on 2020/1/20 17:00.
* 跳转到注册页面的方法
* @Version 1.0
*/
public class UserAction extends ActionSupport implements ModelDriven<UserEntity> {
private UserEntity userEntity = new UserEntity();
public UserEntity getModel() {
return userEntity ;
}
// 注入userService
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
/**
* 用户注册的方法:
*/
public String regist() {
userService.save(userEntity);
return null;
}
}
这里因为要用到userEntity,引入映射后的实体implement : 因为要把这个类作为Action启动类所以exensActionSupport,这样和struts.xml中的<action></action>可以建立联系;
这里是如何注入Service的? 通过applicationContext.xml也就是spring的配置文件,进行注入;
4、applicationContext.xml
<bean id="userAction" class="action.UserAction" scope="prototype">
<!--注入service-->
<property name="userService" ref="userService"/>
</bean>
<!--Service的配置-->
<bean id="userService" class="service.UserService" scope="prototype" >
<!--注入dao-->
<property name="userDao" ref="userDao"/>
</bean>
<!--dao的配置-->
<bean id="userDao" class="dao.UserDao" scope="prototype">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
这里展示的是部分配置,这是Action类中注入Service,Service类中注入Dao,Dao中注入session
5、Service层中的类:
/**
* Created by 邢美玲 on 2020/1/21 9:10.
* @Version 1.0
*/
// 事务管理的注释
@Transactional
public class UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
/*
* 用户注入的方法--邢美玲
* 2020年2月8日
*/
public void save(UserEntity userEntity) {
// 将数据存入到数据库
userEntity.setState(0); // 0:代表用户未激活. 1:代表用户已经激活.
String code = UUIDUtils.getUUID()+ UUIDUtils.getUUID();
userEntity.setCode(code);
userDao.save(userEntity);
}
}
这里注意到Service层中相比其他层,多了一个事务管理的注释,为什么只有这个层有呢?
这一部分,主要是spring做的封装,在spring的配置文件中我们可以看见关于事务的配置:主要是通过spring-tx的jar包提供的。
这是applicationContext.xml中的配置:
<!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- 开启注解事务 --> <!--annotation-driven: 表示支持注解 tx表示支持事务注解在@Transactional--> <tx:annotation-driven transaction-manager="transactionManager"/>
使用 Spring 框架,它对事务做了很好的封装,
通过它的 AOP 配置,可以灵活的配置在任何一层;但是在很多的需求和应用,直接使用 JDBC 事务控
制还是有其优势的。其实,事务是以业务逻辑为基础的;一个完整的业务应该对应业务层里的一个方法;
如果业务操作失败,则整个事务回滚;所以,事务控制是绝对应该放在业务层的;
6、Dao层的类:
/**
* Created by 邢美玲 on 2020/1/21 9:10.
*
* @Version 1.0
*/
public class UserDao extends HibernateDaoSupport {
/* 注册用户信息--邢美玲
* 2020年2月8日
*/
public void save(UserEntity userEntity) {
this.getHibernateTemplate().save(userEntity);
}
}
通过extens hibernateDaoSupport类可以直接用getHibernateTemplate()来对数据进行增删改操作,这个类下实现了很多find,save,update,delete等方法。
小结:这是ssh,,从jsp页到数据层的数据传输,这其中struts可以灵活配置java类和方法,它是java类jsp之间建立联系的枢纽,这其中当然也少不了web下web.xml 配置的struts的过滤。spring中spring-core 和 spring-beans 模块是 Spring 框架的核心模块,包含了控制反转(Inversion of Control, IOC)和依赖注入(Dependency Injection, DI)