1. 程式人生 > >eclipse maven整合SSH專案(實現簡單的連線資料庫實現登入小例子)

eclipse maven整合SSH專案(實現簡單的連線資料庫實現登入小例子)

1、通過eclipse建立一個maven專案

2、配置pom.xml中依賴項,SSH專案所需的jar包

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId
>
org.danni</groupId> <artifactId>maven-ssh</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <!-- 專案依賴版本控制 --> <properties> <spring.version>4.3.9.RELEASE</spring.version> <hibernate.version
>
5.1.10.Final</hibernate.version> <struts.version>2.5.13</struts.version> <mysql.version>5.1.38</mysql.version> <dbcp2.version>2.1.1</dbcp2.version> <servletapi.version>3.1.0</servletapi.version> <jstl.version
>
1.2</jstl.version> </properties> <!-- 專案依賴版本控制 --> <dependencies> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring --> <!-- Hibernate --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.version}</version> </dependency> <!-- Hibernate --> <!-- Strust --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>${struts.version}</version> </dependency> <!-- Struts2整合Spring的外掛包 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>${struts.version}</version> </dependency> <!-- Struts --> <!-- DB --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>${dbcp2.version}</version> </dependency> <!-- DB --> <!-- JSP --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${servletapi.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> <!-- JSP --> </dependencies> </project>

3、新增spring的核心配置applicationContext.xml檔案

(1)資料庫連線池(資料庫連線的四要素)
(2)Session工廠:Hibernate相關屬性配置;配置orm對映檔案地址
(3)事務管理:宣告式事務(註解事務)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
      http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-4.3.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">


    <!-- 資料來源配置(與資料庫連線的四要素的配置) -->
    <!-- 可以按住ctrl+ 點選bean的class裡面看原始碼,可以找到property標籤的name屬性,並且有對應的get和set方法  -->
    <bean class="org.apache.commons.dbcp2.BasicDataSource" id="dataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql:///student"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>


    <!-- session工廠配置 -->
    <bean class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" id="sessionFactory">
        <property name="dataSource" ref="dataSource"></property>

        <!-- 配置hibernate的一些基本屬性 -->
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>

        <!-- 載入hibernate的對映資源(根據不同業務模組分別寫在不同的配置檔案中,方便管理)-->
        <property name="mappingResources">
            <list>
                <!-- 引入自己定義的hibernate的xml檔案 -->

            </list>
        </property>
    </bean>


    <!-- 事務配置 -->
    <bean class="org.springframework.orm.hibernate5.HibernateTransactionManager"
        id="transactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>


    <!-- 註解事務 -->
    <tx:annotation-driven transaction-manager="transactionManager" />


    <!-- 載入spring的xml檔案(自己自定義的一些檔案),一定要記得來新增哦-->
</beans>

4、新增web.xml中的配置資訊

a)應用程式監聽器(application),監聽applicationContext.xml檔案
b)sesssion的處理過濾器openSessionInViewFilter
c)struts的核心攔截器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
    <display-name>maven-ssh</display-name>

    <!-- spring上下文配置 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>


    <!-- 應用程式監聽 :載入ContextLoaderListener屬性的值 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>


    <!-- Hibernate和Spring整合時,如果採用延遲載入Lazy=true,讀取資料完畢以後會關閉session,這個時候還未將資料呈現在頁
    面,需要使用 openSessionInViewFilter -->
    <!-- 注意過濾器載入順序 -->
    <filter>
        <filter-name>openSessionInViewFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>openSessionInViewFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


    <!-- Struts核心攔截器 -->
    <filter>
        <filter-name>Struts</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Struts</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
</web-app>

5、使用JBOSS自動生成工具,自動生成實體類和dao層檔案和對映檔案

可以去看我這篇文章:http://blog.csdn.net/qq_36748278/article/details/78078919
不過在這裡就不需要生成hibernate.cfg.xml檔案了,因為我們會在spring容器中配置。(或者直接刪除hibernate.cfg.xml檔案也行)

在applicationContext.xml引入配置檔案:(怕你們不知道在哪裡引入,我把這一段都貼出來了,在屬性名為mappingResources裡面配置)

<!-- session工廠配置 -->
  <bean class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" id="sessionFactory">
      <property name="dataSource" ref="dataSource"></property>

      <!-- 配置hibernate的一些基本屬性 -->
      <property name="hibernateProperties">
          <props>
              <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
              <prop key="hibernate.show_sql">true</prop>
          </props>
      </property>

      <!-- 載入hibernate的對映資源(根據不同業務模組分別寫在不同的配置檔案中,方便管理)-->
      <property name="mappingResources">
          <list>
                <!-- 引入自己定義的hibernate的xml檔案 -->
                <value>hibernateXMLS/Admins.hbm.xml</value>
                <value>hibernateXMLS/Department.hbm.xml</value>
                <value>hibernateXMLS/Employee.hbm.xml</value>
          </list>
      </property>
</bean>

基本上框架就搭建好了。下面就開始你的專案編碼了,我這裡以一個簡單的登入做個示範:

修改dao層下的所有檔案:

這裡寫圖片描述
修改後:

private SessionFactory sessionFactory;

public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}

public SessionFactory getSessionFactory() {
    return sessionFactory;
}

6、新增業務介面

這裡寫圖片描述

AdminsService .java

public interface AdminsService {
    public void login(Admins admins);
    public void delete(int id);
    public void update(Admins admins);
    public List<Admins> query();
    public Admins queryById(int id);
}

7、新增業務實現類(並在業務實現類中,使用註解來實現事務管理)

在AdminsHome中新增login方法:

public Admins login(Admins admins){
        Admins returnAdmin = (Admins) sessionFactory.getCurrentSession().createQuery("from Admins a where a.adminname = ? and a.adminpwd = ?")
        .setString(0, admins.getAdminname())
        .setString(1, admins.getAdminpwd())
        .uniqueResult();
        return returnAdmin;
    }


這裡寫圖片描述

AdminsServiceImpl.java:

@Transactional
public class AdminsServiceImpl implements AdminsService {
    private AdminsHome adminsHome;

    // 採用struts屬性驅動,必須設定set和get方法
    public AdminsHome getAdminsHome() {
        return adminsHome;
    }

    public void setAdminsHome(AdminsHome adminsHome) {
        this.adminsHome = adminsHome;
    }

    //登入方法
    @Override
    public Admins login(Admins admins) {
        return adminsHome.login(admins);
    }

    @Override
    public void delete(int id) {

    }

    @Override
    public void update(Admins admins) {

    }

    @Override
    public List<Admins> query() {
        return null;
    }

    @Override
    public Admins queryById(int id) {
        return null;
    }

}

8、建立struts控制器 (AccountsAction),在控制器中呼叫業務方法

這裡寫圖片描述
AdminsAction .java:

public class AdminsAction {

    private Admins admins;
    private AdminsService adminsService;

    public Admins getAdmins() {
        return admins;
    }

    public void setAdmins(Admins admins) {
        this.admins = admins;
    }

    public AdminsService getAdminsService() {
        return adminsService;
    }

    public void setAdminsService(AdminsService adminsService) {
        this.adminsService = adminsService;
    }

    // 去login.jsp頁面
    public String toLogin() {
        return "tologin";
    }

    // 登入方法
    public String doLogin() {
        admins = adminsService.login(admins);
        if (admins == null) {
            return "login";
        }
        return "loginSuccess";
    }
}

9、新增檢視頁面

這裡寫圖片描述

login.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="admin_doLogin" method="post">
        <table>
            <tr>
                <td>account:</td>
                <td><input type="text" name="admins.adminname"></td>
            </tr>
            <tr>
                <td>password:</td>
                <td><input type="password" name="admins.adminpwd"></td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="login"></td>
            </tr>
        </table>
    </form>
</body>
</html>

10、配置struts.xml檔案,新增action對映以及結果處理

(1):配置struts.xml檔案
這裡寫圖片描述

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <!-- 開啟開發者模式 -->
    <constant name="struts.devMode" value="true"></constant>

    <!-- 熱載入配置 每次配置檔案更改後自動重新載入 -->
    <constant name="struts.configuration.xml.reload" value="true"></constant>

</struts>


(2):配置admins.xml檔案
這裡寫圖片描述

admins.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <package name="org.danni.model.entity.Admins" namespace="/" extends="struts-default">
        <action name="admin_*" class="org.danni.web.action.adminAction"
            method="{1}">
            <result name="tologin">/WEB-INF/content/login.jsp</result>
            <result name="loginSuccess">/WEB-INF/content/index.jsp</result>
            <allowed-methods>toLogin,doLogin</allowed-methods>
        </action>
    </package>
</struts>

(3)在struts.xml中引入admins.xml

<!--引入admins.xml-->
<include file="strutsxmls/admins.xml"></include>

12、將業務相關javaBean交給spring容器管理applicationContext.xml(注意依賴關係)

     (1)action實現類:依賴spring容器注入controller
     (2)service業務實現類:依賴controller注入service
     (3)dao資料底層實現類:依賴service注入dao
     (4)session工廠實現類:依賴dao注入工廠
     (5)注意一層一層依賴關係環環相扣

(1):編寫與admins相關的bean

這裡寫圖片描述
admins.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
      http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-4.3.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

    <bean class="org.danni.web.action.AdminsAction" id="adminsAction">
        <property name="adminsService" ref="adminsService"></property>
    </bean>

    <bean class="org.danni.model.service.impl.AdminsServiceImpl" id="adminsService">
        <property name="adminsHome" ref="adminsHome"></property>
    </bean>

    <!--依賴action,注入service-->
    <bean class="org.danni.model.dao.AdminsHome" id="adminsHome">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
</beans>

(2)在applicationContext.xml中引入admins.xml

<!-- 載入spring的xml檔案(自己自定義的一些檔案)-->
<import resource="springxmls/admins.xml"/>

13、修改struts.xml檔案中action實現類的路徑

這裡寫圖片描述