新手SSH基礎框架搭建

来源:http://www.cnblogs.com/yzoro/archive/2016/09/09/5847015.html
-Advertisement-
Play Games

SSH 為 struts+spring+hibernate的一個集成框架,是目前較流行的一種Web應用程式開源框架。 首先我們先瞭解SSH的框架所需的包和基本概念: 一、下麵我們先來瞭解一下struts2,下載地址:http://struts.apache.org/ Struts2作為系統的整體基礎 ...


 SSH 為 struts+spring+hibernate的一個集成框架,是目前較流行的一種Web應用程式開源框架。

 

首先我們先瞭解SSH的框架所需的包和基本概念:

 

一、下麵我們先來瞭解一下struts2,下載地址:http://struts.apache.org/

Struts2作為系統的整體基礎架構,負責MVC的分離,在Struts2框架的模型部分,控制業務跳轉。

1、struts2所需十五個jar包

在你下載的里的struts-2.3.16.1\lib找出以下的包。

 

在相同目錄下,以後我們將action註入到spring中必不可少的struts2-spring-plugin.jar插件

 

 

二、接下來我們瞭解一下spring,下載地址:http://projects.spring.io/spring-framework/

Spring做為管理,支持struts和hibernate基本的功能,當然還有aop切麵處理功能,和集成框架功能。

在你下載的目錄spring-framework-4.2.2.RELEASE-dist\spring-framework-4.2.2.RELEASE\libs下

包比較多,可以全部倒出來,然後把javadoc.jar(幫助文檔)尾碼的,和sources.jar(源碼)尾碼的刪除。

2、spring所需的九個jar包

三、然後我來看一下hibernate 下載地址:http://hibernate.org/orm/downloads/

利用Hibernate框架對持久層(就是把數據保存到可掉電式存儲設備中供之後使用這裡指的是資料庫)提供支持。

3、hibernate需要八個包

在目錄E:hibernate-release-5.2.2.Final\lib\required下

hibernate中還有c3p0的jar包

在目錄hibernate-release-5.2.2.Final\lib\optional\c3p0下

如果用dbcp 需要這兩個包(百度包名下載就可以找到)

c3p0和dbcp的包不衝突可以同時存在,自由切換。

 

 最後不要忘了導入對應資料庫的驅動包:我這裡用的是mysql

下載地址:http://dev.mysql.com/downloads/mysql/

 環境配置完畢。

 

 四、在web.xml配置文件加入Struts2(過濾器)和spring(監聽器)

3.0之後的版本要自己勾上xml文件

在創建項目的時候選擇next,最後一部記得勾上xml

然後分包:

 

在xml文件中加入

頭文件信息

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xsi:schemaLocation
="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">

 

struts2過濾器

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

 

spring監聽器

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

 

寫strut.xml文件

我們先來寫action類

一般我們單獨寫在一個action包中


// 繼承ActionSupport,讓本類具備強大的功能(例如:校驗、國際化等)

public class IndexAction extends ActionSupport {
  
private static final long serialVersionUID = 1L;   private IndexServices is;   //這裡用的是spring註入   public void setIs(IndexServices is) {     this.is = is;   }   //1.每一個對外的方法,都是返回String類型   //2.返回的字元串,要跟配置文件一一對應,用於跳轉   //3.execute是預設方法(當struts.xml沒有指定時,預設執行) // 類似於doGet和doPos   public String execute(){     return "success";   }

 

  當然返回的字元串不是唯一的,我們可以通過if語句控制放回值,通過下麵的配置文件跳轉到不同的頁面

下麵是struts.xml配置文件(struts控制跳轉)

註意這個xml不是寫在WEB-INF下麵,預設寫在src目錄下。當然也可以通過配置<param-name>config</param-name>配置路徑。

頭文件信息:

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

 

<!-- 上面的頭,註意版本,從樣例里複製過來 showcase.war\WEB-INF\src\java\struts.xml -->

 

<struts>
  <!--指定Struts2預設的ObjectFactoryBean,該屬性預設值是spring--!>
  <constant name="struts.objectFactory" value="spring"></constant>

  <!-- 第1步:先定義一個包 -->
  <package name="mypck" extends="struts-default">
    <!-- 第2步:定義一個action,配置跳轉信息 name 類似於Servlet @WebServlet("/IndexServlet")
    http://xxxx/xxx/Index.action http://xxxx/xxx/Index class 對應於自己寫的Action類 當不寫method屬性時,預設調用的是execute -->
    <!--class屬性在action註入spring後和bean中id一一對應 後面spring註入的時候會提到--!>
    <action name="Index" class="myIndexAction" method="execute">
      <!-- /WEB-INF/是防止jsp不經過action就可以訪問-->
      <result name="success">/WEB-INF/jsp/index.jsp</result>
      <result name="error">/WEB-INF/jsp/error.jsp</result>
    </action>
  </package>
</struts>

 

 

接下來寫applicationContext.xml(用於spring註入)

註意applicationcontext.xml和struts.xml位置一樣,都是在src目錄下。

<?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:aop="http://www.springframework.org/schema/aop" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:jee="http://www.springframework.org/schema/jee" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xsi:schemaLocation=" 
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.2.xsd 
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">

 

至於頭文件哪裡來的,我們直接百度:“applicationcontext.xml頭文件” 就可以輕易找到。

接下來寫<bean>如下:

  <!-- 類似於財務部門一樣,類就是錢,所有需要類的實例都由srping去管理 -->
    <bean id="myIndexAction" class="ssh.action.IndexAction" scope="prototype">
        <!-- setIs(myIndexService) -->
        <property name="is" ref="myIndexService"/>
    </bean>
    
    <!-- myIndexService = new service.IndexServiceImpl() -->
    <bean id="myIndexService" class="service.IndexServiceImpl" scope="prototype">
        <property name="id" ref="myIndexDao"/>
    </bean>
    
    <bean id="myIndexDao" class="dao.IndexDaoImpl" scope="prototype">
        <property name="sessionFactory" ref="mySessionFactory"></property>
    </bean>   

 

最後配置Hibernate我們可以在剛剛的applicationContext.xml中編輯,也可以重寫一個hibernate.cfg.xml文件

<bean id="mySessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 註入連接池,包含了資料庫用戶名,密碼等等信息 -->
<property name="dataSource" ref="myDataSource"/>


<property name="hibernateProperties">   <props>     <!--針對特點的關係型資料庫生成優化的SQL -->     <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>     <!--顯示SQL-->     <prop key="hibernate.show_sql">true</prop>     <!-- 格式化SQL -->     <prop key="hibernate.format_sql">true</prop>     <prop key="hibernate.connection.autocommit">false</prop>     <!-- 開機自動生成表 -->     <prop key="hibernate.hbm2ddl.auto">update</prop>   </props> </property>   

  <!--資料庫映射配置文件-->   <property name="mappingResources">     <list>       <!-- 映射文件位置 -->       <value>entity/BookCard.hbm.xml</value>     </list>   </property> </bean>

 

我們先來寫一下entity/BookCard.hbm.xml映射文件

文件位置必須與上面寫的路徑一致

 

 

 

 c3p0

 

<!-- 引入外部屬性文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>

<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  <property name="driverClass" value="${jdbc.driver}"/>
  <property name="jdbcUrl" value="${jdbc.url}"/>
  <property name="user" value="${jdbc.user}"/>
  <property name="password" value="${jdbc.password}"/>
  <!-- 每300秒檢查所有連接池中的空閑連接 -->    
  <property name="idleConnectionTestPeriod" value="300"></property>
  <!-- 最大空閑時間,900秒內未使用則連接被丟棄。若為0則永不丟棄 -->
  <property name="maxIdleTime" value="900"></property>
  <!-- 最大連接數 -->    
  <property name="maxPoolSize" value="2"></property>
</bean>

 

dbcp和c3p0除了寫法和所需包不同其他基本一樣

<bean id="myDataSource" destroy-method="close" class="org.apache.commons.dbcp2.BasicDataSource">
  <property name="driverClassName" value="${jdbc.driver}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.user}"/>
  <property name="password" value="${jdbc.password}"/>
</bean>

 

最後我們寫一下jdbc.properties外部引用文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/CardDB
jdbc.user=root
jdbc.password=kkk

 整個ssh框架就搭建完畢了,我們最後看一下每個文件的具體位置:

 

如果結合列子講會更好一些。本人新手,如有不對的地方請及時指出,多多交流,共同進步,文明留言。

 


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

-Advertisement-
Play Games
更多相關文章
  • 定義:定義一個用於創建對象的介面,讓子類決定實例化哪一個類,工廠方法使一個類的實例化延遲到其子類。 類型:創建類模式 類圖: ! 工廠模式: 首先需要說一下工廠模式。工廠模式根據抽象程度的不同分為三種:簡單工廠模式(也叫靜態工廠模式)、本文所講述的工廠方法模式、以及抽象工廠模式。工廠模式是編程中經常 ...
  • 1.錯誤描述 error LNK2001: 無法解析的外部符號 "__declspec(dllimport) void __cdecl PadSystem::Private::printQString(class std::basic_ostream<wchar_t,struct std::char ...
  • 最近這幾年的前端圈子,由於戲臺一般精彩紛呈,從 MVC 到 MVVM,你剛唱罷我登場。 backbone,angularjs 已成昨日黃花,reactjs 如日中天,同時另一更輕量的 vue 發展勢頭更猛,尤其是即將 release 的2.0版本,號稱兼具了 angularjs 和 reactjs ... ...
  • 應用程式安裝在用戶電腦上,異常處理一直是反覆出現的問題。用戶報障中的描述不足以重現該問題。你不得不猜測,或者只是做猴子測試,以找出其異常出現的根源。 最嚴重的問題是當認為你已經找出了原因並糾正它,但後來您收到新的報障,還是同樣的問題,證明自己只是讓原來的代碼變得更加複雜。 為此您不斷的改進異常日誌 ...
  • 直播平臺整體架構 視頻直播鏈路 視頻流轉換成不同清晰度 不同的端,不同的網路環境,需要不同碼率,以保流暢 播放器的基本實現 SDK在播放器上做層管理 視頻相關技術細節 消息發送流程 不同消息通道的優劣對比 心跳及房間結構 用戶按需分桶 固定分桶與按需分桶對比 關鍵詞及垃圾文本過濾 大促風險控制 平臺... ...
  • 這道題的題目是: 你所在的學校有電腦科學專業和軟體工程專業麽?相關專業的教學計劃和畢業出路有什麼不同?閱讀有關軟體工程和電腦科學的區別的文章,談談你的看法。 我來自天津大學電腦科學技術學院,電腦科學技術專業。選修的這門課是現代軟體工程,由於之前本科我跟隨導師做過一些軟體工程的學術研究,因此很 ...
  • 抽象類&抽象方法 (只能被繼承)(關鍵字 abstract)(繼承關鍵字extends) 抽象類&抽象方法 (只能被繼承)(關鍵字 abstract)(繼承關鍵字extends) 具有抽象方法的類為抽象類, 抽象方法即為沒有內容的空方法,要求子類進行完善內容, 抽象類不能實例化,只能繼承, 通過ex ...
  • 回到目錄 進位 我是一個程式猿,我喜歡簡單的數字,十進位如何,數字太多,有10種數字組成,但由於它廣為人知,所有使用最為廣泛,人們的慣性思維培養了十進位,並說它是最容易被計算的數字,事實上,在電腦里,最簡單的進位是當然是二進位,原因最為直接,因為它只有兩種數字,0和1。 二進位里的最簡單的運算 不 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...