【SSH】用表单提交用户信息到数据库完整一条线

目录

 一、开发环境:

二、页面样式效果:

1、 JSP页面:

2、struts.xml

3、对应的java类:

4、applicationContext.xml

5、Service层中的类:

6、Dao层的类:


 一、开发环境:

开发工具: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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邢美玲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值