锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
Spring 鍜?Struts鐨勬暣鍚堟湁3縐嶆柟寮忥細
1錛氶氳繃Spring鐨凙ctionSupport綾?
2錛氶氳繃Spring鐨凞elegatingRequestProcessor綾?
3錛氶氳繃Spring鐨凞elegatingActionProxy綾?
a: 閫氳繃Spring鐨凙ctionSupport綾?(瀵瑰簲宸ョ▼錛歋pringStruts)
鏂規硶鏄疉ction綾諱笉鍐嶇戶鎵縎truts鐨凙ction鑰屾槸緇ф壙Spring鎻愪緵鐨凙ctionSupport錛?
鐒跺悗鍦ˋction涓幏寰桽pring鐨凙pplicationContext.
緙虹偣鏄疉ction鍜孲pring鑰﹀悎鍦ㄤ竴璧鳳紝鑰屼笖Action涓嶅湪Spring鎺у埗涔嬪唴銆備篃涓嶈兘澶勭悊澶氫釜鍔ㄤ綔鍦ㄤ竴涓狝ction涓殑鎯呭喌銆?
姝ラ錛?
1錛氬姞鍏pring.
2: 鍔犲叆struts
3錛氫慨鏀箂truts閰嶇疆鏂囦歡struts-config.xml鏂囦歡娉ㄥ唽ContextLoaderPlugIn鎻掍歡銆?
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
</plug-in>
4:鍒涘緩Action鏃訛細
(1) 澶勶紝閫氳繃浠?Spring 鐨?ActionSupport 綾昏屼笉鏄?Struts 鐨?Action 綾昏繘琛屾墿灞曪紝鍒涘緩浜嗕竴涓柊鐨?Action銆?
(2) 澶勶紝浣跨敤 getWebApplicationContext() 鏂規硶鑾峰緱涓涓?ApplicationContext銆備負浜嗚幏寰椾笟鍔℃湇鍔★紝鎴戜嬌鐢ㄥ湪
(3) 澶?鏌ユ壘涓涓?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: 閫氳繃Spring鐨凞elegatingRequestProcessor綾?(瀵瑰簲宸ョ▼錛歋pringStruts2)
鏂規硶鏄疭pring鐨凞elegatingRequestProcessor浠f浛Struts鐨凴equstProcessor錛?
鎶奡truts鐨凙ction緗簬Spring鐨勭殑鎺у埗涔嬩笅
緙虹偣鏄紑鍙戜漢鍛樺彲浠ヨ嚜宸卞畾涔塕equestProcessor榪欐牱灝遍渶瑕佹墜宸ユ暣鍚圫truts鍜孲pring銆?
姝ラ錛?
1錛氬姞鍏pring.
2: 鍔犲叆struts
3錛氫慨鏀箂truts閰嶇疆鏂囦歡struts-config.xml鏂囦歡娉ㄥ唽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:鍒涘緩Action鏃訛細
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鐨勮礬寰勫搴?->
<bean name="/login" class="com.yourcompany.struts.action.LogAction">
<property name="logInterface">
<ref bean="loginInterface"/>
</property>
</bean>
</beans>
c: 閫氳繃Spring鐨凞elegatingActionProxy綾?(瀵瑰簲宸ョ▼錛歋pringStruts3)
鏂規硶鏄疭pring鐨凞elegatingActionProxy浠f浛Struts鐨凙ction錛?
鎶奡truts鐨凙ction緗簬Spring鐨勭殑鎺у埗涔嬩笅
榪欑鏂瑰紡鏈鐏墊椿寮哄ぇ銆傚茍涓斿畠鍙互鍒╃敤 Spring AOP 鐗規х殑浼樼偣銆?
姝ラ錛?
1錛氬姞鍏pring.
2: 鍔犲叆struts
3錛氫慨鏀箂truts閰嶇疆鏂囦歡struts-config.xml鏂囦歡娉ㄥ唽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:鍒涘緩Action鏃訛細
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鐨勮礬寰勫搴?->
<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)鐨勬暣鍚堜嬌鐢?
寮鍙戝伐鍏?Eclipse3.1,MyEclipse4.0 ,Tomcat5.0.28,mysql-4.0.18
寮鍙戞楠わ細
1錛氬垱寤簑eb projectSSHlogin 鍔犲叆struts1.1
鍒涘緩loginForm閫夋嫨DynaValidatorForm錛屽姞鍏assword錛寀sername錛屽垱寤簀sp鏂囦歡鎵撲笂閽╋紝灝嗚礬寰勬敼涓?login.jsp錛岀劧鍚庝笅涓姝ワ紝鏀筁oginAction鐨処nput source鏀逛負/login.jsp錛屽姞鍏?<forward name="ok" path="ok.jsp" />鐐瑰嚮瀹屾垚
瀹屾垚鍚庝慨鏀箂truts-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鍜寁alidation.xml鍒癢EB-INF鐩綍涓?鍦╲alidation.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鏂囦歡鐩存帴鑰冧竴涓氨琛屻?
緙栬緫璧勬簮鏂囦歡“ApplicationResources.properties”
澧炲姞浠ヤ笅鍐呭
prompt.username=User Name
prompt.password=User Password
errors.required={0} is required.
淇敼LoginAction.java鏂囦歡鐨別xecute鏂規硶錛屽唴瀹瑰涓?
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();
}
}
濂戒簡錛岀幇鍦ㄥ彲浠ュ惎鍔═omcat榪涜嫻嬭瘯浜嗗鏋滀笉杈撳叆浠諱綍鏁版嵁鑰岀洿鎺ユ彁浜よ〃鍗曠殑璇濆氨鍙互鐪嬪埌鏁堟灉浜嗐?
濂戒簡錛屽鏋滄病鏈変粈涔堥棶棰樼殑璇濆氨緇х畫寰涓嬬湅鍚э紝濡傛灉鏈夐棶棰樼殑璇濆氨寰楀線涓婄湅浜哵_^
2錛氬姞鍏pring妗嗘灦
鍦ㄨ繖閲屾垜灝哠pring鎵鏈夌殑鍖呭叏閮ㄥ姞杞借繘鍘伙紝鍥犱負鎴戣繕涓嶇煡閬撳叿浣撶敤鍒板摢浜涚被錛屽叏閮ㄥ姞榪涘幓鏂逛究鐐?
鍗曢夋閫夌浜屼釜錛岃繖鏍風殑璇濇墍鏈夌殑綾誨簱鍜屾爣絳劇瓑閮藉皢鎷瘋礉鍒伴」鐩腑鍘伙紝榪欐牱鏂逛究浠ュ悗鐨勫竷緗?
涓嬩竴姝ュ悗鏄垱寤洪厤緗枃浠訛紝灝嗘枃浠舵斁鍒?#8220;WebRoot/WEB-INF”鐩綍涓嬶紝鏂囦歡鍚嶇О涓?#8220;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>
榪欓噷灝嗕嬌鐢╯pring鐨勪唬鐞嗗櫒鏉ュAction榪涜鎺у埗
褰撴彁浜ゅ埌/login.do鏄皢鎺у埗鏉冧氦緇欎簡spring錛岀劧鍚庣敱spring鏉ュ喅瀹氭槸鍚﹁漿鍥炲埌struts鐨凙ction
鐜板湪鏉ラ厤緗畇pring
<?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>
濂戒簡錛岀幇鍦ㄥ彲浠ュ惎鍔═omcat榪涜嫻嬭瘯浜嗗鏋滄病鏈変粈涔堥棶棰樼殑璇濆氨緇х畫寰涓嬬湅鍚э紝濡傛灉鏈夐棶棰樼殑璇濆氨寰楀線涓婄湅浜哵_^
3錛氬垱寤篐ibernate妗嗘灦 hiberante2.1
寤虹珛鏁版嵁搴撳湪 榪欓噷鎴戜嬌鐢ㄧ殑鏄痬ysql4.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')
鍦ㄩ厤緗晫闈腑閰嶇疆鏁版嵁搴撶殑榪炴帴閮ㄤ喚錛岄噸瑕佺殑鏄偣鍑婚摼鎺ュ皢jdbc椹卞姩鎷瘋礉鍒發ib鐩綍涓?
浣跨敤MyEclipse鐨勬暟鎹瓺atabase Explorer宸ュ叿鍒涘緩User.hmb.xml銆丄bstractUser.java銆乁ser.java鏄犲皠鏂囦歡
鍒涘緩UserDAO.java銆乁serDAOImp.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鏂囦歡錛屼嬌鐢╱serDao鐨勬柟娉曟潵榪涜鐢ㄦ埛楠岃瘉
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();
}
}
}
鐜板湪鍓╀笅鏈鍚庣殑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>
鐜板湪鍙互榪涜嫻嬭瘯浜嗭紒
娉ㄦ剰瑕佹妸spring-hibernate.jar鎴栬呮妸spring.jar鍔犲埌宸ョ▼lib閲孾b][/b]