Struts2+Spring+Hibernate實現員工管理增刪改查功能(一)之ssh框架整合

来源:http://www.cnblogs.com/smfx1314/archive/2017/11/06/7795837.html
-Advertisement-
Play Games

前言 轉載請標明出處:http://www.cnblogs.com/smfx1314/p/7795837.html 本項目是我寫的一個練習,目的是回顧ssh框架的整合以及使用。項目介紹:此項目主要有前臺管理員通過登錄進入員工管理系統頁面,之後可以對員工列表進行常規的增刪改查。以及部門列表的增刪改查。 ...


前言        轉載請標明出處:http://www.cnblogs.com/smfx1314/p/7795837.html

本項目是我寫的一個練習,目的是回顧ssh框架的整合以及使用。項目介紹:此項目主要有前臺管理員通過登錄進入員工管理系統頁面,之後可以對員工列表進行常規的增刪改查。以及部門列表的增刪改查。IDE使用的是eclipse,個人感覺比較好用,不過最近我正在研究idea,資料庫是mysql,前臺主要以bootstrap為主。

這點是直接摘抄的

struts 控制用的

hibernate 操作資料庫的

spring 用解耦的

Struts 、 spring 、 Hibernate 在各層的作用

1 ) struts 負責 web 層 .

ActionFormBean 接收網頁中表單提交的數據,然後通過 Action 進行處理,再 Forward 到對應的網頁。

在 struts-config.xml 中定義 <action-mapping>, ActionServlet 會載入。

2 ) spring 負責業務層管理,即 Service (或 Manager).

1 . service 為 action 提供統計的調用介面,封裝持久層的 DAO.

2 .可以寫一些自己的業務方法。

3 .統一的 javabean 管理方法

4 .聲明式事務管理

5. 集成 Hiberante

3 ) Hiberante ,負責持久化層,完成資料庫的 crud 操作

hibernate 為持久層,提供 OR/Mapping 。

它有一組 .hbm.xml 文件和 POJO, 是跟資料庫中的表相對應的。然後定義 DAO ,這些是跟資料庫打交道的類,它們會使用 PO 。

在 struts+spring+hibernate 的系統中,

對象的調用流程是: jsp-> Action - > Service ->DAO ->Hibernate 。

數據的流向是 ActionFormBean 接受用戶的數據, Action 將數據從 ActionFromBean 中取出,封裝成 VO 或 PO,

再調用業務層的 Bean 類,完成各種業務處理後再 forward 。而業務層 Bean 收到這個 PO 對象之後,會調用 DAO 介面方法,進行持久化操作。

 

 spring:Aop管理事務控制,IoC管理各個組件的耦合,DaoTemplate作為常規持久層的快速開發模板!

struts:控制層Action,頁面標簽和Model數據,調用業務層

Hibernate:負責資料庫和對象的映射,負責DAO層(Data Access Object:數據訪問)

 

spring整合hibernate和struts,只要在配好了applicationContext.xml,在struts的action中直接調用就可以了。hibernate訪問資料庫的操作都在spring中實現了,spring的調用又在stuts的action中實現了。這個ssh框架就連到了一起……

 

備註

這裡關於mysql的表我就不貼出來了,這個大家可以根據實體類進行創建,我創建的是emp和dept表,他們之間是一對多關係。

另外,關於jsp頁面中的*.js,你可以根據jsp中的路徑自己創建

由於內容過多,今天我先說下ssh框架的整合

接下來讓我們看下目錄結構

 

第一步,導入jar包

 

第二步:我們看下index.jsp頁面

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="IE=edge">
<title>登錄</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery.min.js"></script>
<link rel="stylesheet" href="${pageContext.request.contextPath }/utilLib/bootstrap.min.css" type="text/css" media="screen" />
</head>
<body>
<div class="div_from_aoto" style="width: 500px;">
<form action="${pageContext.request.contextPath }/user_login.action" method="post">
<div class="control-group">
<label class="laber_from">用戶名</label>
<div class="controls" ><input class="input_from" type=text name="username" placeholder=" 請輸入用戶名"></input><p class="help-block"></p></div>
</div>
<div class="control-group">
<label class="laber_from" >密碼</label>
<div class="controls" ><input class="input_from" type=password name="password" placeholder=" 請輸入密碼"></input><p class="help-block"></p></div>
</div>

<div class="control-group">
<label class="laber_from" ></label>
<div class="controls" >
<button class="btn btn-success" style="width:120px;" >確認</button>
</div>
</div>
</form>
</div>
</body>
</html>

上面主要使用了bootstrap框架。當然,登錄頁面我做的比較簡單,你也可以根據自己的感覺去寫效果

第三步是配置文件,首先我們配置web.xml

<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>ssh-day02</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 載入spring監聽器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 載入spring的配置文件applicationContext.xml -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 解決no session問題 -->
<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>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 設置session有效時間 -->
<!-- <session-config>
<session-timeout>1</session-timeout>
</session-config> -->
</web-app>

都是些基本的配置,no session配置是後邊兩張表進行關聯查詢時session提前關閉的問題

第四步:把對應的包類創建出來,方便我們在applicationContext.xml中配置bean實例

接下來我們開始配置applicationContext.xml

主要是創建資料庫連接池,創建sessionFactory ,配置hibernate屬性以及聲明式事務,aop(我這塊沒有用到,就沒有配置),以及bean的實例化配置

<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 整合hibernate -->
<!-- 1.配置資料庫-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ssh2"></property>
<property name="user" value="root"></property>
<property name="password" value="1234"></property>
</bean>
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 數據源 -->
<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>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!-- 配置hibernate映射文件 -->
<property name="mappingResources">
<list>
<value>com/ssh/entity/User.hbm.xml</value>
<value>com/ssh/entity/Emp.hbm.xml</value>
<value>com/ssh/entity/Dept.hbm.xml</value>
</list>
</property>
</bean>
<!-- 配置hibernate事務 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 開啟事務 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

<!-- 配置aop -->

</beans>

然後在引入Struts2的配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="ssh-day02" namespace="/" extends="struts-default">

 

</package>
</struts>

註意,上面把hibernate的配置文件和spring進行了整合,所有沒有單獨創建hibernate的配置文件。

到這裡,ssh的配置基本完成。運行成功就是一個登陸頁面


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 以上代碼是獲取博客文章的列表 ...
  • import urllib import time ##讀取指定的網址 url = [] page = 1 while page <= 11: url_con = urllib.urlopen('http://blog.sina.com.cn/s/articlelist_1193111400_0_' ...
  • 轉載請註明出處:http://www.cnblogs.com/Joanna-Yan/p/7793964.html 前面講到:Java IO編程全解(三)——偽非同步IO編程 NIO,即New I/O,這是官方叫法,因為它相對於之前的I/O類庫是新增的。但是,由於之前老的I/O類庫是阻塞I/O,New ...
  • 背景 在CI腳本中,使用類似如下腳本進行項目編譯的計時,但在執行過程中,有時會出現CI腳本(命名為ci.sh)未完全執行的情況: !/bin/bash e sleep_time=$1 start_time= do sth, this sleep would simulate project comp ...
  • 子類重新實現父類的方法稱重寫;重寫時可以修改訪問許可權修飾符和返回值,方法名和參數類型及個數都不可以修改;僅當返回值為類類型時,重寫的方法才可以修改返回值類型,且必須是父類方法返回值的子類;要麼就不修改,與父類返回值類型相同。那麼,該如何理解呢?為什麼要是父類返回值類型的子類? 還是先看示例,詳見下文 ...
  • 最近在看一些關於游戲引擎的東西,本來是有幾個游戲的小點子,其實實現起來還挺麻煩的,想找個游戲引擎看看能不能碼起來。輾轉之後發現了很多2D引擎,其中國產的要數cocos2dx用的好像是比較廣泛,但是好多人對此褒貶不一。於是下了準備試試到底怎麼樣,無奈搞了一早上,也有點小成果,但是想實現起來貌似還得花點 ...
  • 如何在ArcGIS中將一個欄位下有特征的需要分開的內容分別批量賦值給其他兩個欄位 觀察發現可以通過中間的逗號分為前後兩個部分,然後替換掉每個部分中多餘的內容,即可得到結果分開可以通過Python的截取字元串方法得到,註意python的格式代碼如下://根據逗號分開前後兩部分,分別賦值給兩列//ww列 ...
  • Tornado特點一句話簡介:Tornado是非阻塞式的Web伺服器,速度非常快,每秒可以處理數以千計的鏈接,因此Tornado是實時Web服務的一個理想框架。 一、安裝Tornado使用pip安裝即可:pip install tornado 二、運行Tornado的helloworld所需的基本組 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...