當前位置:首頁 » 編程語言 » sshjava框架

sshjava框架

發布時間: 2023-08-12 11:30:48

java SSH框架搭建流程

首先,明確spring,struts,hibernate在環境中各自的作用。

struts:
用來響應用戶的action,對應到相應的類進行處理。需要struts對應的包。

hibernate:
用來把實體類對應到資料庫。提供增刪改查的基本操作實現。需要hibernate對應的包以及mysql的jdbc驅動包。

spring:
管理struts:在xml配置文件中為struts的action進行值注入。
管理hibernate:在xml配置文件中配置hibernate的配置信息(dataSource,sessionFactory),即不需要原來的hibernate的xml文件。為hibernate的操作注入sessionfactory屬性值。
需要提供spring對應的包,除此以外,還需要提供一個整合spring與struts的包:truts2-spring-plugin-2.0.11.1.jar

下面就搭建步驟進行詳細說明:
1、新建一個web project,導入包,需要的包放在文件夾sshlib中。
2、修改web.xml的配置信息,內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee "
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd ">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<!-- 下面的listener,是spring提供的,它會在創建時自動查找WEB-INF下的applicationContext.xml文件 ,從而創建spring容器-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- 下面的配置作用是:在MyEclipse中,系統會自動到WEB-INF下尋找 applicationContext.xml文件,而系統
會自動將applicationContext.xml放置到WEB-INF下的classes下,所以會產生找不到applicationContext.xml的錯誤,需要指明applicationContext.xml
的放置位置。這就是下面的信息作用。在Eclipse中也許不需要此配置信息。-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/applicationContext.xml
</param-value>
</context-param>
<!-- 下面的配置信息,用來配置說明使用struts過濾器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
<!--
下面的配置信息用來說明:程序中運行的action放置在哪個包下面,對於list.action的請求,它會自動在這個包下面尋找ListAction.class的類
如果沒有這句話,那麼所有的action請求只能在struts.xml中進行配置。
-->
<init-param>
<param-name>actionPackages</param-name>
<param-value>
com.action
</param-value>
</init-param>
</filter>
<!--
下面的配置表示對於所有請求都交給struts來處理。
-->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

3、接下來用來配置struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd ">

<struts>
<!-- 指定Web應用的默認編碼集。該屬性對於處理中文請求參數非常有用,對於獲取中文請求參數值,應該將該屬性值設置為GBK或者GB2312 當設置該參數為GBK時,相當於調用HttpServletRequest的setCharacterEncoding方法 -->
<constant name="struts.i18n.encoding" value="utf-8" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<!-- 定義攔截器 -->
<interceptor name="crudInterceptor"
class="com.action.CrudInterceptor" />
<interceptor-stack name="appStack">
<interceptor-ref name="crudInterceptor" />
<!-- 下面一行自帶的攔截器必須加上,否則出錯 -->
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<!-- 使用默認攔截器配置Action都需要攔截器堆棧
即所有struts請求都自動先交給攔截器處理。關於攔截器的具體規則在攔截器對應類(com.action.CrudInterceptor)中進行了解釋。
-->
<default-interceptor-ref name="appStack"></default-interceptor-ref>
</package>
</struts>

4、接下來配置applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans "
xmlns:aop="http://www.springframework.org/schema/aop "
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd ">

<!-- 數據源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"
value="org.gjt.mm.mysql.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/user" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<!-- sessionFactory配置 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>com/ssh/User.hbm.xml</value>
</list>
</property>
<!-- 定義sessionFactory的屬性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQL5InnoDBDialect
</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>

<!-- hibernate的類名,屬性名和資料庫之間的對應關系的自定義 com.ynstudio.tools.LocalNamingStrategy -->
<bean id="namingStrategy"
class="org.hibernate.cfg.ImprovedNamingStrategy">
</bean>
<!-- 定義DAO的bean -->
<bean id="userDao"
class="com.ssh.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!--
下面的代碼用來向Action類注入屬性值
-->
<bean id="crudAction" class="com.action.CrudAction">
<property name="userDao" ref="userDao"></property>
</bean>
</beans>

5、上述配置文件完成後,就開始業務邏輯部分。
首先完成hibernate的curd操作部分內容。
設計一個User實體類。包含資料庫中User表的欄位。
新建一個User.hbm.xml文件,實現實體類與資料庫的關聯。內容如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd ">
<hibernate-mapping>
<class name="com.ssh.User" table="user">
<id name="id" column="id">
<generator class="increment" />
</id>
<property name="username" column="username" />
<property name="password" column="password" />
<property name="birthday" column="birthday" />
<property name="email" column="email" />
</class>

</hibernate-mapping>
接下來需要實現操作。
設計一個類繼承了HibernateDaoSupport類。關於HibernateDaoSupport類,請參考相關文檔。

6、完成hibernate的設計後,接下來設計struts的攔截器和struts的action。
struts的攔截器:
package com.action;

import java.lang.reflect.Method;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

/**
* 這個類的是攔截器。
* 對於如下URL:
* http://xxxxx:xxxx//xxx/hello.action?method:list
* actionInvocation.invoke()方法會自動調用名稱了HelloAction類的list方法。
* 在action中根據該方法的返回值決定頁面顯示或跳轉位置。
* result值除了可以再action類中定義,還可以在struts.xml中配置。
* 配置時可採用如下語句:
* <action name="hello" class="crudAction">
* <result name="list">/list.jsp</result>
* <result name="modify">/modify.jsp</result>
* </action>
* 此處需要格外注意的是:class屬性的值,此值是applicationContext.xml中的id。
* 該bean中注入了action類中屬性userDao的值。
* 所以,如果需要使用struts.xml中的action配置,需要使用該id,否則,系統不會給其注入值,最終導致空指針異常。
* @author HeXiaoXing
*
*/
public class CrudInterceptor extends AbstractInterceptor{

public String intercept(ActionInvocation actionInvocation) throws Exception {
/*
*下面代碼演示了獲取請求的類名與方法名的一半方式,但本例中不涉及。 全部注釋掉。
*/
// Object action = actionInvocation.getAction();
// Class actionClass = action.getClass();
// String actionClassName = actionClass.getSimpleName();
// String methodName = actionInvocation.getProxy().getMethod();

return actionInvocation.invoke();
}

}

struts的action,關於此action的全部內容,請參考源程序CrudAction。

7、完成了類設計後,就是頁面的設計,關於頁面的設計,不再一一敘述,給粗源文件,請自行參考。
需要提出的是,在轉向時,url的格式必須是method:方法名。這是約定的,不可以寫成method=方法名。

② JAVA SSH和JFinal框架 有什麼區別(優缺點)

1.SSHIntroction
SSH不是一個框架,而是多個框架(struts+spring+hibernate)的集成,是目前較流行的一種Web應用程序開源集成框架,用於構建靈活、易於擴展的多層Web應用程序。如下圖1所示為SSH的架構圖.

Web層,就是MVC模式裡面的「C」(controller)與「V」(View),負責控制業務邏輯層與頁面的交互與展現,在SSH架構中,Struts充當controller,JSP充當View。
Service層(就是業務邏輯層),負責實現業務邏輯。業務邏輯層以DAO層為基礎,通過對DAO組件的正面模式包裝,完成系統所要求的業務邏輯。
DAO層,負責與持久化對象交互。該層封裝了數據的增、刪、查、改的操作。
PO,持久化對象。通過實體關系映射工具將關系型資料庫的數據映射成對象,很方便地實現以面向對象方式操作資料庫,該系統採用Hibernate作為ORM框架。Spring的作用貫穿了整個中間層,將Web層、Service層、DAO層及PO無縫整合,其數據服務層用來存放數據。

1.1 Struts的優劣勢

1.2 Spring的優劣勢

Spring是一個輕量級的控制反轉(IOC)和面向切面(AOP)的容器框架。

1.3 Hibernate的優劣勢

Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱資料庫。Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。
優點:

1)

Hibernate是JDBC的輕量級的對象封裝,它是一個獨立的對象持久層框架。Hibernate可以用在任何JDBC可以使用的場合,例如Java應用程序的資料庫訪問代碼,DAO介面的實現類,甚至可以是BMP裡面的訪問資料庫的代碼。
2)

Hibernate是一個和JDBC密切關聯的框架,所以Hibernate的兼容性和JDBC驅動,和資料庫都有一定的關系,但是和使用它的Java程序,和AppServer 沒有任何關系,也不存在兼容性問題。
3)

Hibernate不能用來直接和EntityBean 做對比,只有放在整個J2EE項目的框架中才能比較。並且即使是放在軟體整體框架中來看,Hibernate也是做為JDBC的替代者出現的,而不是EntityBean 的替代者出現的,
4)

Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱資料庫。
5)

Hibernate可以應用在任何使用JDBC的場合。
6)

Hibernate使用Java反射機制而不是位元組碼增強程序來實現透明性。
7)

Hibernate的性能非常好,因為它是個輕量級框架。映射的靈活性很出色。
8)

它支持各種關系資料庫,從一對一到多對多的各種復雜關系。
缺點:

1)

它限制所使用的對象模型。(例如,一個持久性類不能映射到多個表)。
2)

較JDBC,Hibernate更消耗內存。
3)

對於小型項目,Hibernate開發效率低。

2.jFinal Introction
jFinal的相關介紹,請參閱http://code.google.com/p/jfinal/

3.TheComparison

不可否認,SSH與jFinal都是非常優秀的架構,兩者都有各自的優點,如何進行取捨取決於項目與項目組成員的實際情況!

註:*表示所在項具有相對優勢
原文地址:http://blog.csdn.net/daijin888888/article/details/50800887

③ java中的ssh框架原理

典型的J2EE三層結構,分為表現層、中間層(業務邏輯層)和數據服務層。三層體系將業務規則、數據訪問及合法性校驗等工作放在中間層處理。客戶端不直接與資料庫交互,而是通過組件與中間層建立連接,再由中間層與資料庫交互。

表現層是傳統的JSP技術,自1999年問世以來,經過多年的發展,其廣泛的應用和穩定的表現,為其作為表現層技術打下了堅實的基礎。

中間層採用的是流行的Spring+Hibernate,為了將控制層與業務邏輯層分離,又細分為以下幾種。

Web層,就是MVC模式裡面的「C」(controller),負責控制業務邏輯層與表現層的交互,調用業務邏輯層,並將業務數據返回給表現層作組織表現,該系統的MVC框架採用Struts。

Service層(就是業務邏輯層),負責實現業務邏輯。業務邏輯層以DAO層為基礎,通過對DAO組件的正面模式包裝,完成系統所要求的業務邏輯。

DAO層,負責與持久化對象交互。該層封裝了數據的增、刪、查、改的操作。

PO,持久化對象。通過實體關系映射工具將關系型資料庫的數據映射成對象,很方便地實現以面向對象方式操作資料庫,該系統採用Hibernate作為ORM框架。

Spring的作用貫穿了整個中間層,將Web層、Service層、DAO層及PO無縫整合,其數據服務層用來存放數據。

一個良好的框架可以讓開發人員減輕重新建立解決復雜問題方案的負擔和精力;它可以被擴展以進行內部的定製化;並且有強大的用戶社區來支持它。框架通常能很好的解決一個問題。然而,你的應用是分層的,可能每一個層都需要各自的框架。僅僅解決UI問題並不意味著你能夠很好的將業務邏輯和持久性邏輯和UI 組件很好的耦合。

不可否認,對於簡單的應用,採用ASP或者PHP的開發效率比採用J2EE框架的開發效率要高。甚至有人會覺得:這種分層的結構,比一般採用JSP + Servlet的系統開發效率還要低。

筆者從一下幾個角度來闡述這個問題。

— 開發效率:軟體工程是個特殊的行業,不同於傳統的工業,例如電器、建築及汽車等行業。這些行業的產品一旦開發出來,交付用戶使用後將很少需要後續的維護。但軟體行業不同,軟體產品的後期運行維護是個巨大的工程,單純從前期開發時間上考慮其開發效率是不理智的,也是不公平的。眾所周知,對於傳統的ASP和 PHP等腳本站點技術,將整個站點的業務邏輯和表現邏輯都混雜在ASP或PHP頁面里,從而導致頁面的可讀性相當差,可維護性非常低。即使需要簡單改變頁面的按鈕,也不得不打開頁面文件,冒著破壞系統的風險。但採用嚴格分層J2EE架構,則可完全避免這個問題。對表現層的修改即使發生錯誤,也絕對不會將錯誤擴展到業務邏輯層,更不會影響持久層。因此,採用J2EE分層架構,即使前期的開發效率稍微低一點,但也是值得的。

— 需求的變更:以筆者多年的開發經驗來看,很少有軟體產品的需求從一開始就完全是固定的。客戶對軟體需求,是隨著軟體開發過程的深入,不斷明晰起來的。因此,常常遇到軟體開發到一定程度時,由於客戶對軟體需求發生了變化,使得軟體的實現不得不隨之改變。當軟體實現需要改變時,是否可以盡可能多地保留軟體的部分,盡可能少地改變軟體的實現,從而滿足客戶需求的變更?答案是——採用優秀的解耦架構。這種架構就是J2EE的分層架構,在優秀的分層架構里,控制層依賴於業務邏輯層,但絕不與任何具體的業務邏輯組件耦合,只與介面耦合;同樣,業務邏輯層依賴於DAO層,也不會與任何具體的DAO組件耦合,而是面向介面編程。採用這種方式的軟體實現,即使軟體的部分發生改變,其他部分也盡可能不要改變。

注意:即使在傳統的硬體行業,也有大量的介面規范。例如PCI介面、顯卡或者網卡,只要其遵守PCI的規范,就可以插入主板,與主板通信。至於這塊卡內部的實現,不是主板所關心的,這也正是面向介面編程的好處。假如需要提高電腦的性能,需要更新顯卡,只要更換另一塊PCI介面的顯卡,而不是將整台電腦拋棄。如果一台電腦不是採用各種介面組合在一起,而是做成整塊,那將意味著即使只需要更新網卡,也要放棄整台電腦。同樣,對於軟體中的一個個組件,當一個組件需要重構時,盡量不會影響到其他組件。實際上,這是最理想的情況,即使採用目前最優秀的架構,也會有或多或少的影響,這也是軟體工程需要努力提高的地方。

技術的更新,系統重構:軟體行業的技術更新很快,雖然軟體行業的發展不快,但小范圍的技術更新特別快。一旦由於客觀環境的變化,不得不更換技術時,如何保證系統的改變最小呢?答案還是選擇優秀的架構。

在傳統的Model 1的程序結構中,只要有一點小的需求發生改變,將意味著放棄整個頁面。或者改寫。雖然前期的開發速度快,除非可以保證以後永遠不會改變應用的結構,否則不要採用Model 1的結構。

採用Hibernate作為持久層技術的最大的好處在於:可以完全以面向對象的方式進行系統分析、系統設計。

DAO模式需要為每個DAO組件編寫DAO介面,同時至少提供一個實現類,根據不同需要,可能有多個實現類。用Spring容器代替DAO工廠

通常情況下,引入介面就不可避免需要引入工廠來負責DAO組件的生成。Spring實現了兩種基本模式:單態模式和工廠模式。而使用Spring可以完全避免使用工廠模式,因為Spring就是個功能非常強大的工廠。因此,完全可以讓Spring充當DAO工廠。

由Spring充當DAO工廠時,無須程序員自己實現工廠模式,只需要將DAO組件配置在Spring容器中,由 ApplicationContext負責管理DAO組件的創建即可。藉助於Spring提供的依賴注入,其他組件甚至不用訪問工廠,一樣可以直接使用 DAO實例。

優點:
Struts跟Tomcat、Turbine等諸多Apache項目一樣,是開源軟體,這是它的一大優點。使開發者能更深入的了解其內部實現機制。
除此之外,Struts的優點主要集中體現在兩個方面:Taglib和頁面導航。Taglib是Struts的標記庫,靈活動用,能大大提高開發效率。另外,就目前國內的JSP開發者而言,除了使用JSP自帶的常用標記外,很少開發自己的標記,或許Struts是一個很好的起點。
關於頁面導航,我認為那將是今後的一個發展方向,事實上,這樣做,使系統的脈絡更加清晰。通過一個配置文件,即可把握整個系統各部分之間的聯系,這對於後期的維護有著莫大的好處。尤其是當另一批開發者接手這個項目時,這種優勢體現得更加明顯。
缺點:
Taglib是Struts的一大優勢,但對於初學者而言,卻需要一個持續學習的過程,甚至還會打亂你網頁編寫的習慣,但是,當你習慣了它時,你會覺得它真的很棒。
Struts將MVC的Controller一分為三,在獲得結構更加清晰的同時,也增加了系統的復雜度。
Struts從產生到現在還不到半年,但已逐步越來越多運用於商業軟體。雖然它現在還有不少缺點,但它是一種非常優秀的J2EE MVC實現方式,如果你的系統准備採用J2EE MVC架構,那麼,不妨考慮一下Struts。

熱點內容
亞洲十帥exo訪問 發布:2025-02-06 06:51:40 瀏覽:98
編程一首詩 發布:2025-02-06 06:45:04 瀏覽:528
驚聲尖笑5下載ftp 發布:2025-02-06 06:33:16 瀏覽:528
共享文件夾讓輸入密碼 發布:2025-02-06 06:32:28 瀏覽:970
收銀伺服器響應出錯什麼意思 發布:2025-02-06 06:24:43 瀏覽:607
sql用戶授權 發布:2025-02-06 06:24:42 瀏覽:677
蘋果手機相冊顯示正在上傳 發布:2025-02-06 06:05:43 瀏覽:542
hadoop下載文件夾 發布:2025-02-06 06:05:08 瀏覽:187
鎧最強配置是哪些 發布:2025-02-06 06:04:22 瀏覽:360
編譯器的製作環境 發布:2025-02-06 05:54:34 瀏覽:829