SSH整合之配置檔案
來自:http://www.cnblogs.com/luoyun/archive/2013/01/03/2843322.html
為web應用提供Struts2支援
1.編輯web應用的web.xml配置檔案,配置Struts2的核心Filter來攔截使用者請求。
由於Web應用是基於請求/響應架構的應用,所以不管哪個MVC Web框架,都需要在web.xml中配置該框架的核心Servlet或Filter,這樣才可以讓該框架介入Web應用中。
<!--定義struts2的核心Filter(過濾器)--> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <!--讓Struts2的核心Filter攔截所有的請求--> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2.如果需要以POST方式提交請求,則定義包含表單資料的JSP頁面。如果僅僅只是以GET方式傳送請求,則無須經過這一步。
3.定義處理使用者請求的Action。
這一步也是所有MVC框架中必不可少的,因為這個Action就是MVC中的C,也就是控制器。該控制器負責呼叫Model裡的方法來處理請求。
MVC框架的底層機制是:核心Servlet或Filter接收到使用者請求後,通常會對使用者請求進行簡單的預處理,例如解析、封裝引數等,然後通過反射來建立Action例項
在MVC框架中,控制器實際上由2個部分共同組成,即攔截所有使用者請求,處理請求的通用程式碼都由核心控制器完成,而實際的業務控制器則由Action處理。
4.配置Action
配置Action就是指定哪個請求對應用哪個Action進行處理,從而讓核心控制器根據該配置來建立合適的Action例項。配置檔案(struts.xml)片段為
<action name="login" class="com.PM.action.LoginAction"> ...
</action>
5.配置處理結果和物理檢視之間的對應關係
當Action處理使用者請求結束後,通常會返回一個處理結果(通常使用簡單的字串就可以了),我們可以認為該名稱是邏輯檢視名,這個邏輯檢視名要和指定物理檢視資源關聯才有價值。所以我們還需要配置處理結果之間的對應關係。配置檔案片段為:
<action name="login" class="com.PM.action.LoginAction"> <!--定義了3個邏輯檢視和物理檢視資源之間的對映--> <result name="input">/login.jsp</result> <result name="error">/error.jsp</result> <result name="success">/welcome.jsp</result> </action>
6.編寫檢視資源
為web應用提供Spring支援
使用Spring的Web應用,無須手動建立Spring容器,而是通過配置檔案,宣告式地建立Spring容器,直接在web.xml檔案中配置建立Spring容器。為了讓Spring容器隨著Web應用的啟動而啟動,藉助於ServletContextListener監聽器即可完成,該監聽器可以在Web應用啟動時回撥自定義方法—該方法可以啟動Spring容器。
Spring提供了一個ContextLoaderListener,該監聽器類實現了ServletContextListener介面。該類可以作為Listener使用,它會在建立時自動查詢WEB-INF/下的applicationContext.xml檔案,因此,如果只有一個配置檔案,並且檔名為applicationContext.xml,則只需在web.xml檔案中增加如下配置片段即可。
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
如果有多個配置檔案需要載入,則考慮使用<context-param.../>元素來確定配置檔案的檔名。ContextLoaderListener載入時,會查詢contextConfigLocation的初始化引數。因此,配置<context-param.../>時應指定引數名為contextConfigLocation,配置檔案web.xml增加如下配置片段。
<!-- 指定多個配置檔案 --> <context-param> <!--引數名為contextConfigLocation --> <param-name>contextConfigLocation</context-param> <!-- 多個配置檔案之間以“,”隔開 –> <param-value>/WEB-INF/daoContext.xml,/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
如果沒有使用 contextConfigLocation指定配置檔案,則Spring自動查詢applicationContext.xml配置檔案;如果有contextConfigLocation,則利用該引數確定的配置檔案。如果無法找到合適的配置檔案,Spring將無法正常初始化。
Spring根據配置檔案建立WebApplicationContext物件,並將其儲存在Web應用的ServletContext中。大部分情況下,應用中的Bean無需感受到ApplicationContext的存在,只要利用ApplicationContext的IoC即可。
Hibernate的使用
Hibernatede 配置資訊(如連線哪個資料庫,以及連線資料庫時所用的連線池、使用者名稱、密碼等詳細資訊)使用配置檔案指定(hibernate.cfg.xml)。配置檔案如下
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property> <property name="connection.ul">jdbc:sqlserver://localhost:1433;DatabaseName=PM</property> <property name="connection.username">sa</property> <property name="connection.password"></property> <!--指定連線池最大連線數--> <property name="hibernate.c3p0.max_size">40</property> <!--指定連線池最小連線數--> <property name="hibernate.c3p0.min_size">1</property> <!--指定資料庫方言--> <property name="dialect">org.hibernate.dialect.SQLServerDialect</property> <!--根據需要自動建立資料表--> <property name="hbm2ddl.auto">update</property> <!--羅列所有的對映檔案--> <mapping resource="com/PM/domain/News.hbm.xml"/> </session-factory> </hibernate-configuration>
Hibernate配置檔案的預設檔名為hibernate.cfg.xml,當程式呼叫Configuration物件的configure()方法時,Hibernate將自動載入該檔案。
完成儲存Member的程式碼如下,如程式碼所示程式需要手動獲取SessionFactory例項。
public class MemberManager { public void main(String[] args){ //例項化Configuration Configuration conf=new Configuration() //下面的方法預設載入hibernate.cfg.xml檔案 .configure(); //以Configuration建立SessionFactory SessionFactory sf=conf.buildSessionFactory(); //建立Session Session sess=sf.openSession(); //開始事務 Transaction tx=sess.beginTransaction(); Member m=new Member(); m.setPassword("123"); //儲存 sess.save(m); //提交事務 tx.commit(); //關閉Session sess.close(); sf.close(); } }
為了使用Hibernate進行持久化操作,通常有如下操作步驟:
- 開發持久化類,由POJO加對映檔案組成。
- 獲取Configuration。
- 獲取SessionFactory。
- 獲取Session,開啟事務。
- 用面向物件的方式操作資料庫。
- 關閉事務,關閉Session。
Spring整合Struts
1.MVC框架與Spring整合的思考
控制器應該如何獲得業務邏輯元件?最容易想到的策略是,直接通過new關鍵字建立業務邏輯元件,然後呼叫業務邏輯元件的方法,根據業務邏輯方法的返回值確定結果。但是這是一種非常差的策略,因為
- 控制器直接建立業務邏輯元件,導致控制器和業務邏輯元件的耦合降低到程式碼層次,不利於高層次解耦。(解耦)
- 控制器不應該負責業務邏輯元件的建立,控制器只是業務邏輯元件的使用者,無須關係業務邏輯元件的實現。(職責明確)
- 每次建立新的業務邏輯元件導致效能下降。(效能)
答案是採用工廠模式,或者服務定位器模式。經典Java EE應用就是使用的服務定位器模式。對於輕量級的Java EE應用,工廠模式是更實際的策略。工廠可以保證該元件的例項只需一個就夠了,可以避免重複例項化造成的系統開銷。採用工廠模式,將控制器與業務邏輯元件的實現分離,從而提供更好的解耦。在採用工廠模式的訪問策略中,所有的業務邏輯元件的建立由工廠負責,業務邏輯元件的執行也由工廠負責。而控制器只需定位工廠例項即可。
如果系統採用Spring框架,則Spring成為最大的工廠。Spring負責業務邏輯元件的建立和生成,並可管理業務邏輯元件的生命週期。可以如此理解:Spring是個效能非常優秀的工廠,可以生產出所有的例項,從業務邏輯元件,到持久層元件,甚至控制器元件。
為了Action訪問Spring的業務邏輯元件,有兩種策略:
- Spring容器負責管理控制器Action,並利用依賴注入為控制器注入業務邏輯元件。
- 利用Spring的自動裝配,Action將會自動從Spring容器中獲取所需的業務邏輯元件。
2.策略一:讓Spring管理控制器
讓Spring容器管理應用中的控制器,可以充分利用Spring的IoC特性,但需配置Struts2的控制器部署在Spring容器中,因此導致配置檔案冗餘。
我們把Action例項交由Spring容器來管理,而不是由Struts2產生的。那麼,核心控制器如何知道呼叫Spring容器中的Action,而不是自行建立Action例項呢?這個工作由Struts2提供的Spring外掛完成。struts2-spring-plugin-xxx.jar檔案,這種JAR包就是Struts2整合Spring的外掛,簡稱Spring外掛,將這個JAR包複製到Web應用的WEB-INF/lib目錄下。
Spring外掛提供了一種偽Action,當我們在struts.xml檔案中配置Action時,通常需要指定class屬性,該屬性就是用於建立Action例項的實現類。但Spring外掛允許我們指定class屬性時,不再指定Action的實際實現類,而是指定Spring容器中的BeanID,這樣Struts2不再自己負責建立Action例項,而是直接通過Spring容器去獲取Action物件。在這種整合策略下,處理使用者請求的Action由Spring外掛負責建立,但Spring外掛建立Action例項時,並不是利用配置Action指定的class屬性來建立該Action例項,而是從Spring容器中取出對應的Bean例項完成建立。
Spring和Struts2整合的關鍵所在是Spring容器為控制器注入業務邏輯元件。
配置檔案struts.xml的相應片段如下:
<!--定義處理使用者請求的Action,該Action的class屬性不是實際處理類, 而是Spring容器中的Bean例項--> <action name="loginPro" class="loginAction"> <result name="error">/error.jsp</result> <result name="success">/welcome.jsp</result> </action>
配置檔案applicationContext.xml的相應片段如下:
<!--定義一個業務邏輯元件,實現類為MyServiceImpl --> <bean id="myService" class="com.PM.service.impl.MyServiceImpl"/> <!--讓Spring容器管理Action例項--> <bean id="loginAciton" class="com.PM.action.LoginAction" scope="prototype"> <!--依賴注入業務邏輯元件--> <property name="ms" ref="myService"/> </bean>
當Spring管理Struts2的Action時,一定要配置scope屬性,因為Action裡包含了請求的狀態資訊,所以必須為每個請求對應一個Action,所以不能將Action例項配置成單例模式。
這種策略充分利用了Spring的IoC特性,是一種較為優秀的解耦策略,這種策略也有一些不足之處。
- Spring管理Action,必須將所有的Action配置在Spring容器中,而struts.xml檔案中還需要配置一個“偽Action”,從而導致配置檔案冗餘,臃腫。
- Action的業務邏輯元件接收容器的注入,將導致程式碼的可讀性降低。
3.策略二:使用自動裝配
在這種策略下,Action還是由Spring外掛建立,Spring外掛在建立Action例項時,利用Spring的自動裝配策略,將對應的業務邏輯元件注入Action例項。這種整合策略配置檔案簡單,但控制器和業務邏輯元件耦合又提升到了程式碼層次,耦合較高。
所謂自動裝配,即讓Spring自動管理Bean與Bean之間的依賴關係,無須使用ref顯示指定依賴Bean。Spring容器會自動檢查XML配置檔案內容,為主調Bean注入依賴Bean。自動裝配可以減少配置檔案的工作量,但會降低依賴關係的透明性和清晰性。此處的自動裝配策略與Spring自身所提供的自動裝配完全相同。
在這種裝配策略下,我們還採用傳統的方式來配置Struts2的Action,配置Action時一樣指定其具體的實現類,配置檔案struts.xml片段如下。因為使用了自動裝配,Spring外掛建立Action例項時,是根據Action的class屬性指定實現類來建立Action例項的。
<!--定義處理使用者請求的Action--> <action name="loginPro" class="com.PM.action.LoginAction"> <result name="error">/error.jsp</result> <result name="success">/welcome.jsp</result> </action>
此時Struts2的配置檔案裡配置的依然是Action的實現類,該配置檔案與不整合Spring時的配置檔案沒有任何區別。整合Spring框架與不整合時當然存在區別,只是這個區別不是在配置檔案中體現,而是在建立該Action例項時體現出來的。如果不整合Spring框架,則Struts2框架負責建立Action例項, 建立成功後就結束;如果整合Spring框架,則當Action例項建立完成後,Spring外掛還會負責將該Action所需的業務邏輯元件注入給該Action例項。Action類程式碼片段如下:
//系統所有的業務邏輯元件 private MyService ms; //設定注入業務邏輯元件所必需的setter方法 public void setMs(MyService ms){ this.ms=ms; }
通過上面的setter方法,可以看出該Action所需的業務邏輯元件名為ms,因此我們必需在配置業務邏輯元件時,指定其id屬性為ms。配置檔案applicationContext.xml片段為:
<!--- 定義一個業務邏輯元件,實現類為MyServiceImpl--> <bean id="ms" class="com.PM.service.impl.MyServiceImpl"/>
因為在配置業務邏輯元件時,指定了該業務邏輯元件的id為ms,則Spring外掛可以在建立Action例項時將該業務邏輯元件注入給Action例項。
在這種整合策略下,Spring外掛負責為Action自動裝配業務邏輯元件,從而可以簡化配置檔案的配置。這種方式也存在如下兩個缺點。
- Action與業務邏輯元件的耦合降低到了程式碼層次,必須在配置檔案中配置Action所需業務邏輯元件同名的業務邏輯元件,不利於高層次解耦。
- Action接受Spring容器的自動裝配,程式碼的可讀性較差。
Spring整合Hibernate
1.管理Hibernate的SessionFactory
當通過Hibernate進行持久層訪問時,必須先獲得SessionFactory物件,它是單個數據庫對映關係編譯後的記憶體映象。大部分情況下,一個Java EE應用對應一個數據庫,即對應一個SessionFactory物件。純粹的Hibernate訪問中,應用程式需要手動建立SessionFactory例項,在實際開發中,我們希望以一種宣告式的方式管理SessionFactory例項,直接以配置檔案來管理SessionFactory例項。Spring的IoC容器正好提供了這種管理方式,它不僅能以宣告式的方式配置SessionFactory例項,也可以充分利用IoC容器的作用,為SessionFactory注入資料來源引用。
<!-- 定義資料來源Bean 使用c3p0資料來源實現--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <!--指定連線資料庫的驅動--> <property name="driverClass" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/> <property name="jdbcUrl" value="jdbc:sqlserver://localhost:1433;DatabaseName=PM;SelectMethod=cursor"/> <property name="user" value="sa"/> <property name="password" value=""/> <property name="maxPoolSize" value="40"/> <property name="minPoolSize" value="1"/> <!--指定連線資料庫連線池的初始化連線數--> <property name="initialPoolSize" value="1"/> <!--指定連線資料庫連線池的連線的最大空閒時間--> <property name="maxIdleTime" value="20"/> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!--用來列出所有的PO對映檔案 --> <property name="mappingResources"> <list> <value>com/PM/domain/Admin.hbm.xml</value> <value>com/PM/domain/Member.hbm.xml</value> <value>com/PM/domain/Department.hbm.xml</value> </list> </property> <!--設定Hibernate屬性 --> <property name="hibernateProperties"> <props> <!--配置連線資料庫的方言--> <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop> <!--設定當建立SessionFactory時,是否根據對映檔案自動建立資料庫表—> <prop key="hibernate.hbm2ddl.auto">create</相關推薦
三大框架(ssh)整合之配置檔案
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
SSH整合之配置檔案
來自:http://www.cnblogs.com/luoyun/archive/2013/01/03/2843322.html 為web應用提供Struts2支援 1.編輯web應用的web.xml配置檔案,配置Struts2的核心Filter來攔截使用者請求。
[ssh] spring-springmvc-hibernate整合之配置檔案
1.web.xml檔案: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:
最新的三大框架整合之配置檔案詳解
一:spring.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://
SSH框架整合的MAVEN專案之配置檔案整合
在最近的SSH框架知識回顧之後,整合了一些所需的配置檔案,並將配置檔案中的配置項記錄下來,避免在以後的開發中進行重複性編碼 首先是web專案的核心配置檔案 web.xml <?xml version="1.0" encoding="UTF-8"?&
整合ssm框架之配置檔案
ssm整合 一.applicationContext.xml 1.配置資料來源 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSou
Hibernate hbm 外來鍵關聯——SSH (Spring+Struts+Hibernate)框架搭建之配置檔案序列六
hibernate管理資料庫後,bbm.xml的關聯配置很重要,<many-to-one> 與<one-to-many>一定要配置正確 繼
三大框架(ssh)學習——配置檔案詳解(一)
配置檔案詳解 指定web應用預設字符集 <constant name="struts.i18n.encoding" value="gbk" /> 此配置相當於: request.setCharacterEncoding(“gbk”); r
三大框架(ssh)學習——配置檔案詳解(二)
多配置檔案實現 專案經常需要多人協作開發,但是如果大家都是用同一個struts.xml檔案,會互相影響不利於開發的正常開展。這樣,我們可以通過<include>元素指定多個配置檔案。 可以在src下面建立多個struts配置檔案。然後再struts.xml中分別引入: str
Nginx入門筆記之————配置檔案結構
Nginx入門筆記之————配置檔案結構 ... #全域性塊 events { #events塊 ... } http #http塊 { ... #http全域性塊 server #
Struts2的入門之配置檔案和傳值問題
struts-base.xml檔案詳解這是struts2的基礎配置檔案必須的 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD
ssh中資料庫配置檔案加密方法
在applicationContext.xml檔案中 <bean id="propertyConfigurer" class="com.common.util.ProPertyPlaceholderConfigure">  
Hibernate的入門之配置檔案和增刪改查
首先使用maven匯入jar包,然後配置主xml檔案 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Confi
暑假專案天地圖SSH整合之架構簡介
(一)SSH簡介 首先,SSH不是一個框架,而是多個框架(struts+spring+hibernate)的整合,是目前較流行的一種Web應用程式開源整合框架,用於構建靈活、易於擴充套件的多
Jenkins持續整合 之 git檔案狀態
Jenkins持續整合 之 git檔案狀態 git 檔案狀態圖 git檔案狀態展示 kangdeMacBook-Air:cedarhd kang$ git status #git檔案狀態查詢 On branch master Your branch is up to date with
SSH遠端登入配置檔案sshd_config詳解
SSH由客戶端和服務端的軟體組成,在客戶端可以使用的軟體有SecureCRT、putty、Xshell等, 而在伺服器端執行的是一個sshd的服務,通過使用SSH,可以把所有傳輸的資料進行加密,而且也能夠 防止dns和IP欺騙,此外,SSH傳輸的資料是經過壓縮的,可以加快傳輸速度 其伺服器端的配
Golang 專案之配置檔案
相信對於很多gopher 而言, 我這篇文章,算比較初級,我是一個一年多經驗的golang程式設計師,有著5年左右的程式設計經驗。 golang 對於初學者還算友好, 寫程式碼很好入門, 但業界對於golang工程與專案的BP卻比較缺少,或者是有很多方為此爭論不休,就比依賴管理工具就搞出了許多個,如 知名的有
RabbitMQ整合Spring配置檔案詳解
一、rabbitmq 配置檔案 在web 專案開發過程中,一般分為生產者配置檔案和消費者配置檔案。 一、準備工作 安裝好rabbitmq,並在專案中增加配置檔案 rabbit.properties 內容如下: rmq.ip=192.188.113.114 rmq.port=
Scrapy 之配置檔案 setting.py
1.爬蟲是否遵守 robots 協議:預設是遵守的;不遵守把第二行註釋刪掉即可 # Obey robots.txt rules # ROBOTSTXT_OBEY = False 2.爬蟲是否讓瀏覽器識別我們的 cookie:預設是識別;不想讓瀏覽器識別,是一種反反爬策略,第
初學ssm框架整合的配置檔案
天才第一步,引入依賴庫。 首先想到web.xml的配置不能少 <!-- 上下文的位置 --> <context-param> <param-name>contextConfigLocation</param-name>