本文目錄一覽:
- 1、學習Java常用的SSH框架是什麼呢?
- 2、java程序中使用SSH框架的有什麼好處
- 3、JAVA SSH框架搭建流程
- 4、在JAVA中 做哪類項目 適合用SSH框架, 哪些不適用, SSH 框架他的優缺點是什麼?
學習Java常用的SSH框架是什麼呢?
Java框架一直是面試的重點,在成熟的大型企業、快速發展的企業和初創企業中都需要掌握Java框架,這樣才能對當前正在開發的系統有一個大致的了解,以便更好地熟悉基礎知識和相關技術。那麼學習Java常用的框架是什麼,應該如何使用呢?下面雲南計算機學習為大家具體介紹。
SSH框架的組合主要由Struts,Spring,Hibernate這3個框架構成,把Struts作為系統整體的基礎結構加以利用,負責MVC的分離,在Struts框架的模型部分,控制業務的跳躍,利用Hibernate框架支持持續性層,利用Spring管理Struts和Hibernate。下文北大青鳥雲南計算機學院具體說明了這三種框架:
Struts框架
Struts框架基本上是基於相當於Servlet的MVC設計模式的Web應用程序框架。MVC設計模式使用Struts2作為控制器(Controller)來建立模型和視圖之間的數據交互。雲南昆明java軟體開發發現它包含Struts1和Struts2兩個版本,兩者的差異實際上還很大,Struts2雖然不是Struts1的更新,但是充分發揮了這兩種技術的優點,它放棄了原來Struts1的缺點,使Web開發更加容易。
Spring框架
我們都應該知道,最傳統的JavaWeb應用程序是通過JSP、Servlet、Javabean實現的,它實現了最基本的MVC分層。該結構存在一些問題,如JSP需要使用符號在頁面中嵌入大量Java代碼,頁面結構混亂,Servlet和Javabean負責大量的跳轉和操作工作,緊密耦合,程序重用低等。昆明計算機學校發現Spring框架的出現解決了這個問題。通過對AOP和IOC兩個特性的加持,所有類之間的這種依賴完全被配置文件所取代,實體bean被很好地管理到容器中,所以耦合大大降低,可重用性大大提高。
Hibernate框架
Hibernate框架是半自動化的永久性層框架,SQL的大幅度削減,代碼的製作,在這個框架中,需要相關作業的時候,不需要注意資料庫表,通過將一個級別永久性化就可以達到添加,刪除和檢查的功能。雲南昆明IT培訓發現這是因為在框架內部實現了很多針對資料庫的操作方法。
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
組件很好的耦合。
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的dao操作注入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=” “
xmlns:xsi=” “
xsi:schemaLocation=”
“
welcome-file-list
welcome-fileindex.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-namecontextConfigLocation/param-name
param-value
/WEB-INF/classes/applicationContext.xml
/param-value
/context-param
!– 下面的配置信息,用來配置說明使用struts過濾器 —
filter
filter-namestruts2/filter-name
filter-class
org.apache.struts2.dispatcher.FilterDispatcher
/filter-class
!–
下面的配置信息用來說明:程序中運行的action放置在哪個包下面,對於list.action的請求,它會自動在這個包下面尋找ListAction.class的類
如果沒有這句話,那麼所有的action請求只能在struts.xml中進行配置。
—
init-param
param-nameactionPackages/param-name
param-value
com.action
/param-value
/init-param
/filter
!–
下面的配置表示對於所有請求都交給struts來處理。
—
filter-mapping
filter-namestruts2/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”
” “
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=” “
xmlns:aop=” “
xmlns:xsi=” “
xsi:schemaLocation=”
“
!– 數據源 —
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
valuecom/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”
” “
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
接下來需要實現dao操作。
設計一個類繼承了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:
*
* 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框架, 哪些不適用, SSH 框架他的優缺點是什麼?
您好,自信成功團隊竭誠為您服務。 你所提到的關於SSH框架的適用範圍,我可以給您個參考。SSH框架的是基於Struts+Spring+Hibernate的組合框架。所以比較適合大中型項目。具體的就是帶後台管理的大中型企業項目。如果從績效方面看的話,這類框架不適合偏小型的項目。 SSH的缺點主要是在資料庫方面的,如果要對資料庫進行修改,擴展,或者改換(從Sqlserver改成Mysql)或其他,就會顯得麻煩了,還有目前國外的大型站還是利用Servlet的。 至於它的優點我就不說了,除了效率還是效率! 如果您還有任何疑問,歡迎隨時聯繫本團隊。謝謝採納。
原創文章,作者:VDFQ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/139882.html