新手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
  • 移動開發(一):使用.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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...