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"/>