【SSH】用表單提交用戶信息到數據庫完整一條線

開發工具:idea2017

開發環境: JDK8.0;tomcat7.09; mySQL8.0;

利用maven 做struts spring hibernate的jar包管理;實體是通過hibernate生成,映射xml也是。

頁面樣式效果:

完成後效果圖:

 

 JSP頁面:

form表單中,

action標識struts的方法的名稱,在struts,xml中進行配置Action的id,class,method

method:是請求的類型:post

input中的typpe= submit:表示定義提交按鈕。提交按鈕會把表單數據發送到服務器

onsubmit :提交之後調用checkFrom()方法

novalidate: 還不是很明白,是HTML5的一個特性,表示不校驗

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>

對應的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的配置文件,進行注入;

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

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 事務控

制還是有其優勢的。其實,事務是以業務邏輯爲基礎的;一個完整的業務應該對應業務層裏的一個方法;

如果業務操作失敗,則整個事務回滾;所以,事務控制是絕對應該放在業務層的;

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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章