小虎j2ee歷程

          小虎的小小收集

          常用鏈接

          統(tǒng)計(jì)

          最新評(píng)論

          struts與spring整合(很久以前)

          Spring 和 Struts的整合使用
          Spring 和 Struts的整合有3種方式:
          1:通過(guò)Spring的ActionSupport類
          2:通過(guò)Spring的DelegatingRequestProcessor類
          3:通過(guò)Spring的DelegatingActionProxy類


          a: 通過(guò)Spring的ActionSupport類:(對(duì)應(yīng)工程:SpringStruts)
          方法是Action類不再繼承Struts的Action而是繼承Spring提供的ActionSupport,
          然后在Action中獲得Spring的ApplicationContext.
          缺點(diǎn)是Action和Spring耦合在一起,而且Action不在Spring控制之內(nèi)。也不能處理多個(gè)動(dòng)作在一個(gè)Action中的情況。

          步驟:
          1:加入spring.
          2: 加入struts
          3:修改struts配置文件struts-config.xml文件注冊(cè)ContextLoaderPlugIn插件。
          <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
          <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
          </plug-in>
          4:創(chuàng)建Action時(shí):
          (1) 處,通過(guò)從 Spring 的 ActionSupport 類而不是 Struts 的 Action 類進(jìn)行擴(kuò)展,創(chuàng)建了一個(gè)新的 Action。
          (2) 處,使用 getWebApplicationContext() 方法獲得一個(gè) ApplicationContext。為了獲得業(yè)務(wù)服務(wù),我使用在
          (3) 處 查找一個(gè) Spring bean。
          //(1)
          public class LoginAction extends ActionSupport {

          public ActionForward execute(
          ActionMapping mapping,
          ActionForm form,
          HttpServletRequest request,
          HttpServletResponse response) {
          LoginForm loginForm = (LoginForm) form;
          // TODO Auto-generated method stub
          //(2)
          ApplicationContext ac = this.getWebApplicationContext();//獲得ApplicationContext
          //(3)
          LoginInterface li = (LoginInterface)ac.getBean("loginInterface");//獲得Bean
          boolean you = li.checkUser(loginForm.getName(),loginForm.getPassword());
          if(you){
          request.setAttribute("msg","welcome");
          return mapping.findForward("show");
          }
          else{
          request.setAttribute("msg","failed");
          return mapping.findForward("show");
          }
          }

          }
          applicationContext.xml:
          <beans>
          <bean id="loginInterface" class="spring.LoginImp"/>

          </beans>

          b: 通過(guò)Spring的DelegatingRequestProcessor類:(對(duì)應(yīng)工程:SpringStruts2)
          方法是Spring的DelegatingRequestProcessor代替Struts的RequstProcessor,
          把Struts的Action置于Spring的的控制之下
          缺點(diǎn)是開發(fā)人員可以自己定義RequestProcessor這樣就需要手工整合Struts和Spring。

          步驟:
          1:加入spring.
          2: 加入struts
          3:修改struts配置文件struts-config.xml文件注冊(cè)ContextLoaderPlugIn插件。
          <struts-config>
          <form-beans >
          <form-bean name="loginForm" type="com.yourcompany.struts.form.LoginForm" />
          </form-beans>

          <action-mappings >
          <action
          attribute="loginForm"
          input="/login.jsp"
          name="loginForm"
          path="/login"
          scope="request"
          type="com.yourcompany.struts.action.LogAction">
          <forward name="show" path="/show.jsp" />
          </action>

          </action-mappings>
          <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"></controller>
          <message-resources parameter="com.yourcompany.struts.ApplicationResources" />
          <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
          <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
          </plug-in>
          </struts-config>
          4:創(chuàng)建Action時(shí):
          public class LogAction extends Action {
          private LoginInterface logInterface;

          public ActionForward execute(
          ActionMapping mapping,
          ActionForm form,
          HttpServletRequest request,
          HttpServletResponse response) {
          LoginForm loginForm = (LoginForm) form;
          // TODO Auto-generated method stub
          boolean you = logInterface.checkUser(loginForm.getName(),loginForm.getPassword());
          if(you){
          request.setAttribute("msg","welcome");
          return mapping.findForward("show");
          }
          else{
          request.setAttribute("msg","failed");
          return mapping.findForward("show");
          }
          }
          public void setLogInterface(LoginInterface logInterface) {
          this.logInterface = logInterface;
          }

          }

          applicationContext.xml:
          <beans>
          <bean id="loginInterface" class="spring.LoginImp"/>
          <!--要和Struts的路徑對(duì)應(yīng)-->
          <bean name="/login" class="com.yourcompany.struts.action.LogAction">
          <property name="logInterface">
          <ref bean="loginInterface"/>
          </property>
          </bean>
          </beans>
          c: 通過(guò)Spring的DelegatingActionProxy類:(對(duì)應(yīng)工程:SpringStruts3)
          方法是Spring的DelegatingActionProxy代替Struts的Action,
          把Struts的Action置于Spring的的控制之下
          這種方式最靈活強(qiáng)大。并且它可以利用 Spring AOP 特性的優(yōu)點(diǎn)。

          步驟:
          1:加入spring.
          2: 加入struts
          3:修改struts配置文件struts-config.xml文件注冊(cè)ContextLoaderPlugIn插件。
          <struts-config>
          <data-sources />
          <form-beans >
          <form-bean name="loginForm" type="com.yourcompany.struts.form.LoginForm" />
          </form-beans>
          <action-mappings >
          <action
          attribute="loginForm"
          input="/form/login.jsp"
          name="loginForm"
          path="/login"
          scope="request"
          type="org.springframework.web.struts.DelegatingActionProxy">
          <forward name="show" path="/show.jsp" />
          </action>
          </action-mappings>
          <message-resources parameter="com.yourcompany.struts.ApplicationResources" />
          <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
          <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
          </plug-in>
          </struts-config>

          4:創(chuàng)建Action時(shí):
          public class LogAction extends Action {
          private LoginInterface logInterface;

          public ActionForward execute(
          ActionMapping mapping,
          ActionForm form,
          HttpServletRequest request,
          HttpServletResponse response) {
          LoginForm loginForm = (LoginForm) form;
          // TODO Auto-generated method stub
          boolean you = logInterface.checkUser(loginForm.getName(),loginForm.getPassword());
          if(you){
          request.setAttribute("msg","welcome");
          return mapping.findForward("show");
          }
          else{
          request.setAttribute("msg","failed");
          return mapping.findForward("show");
          }
          }
          public void setLogInterface(LoginInterface logInterface) {
          this.logInterface = logInterface;
          }

          }

          applicationContext.xml:
          <beans>
          <bean id="loginInterface" class="spring.LoginImp"/>
          <!--要和Struts的路徑對(duì)應(yīng)-->
          <bean name="/login" class="com.yourcompany.struts.action.LogAction">
          <property name="logInterface">
          <ref bean="loginInterface"/>
          </property>
          </bean>
          </beans>


          -----------------------------------------------------------------------------------------------

          Struts(1.1) + Spring + Hibernate(2.1)的整合使用



          開發(fā)工具:Eclipse3.1,MyEclipse4.0 ,Tomcat5.0.28,mysql-4.0.18


          開發(fā)步驟:
          1:創(chuàng)建web projectSSHlogin 加入struts1.1

          創(chuàng)建loginForm選擇DynaValidatorForm,加入password,username,創(chuàng)建jsp文件打上鉤,將路徑改為/login.jsp,然后下一步,改LoginAction的Input source改為/login.jsp,加入 <forward name="ok" path="ok.jsp" />點(diǎn)擊完成

          完成后修改struts-config.xml文件加入
          <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
          <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
          </plug-in>
          拷貝validator-rules.xml和validation.xml到WEB-INF目錄中 在validation.xml文件中加入
          <form-validation>
          <formset>
          <form name="loginForm">
          <field property="username" depends="required">
          <arg0 key="prompt.username" />
          </field>
          <field property="password" depends="required">
          <arg0 key="prompt.password" />
          </field>
          </form>
          </formset>
          </form-validation>
          validator-rules.xml文件直接考一個(gè)就行。
          編輯資源文件“ApplicationResources.properties”
          增加以下內(nèi)容
          prompt.username=User Name
          prompt.password=User Password
          errors.required={0} is required.


          修改LoginAction.java文件的execute方法,內(nèi)容如下
          public ActionForward execute(
          ActionMapping mapping,
          ActionForm form,
          HttpServletRequest request,
          HttpServletResponse response) {
          DynaValidatorForm loginForm = (DynaValidatorForm) form;
          String username=loginForm.getString("username");
          String password=loginForm.getString("password");
          if(username.equals("test")||password.equals("test")){
          return mapping.findForward("indexGo");
          }else{
          return mapping.getInputForward();
          }
          }
          好了,現(xiàn)在可以啟動(dòng)Tomcat進(jìn)行測(cè)試了如果不輸入任何數(shù)據(jù)而直接提交表單的話就可以看到效果了。

          好了,如果沒(méi)有什么問(wèn)題的話就繼續(xù)往下看吧,如果有問(wèn)題的話就得往上看了^_^

          2:加入Spring框架
          在這里我將Spring所有的包全部加載進(jìn)去,因?yàn)槲疫€不知道具體用到哪些類,全部加進(jìn)去方便點(diǎn)

          單選框選第二個(gè),這樣的話所有的類庫(kù)和標(biāo)簽等都將拷貝到項(xiàng)目中去,這樣方便以后的布署
          下一步后是創(chuàng)建配置文件,將文件放到“WebRoot/WEB-INF”目錄下,文件名稱為“applicationContext.xml”


          配置struts-config.xml文件,添加(spring)的插件

          <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
          <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
          </plug-in>


          修改LoginAction配置

          原:
          <action
          attribute="loginForm"
          input="/login.jsp"
          name="loginForm"
          path="/login"
          scope="request"
          validate="true"
          type="com.test.struts.action.LoginAction" >
          <forward name="ok" path="ok.jsp" />
          </action>

          </action-mappings>

          改為:
          <action
          attribute="loginForm"
          input="/login.jsp"
          name="loginForm"
          path="/login"
          scope="request"
          validate="true"
          type="org.springframework.web.struts.DelegatingActionProxy">
          <forward name="ok" path="ok.jsp" />
          </action>
          </action-mappings>


          這里將使用spring的代理器來(lái)對(duì)Action進(jìn)行控制

          當(dāng)提交到/login.do是將控制權(quán)交給了spring,然后由spring來(lái)決定是否轉(zhuǎn)回到struts的Action

          現(xiàn)在來(lái)配置spring

          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

          <beans>
          <bean name="/login" class="com.test.struts.action.LoginAction" singleton="false"></bean>
          </beans>

          好了,現(xiàn)在可以啟動(dòng)Tomcat進(jìn)行測(cè)試了如果沒(méi)有什么問(wèn)題的話就繼續(xù)往下看吧,如果有問(wèn)題的話就得往上看了^_^


          3:創(chuàng)建Hibernate框架 hiberante2.1

          建立數(shù)據(jù)庫(kù)在 這里我使用的是mysql4.1.18

          CREATE TABLE `user` (
          `ID` int(11) NOT NULL auto_increment,
          `USERNAME` varchar(50) NOT NULL default '',
          `PASSWORD` varchar(50) NOT NULL default '',
          PRIMARY KEY (`ID`)
          ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

          添加記錄 insert into user (USERNAME,PASSWORD) values ('test','test')

          在配置界面中配置數(shù)據(jù)庫(kù)的連接部份,重要的是點(diǎn)擊鏈接將jdbc驅(qū)動(dòng)拷貝到lib目錄中
          使用MyEclipse的數(shù)據(jù)Database Explorer工具創(chuàng)建User.hmb.xml、AbstractUser.java、User.java映射文件

          創(chuàng)建UserDAO.java、UserDAOImp.java
          UserDAO.java:

          public interface UserDAO {

          public abstract boolean isValidUser(String username, String password);

          }

          UserDAOImp.java:

          import java.util.List;

          import org.springframework.orm.hibernate.support.HibernateDaoSupport;

          public class UserDAOImp extends HibernateDaoSupport implements UserDAO {

          private static String hql = "from User u where u.username=? and password=?";

          public boolean isValidUser(String username, String password) {

          String[] userlist=new String[2];
          userlist[0]=username;
          userlist[1]=password;

          List userList = this.getHibernateTemplate().find(hql,userlist);

          if (userList.size() > 0) {

          return true;

          }

          return false;

          }

          }



          修改LoginAction.java文件,使用userDao的方法來(lái)進(jìn)行用戶驗(yàn)證
          package com.test.struts.action;

          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          import org.apache.struts.action.Action;
          import org.apache.struts.action.ActionForm;
          import org.apache.struts.action.ActionForward;
          import org.apache.struts.action.ActionMapping;
          import org.apache.struts.validator.DynaValidatorForm;

          import com.test.UserDAO;

          public class LoginAction extends Action {

          private UserDAO userDAO;

          public UserDAO getUserDAO() {
          return userDAO;
          }

          public void setUserDAO(UserDAO userDAO) {
          this.userDAO = userDAO;
          }

          public ActionForward execute(ActionMapping mapping, ActionForm form,
          HttpServletRequest request, HttpServletResponse response) {
          DynaValidatorForm loginForm = (DynaValidatorForm) form;
          // TODO Auto-generated method stub
          String username = (String) loginForm.get("username");
          String password = (String) loginForm.get("password");
          loginForm.set("password", null);
          if (userDAO.isValidUser(username,password)) {
          return mapping.findForward("ok");
          } else {
          return mapping.getInputForward();
          }
          }
          }


          現(xiàn)在剩下最后的spring配置了
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

          <beans>
          <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
          <property name="driverClassName">
          <value>com.mysql.jdbc.Driver</value>
          </property>
          <property name="url">
          <value>jdbc:mysql://localhost:3306/newdb</value>
          </property>
          <property name="username">
          <value>root</value>
          </property>
          <property name="password">
          <value></value>
          </property>
          </bean>

          <!-- 配置sessionFactory, 注意這里引入的包的不同 -->
          <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
          <property name="dataSource">
          <ref local="dataSource" />
          </property>
          <property name="mappingResources">
          <list>
          <value>hibernate/po/St.hbm.xml</value>
          </list>
          </property>
          <property name="hibernateProperties">
          <props>
          <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
          <prop key="hibernate.show_sql">true</prop>
          </props>
          </property>
          </bean>

          <bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
          <property name="sessionFactory">
          <ref local="sessionFactory" />
          </property>
          </bean>

          <bean id="userDAO" class="com.test.UserDAOImp">
          <property name="sessionFactory">
          <ref local="sessionFactory" />
          </property>
          </bean>

          <bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
          <property name="transactionManager">
          <ref bean="transactionManager" />
          </property>
          <property name="target">
          <ref local="userDAO" />
          </property>
          <property name="transactionAttributes">
          <props>
          <prop key="insert*">PROPAGATION_REQUIRED</prop>
          <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
          <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
          </props>
          </property>
          </bean>

          <bean name="/login" class="com.test.struts.action.LoginAction" singleton="false">
          <property name="userDAO">
          <ref bean="userDAOProxy" />
          </property>
          </bean>
          </beans>
          !!!
          配置sessionFactory也可以寫成:

          <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
          <property name="configLocation">
          <value>hibernate.cfg.xml</value>
          </property>
          </bean>

          現(xiàn)在可以進(jìn)行測(cè)試了!


          注意要把spring-hibernate.jar或者把spring.jar加到工程lib里[b][/b]

          posted on 2007-12-15 15:25 小虎虎 閱讀(279) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 营口市| 苏尼特右旗| 水城县| 东至县| 厦门市| 旌德县| 寿阳县| 沭阳县| 中牟县| 佛坪县| 文登市| 漯河市| 来宾市| 色达县| 桂林市| 登封市| 象山县| 安西县| 兴山县| 徐闻县| 石台县| 赞皇县| 晴隆县| 尤溪县| 敦煌市| 开封县| 昌吉市| 五莲县| 施甸县| 馆陶县| 淅川县| 噶尔县| 汾西县| 漳浦县| 扎囊县| 玛纳斯县| 响水县| 天长市| 京山县| 星子县| 淮滨县|