1. 程式人生 > >SSH整合之配置檔案

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

,並呼叫Action的指定方法。當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>