Struts+Spring+Hibernate練習(完整)
Posted on 2005-11-06 11:04 oksonic 閱讀(203491) 評論(246) 編輯 收藏 所屬分類: java<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>
prompt.password=User Password
增加以下內(nèi)容
prompt.password=登錄密碼
<action
attribute="loginForm"
input="/login.jsp"
name="loginForm"
path="/login"
scope="request"
validate="true"
type="com.test.struts.action.LoginAction" />
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();
}
}
<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
</plug-in>
attribute="loginForm"
input="/login.jsp"
name="loginForm"
path="/login"
scope="request"
validate="true"
type="com.test.struts.action.LoginAction" />
attribute="loginForm"
input="/login.jsp"
name="loginForm"
path="/login"
scope="request"
validate="true"
type="org.springframework.web.struts.DelegatingActionProxy" />
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<bean name="/login" class="com.test.struts.action.LoginAction" singleton="false"></bean>
`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;
UserDAO.java
public interface UserDAO {
public abstract boolean isValidUser(String username, String password);
}
UserDAOImp.java
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.test.Hibernate.SessionFactory;
public class UserDAOImp extends HibernateDaoSupport implements UserDAO {
private SessionFactory sessionFactory;
private static String hql = "from User u where u.username=? ";
public boolean isValidUser(String username, String password) {
List userList = this.getHibernateTemplate().find(hql, username);
if (userList.size() > 0) {
return true;
}
return false;
}
}
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.validator.DynaValidatorForm;
public class LoginAction extends Action {
private UserDAO userDAO;
return userDAO;
}
this.userDAO = userDAO;
}
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("indexGo");
} else {
return mapping.getInputForward();
}
}
綠色字體為修改部份
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<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/test</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>com/test/Hibernate/User.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>
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<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>
<property name="userDAO">
<ref bean="userDAOProxy" />
</property>
</bean>
</beans>
Feedback
查了很久,原來是表名不能用user, user 為 SQL SERVER 的關鍵字
碰到同樣問題的 把表名改掉就OK了,
感謝樓主的動畫
<property name="mappingResources">
<list>
<value>com/yourcompany/hibernate/Users.hbm.xml</value>
</list>
</property>
這段代碼 就 會找不到action
好不郁悶
MyEclipse 5.5.0 Milestone 1
Spring 2.0
Struts 1.2
hibernate 3.0
mysql 5.0
驅(qū)動 mysql-connector-java-3.2.0-alpha-bin
麻煩摟主 看看
new FileSystemXmlApplicationContext(
"src/applicationContext.xml");
EchoMessageDAO echoMessage =
(EchoMessageDAO) context.getBean("EchoMessageDAO");
EchoMessage me = new EchoMessage();
me.setMsg("heeelo;;;;;");
echoMessage.save(me);
以上語句,拋出異常:
2007-05-12 19:29:03,703 ERROR (EchoMessageDAO.java:32) - save failed
org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: com.ton.rom.EchoMessage; nested exception is org.hibernate.MappingException: Unknown entity: com.ton.rom.EchoMessage
org.hibernate.MappingException: Unknown entity: com.ton.rom.EchoMessage
那一句是 getHibernateTemplate().save(transientInstance);
請問是什么問題?
出現(xiàn)這個問題最有可能就是DAO類有錯誤
寫個DAO的測試類
public static void main(String[] args) {
String[] path = {"/WebRoot/WEB-INF/applicationContext.xml"};
ApplicationContext ctx = new FileSystemXmlApplicationContext(path);
UserDAO dao = (UserDAO) ctx.getBean("userDAO");
System.out.print(dao.isValidUser("uu","pp"));
很快可以找出錯誤的地方;
我今天才在別個那里看到做這個方面的東西..在我認為struts只是獲取頁面提交的東西.,.然后由application.xml文件中找到相對應的action,然后再根據(jù)action的依賴項找到相對應的DAO(實現(xiàn)類),再由這個實現(xiàn)類找到相對應的DAOImp(接口類),最后在struts里面就添加一個DAO的屬性.(這個是不是才叫依賴式的注入呢?我也不清楚..),再在action里面只要調(diào)用此屬性的實現(xiàn)方法就可以啦..
(管你是動態(tài)的還是靜態(tài)的actionForm)
----只是我本人今天的一點看法...不好意思才看別人用這個東西.我還沒有用過.
# re: Struts+Spring+Hibernate練習(完整) 回復 更多評論
2007-07-04 19:59 by richard_gaoSpring+struts+hibernate
出錯原因很簡單
struts-config.xml
</plug-in>
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" />
</plug-in>
myeclipse 把applicationContext.xml放在classes文件夾下
不知道大家發(fā)現(xiàn)沒有?
現(xiàn)在我也是HTTP Status 404 - Servlet action is not available 很頭疼啊.
# re: Struts+Spring+Hibernate練習(完整) 回復 更多評論
2007-08-24 02:19 by 鐘文創(chuàng)javax.servlet.ServletException: Hibernate operation: could not execute query; uncategorized SQLException for SQL [select user0_.ID as ID, user0_.username as username0_, user0_.password as password0_ from user user0_ where user0_.username=? and password=?]; SQL state [HY000]; error code [156]; [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]在關鍵字 'user' 附近有語法錯誤。; nested exception is java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]在關鍵字 'user' 附近有語法錯誤。
# re: Struts+Spring+Hibernate練習(完整) 回復 更多評論
2007-08-24 03:20 by 鐘文創(chuàng)感謝YY寫的問題,讓我解決了
Servlet action is not available
的問題,太感謝你了。你的方法是很對的,希望后來者能得到由衷的解惑。
他的解答是:
找不到action的問題解決方法:
出現(xiàn)這個問題最有可能就是DAO類有錯誤
寫個DAO的測試類
public static void main(String[] args) {
String[] path = {"/WebRoot/WEB-INF/applicationContext.xml"};
ApplicationContext ctx = new FileSystemXmlApplicationContext(path);
UserDAO dao = (UserDAO) ctx.getBean("userDAO");
System.out.print(dao.isValidUser("uu","pp"));
很快可以找出錯誤的地方;
# re: Struts+Spring+Hibernate練習(完整) 回復 更多評論
2007-08-24 03:34 by 鐘文創(chuàng)這個問題,可以這樣:
1.先看看login.jsp的提交是不是action="/login"
2.再從struts-config.xml著手,看是不是各種導入的文件的路徑對不對;
3.最后同樣看看applicationContext.xml是不是也有路徑的問題。
像我就是導入UserDAOImp.java時寫錯路徑了,結果邊驗證表單是不是空的都出錯,是非常快地報錯,很讓我郁悶!
感謝YY的解答,我用他給的DAO的測試類測試了程序 ,系統(tǒng)馬上報錯說是applicationContext.xml里面的UserDAOImp找不到,然后就感覺好像抓住了救命草,改了過來就一一下子成功了!
# re: Struts+Spring+Hibernate練習(完整) 回復 更多評論
2007-08-25 01:00 by 鐘文創(chuàng)解決 Servlet action is not available
這個問題
4.如果還不行的話,那就是applicationContext.xml的 開頭 錯了,應該為:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
.....
.....
</beans>
錄像請到www.oksonic.cn去下載,注冊一個用戶即可下載所有錄像!
錄像請到www.oksonic.cn去下載,注冊一個用戶即可下載所有錄像!
錄像請到www.oksonic.cn去下載,注冊一個用戶即可下載所有錄像!
錄像請到www.oksonic.cn去下載,注冊一個用戶即可下載所有錄像!
<list>
<value>com/wolf/User.hbm.xml</value>
</list>
</property> 就會執(zhí)行到驗證呢。。 不論我參考什么資料做ssh練習。都是這個同樣的問題沒法解決。。 誰能給我一個理由啊。
仔細檢查一下,問題實際上已經(jīng)找到了。
// TODO Auto-generated method stub
ApplicationContext context =
new FileSystemXmlApplicationContext(
"src/applicationContext.xml");
UserDAO userDAO =
(UserDAO) context.getBean("userDAO");
System.out.println("name: " + userDAO.isValidUser("test", "test"));
}
測試都是挺OK的啊。。說明不是跟數(shù)據(jù)庫配置出問題了啊。。我的myeclipse版本是5.5的。。會不會是hibernate3.0包會有問題啊。。
arking servlet action as unavailable
2007-08-30 09:33:27 StandardContext[/SSH829]Servlet /SSH829 threw load() exception
javax.servlet.UnavailableException
at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:880)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:336)
at javax.servlet.GenericServlet.init(GenericServlet.java:211)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1029)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4013)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4357)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:807)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:595)
at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:277)
at org.apache.catalina.core.StandardHost.install(StandardHost.java:832)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:701)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:432)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:983)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1091)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:789)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
at org.apache.catalina.core.StandardService.start(StandardService.java:480)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:2313)
at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)
此錯誤多是由于spring上下文載入失敗引起
在struts中引入了spring之后,工程的上下文便交給spring插件負責載入
在struts-config.xml中:
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml" />
</plug-in>
此時找不到action多是由配置文件的位置不對引起的,即服務器找不到applicationContext.xml,注意查看myEclipse是否將該配置文件復制到了正確的位置。
或者有其他錯誤---------當spring或者Hibernate配置文件中的配置有問題時就會出現(xiàn)這種情況
出現(xiàn)這個問題最有可能就是DAO類配置有錯誤,sping的配置文件出錯在web方式下是看不到的,可以寫個DAO的測試類在java環(huán)境下查錯
public static void main(String[] args) {
String[] path = {"/WebRoot/WEB-INF/applicationContext.xml"};
ApplicationContext ctx = new FileSystemXmlApplicationContext(path);
UserDAO dao = (UserDAO) ctx.getBean("userDAO");
System.out.print(dao.isValidUser("uu","pp"));
很快可以找出錯誤的地方;
歡迎交流:QQ-57875031
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml" />
</plug-in>
這個東西 樓主應該沒配置
不然你那個loginaction 里怎么能用userDao屬性
樓上有個仁兄 說找不到applicationContext.xml
樓主應該沒配置
即使配置了 那個仁兄 你也得注意applicationContext.xml的位置對不對
總之 我用eclipse 不爽 呵呵
# re: Struts+Spring+Hibernate練習(完整) 回復 更多評論
2007-09-14 22:49 by JerryBeckF<set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" />
src下的文件編譯后跑到/WEB-INF/classes下面去了,項目運行時是不調(diào)用src下的文件的.
String password=loginForm.getString("password");
這兩句是不對的 。
我在eclipse中報錯
改成
String username=(String)loginForm.get("username");
String password=(String)loginForm.get("password");
即可
# re: Struts+Spring+Hibernate練習(完整) 回復 更多評論
2007-10-16 15:17 by QQ:116167884org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
Caused by: net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
http://ming204.blog.163.com/blog/static/417138132007102401647810/edit/
知道問題的告訴下小弟 chenjiang588@163.com多謝
# re: Struts+Spring+Hibernate練習(完整)[未登錄] 回復 更多評論
2007-12-27 09:42 by Mr.TianShu管理用戶請求,作出響應
提供一個流程控制器,委派調(diào)用業(yè)務邏輯和其他上層處理
處理異常
為顯示提供數(shù)據(jù)模型
用戶界面的驗證
不應該出現(xiàn):高耦合,難維護
與數(shù)據(jù)庫直接通信
與應用程序相關聯(lián)的業(yè)務邏輯及校驗
事物處理
2、持久層:Hibernate
如何查詢對象的相關信息(HQL或正則表達式的API)
3、業(yè)務層(Spring,PicoContainer)依賴注射,控制反轉(zhuǎn)
處理應用程序的業(yè)務邏輯和業(yè)務校驗
管理業(yè)務層及的對象的依賴
在表示層和持久層之間增加一個靈活的機制,使得他們不直接聯(lián)系在一起
通過揭示從表示層到業(yè)務層之間的上下文來得到業(yè)務邏輯
管理程序的執(zhí)行(從業(yè)務層到持久層)
Servlet action is not available
在網(wǎng)上找了些資料,還是沒有解決這個問題。
我的E-mail:huangshuidan@163.com
message Servlet action is not available
description The requested resource (Servlet action is not available) is not available.
我做到struts與spring時就提示這個錯誤了,怎么回事啊,我是初學者請教大家,望大家多多指點啊
發(fā)現(xiàn)好多人說有 Servlet action is not available 異常。
自己寫了一下,也是這個錯。
后來找了半天,原來是忘了導一個包,其實這個只能賴自己了。
博主已經(jīng)說了,把spring的包全導出進去方便。
以為自己有點經(jīng)驗。就沒都導進去。
結果忙乎的一個多小時找錯。哎~!!!
首先,我得感覺樓主,因為他給我們指出的大體的編程方向.
但是有些在編程中出現(xiàn)的問題他可能沒有能夠一一給出,
那么,我今天一天對他的這個小程序的實現(xiàn),碰到了以下的問題:
我在此也給出了解決方案(希望能對大家有幫助,技術共享是我們的目標!)
1.利用myeclipse生成validatorForm時,記得將里面的非get,set方法刪掉...
不然,就得在里面重寫一些校驗方法了,而且如果不寫,程序?qū)⒉粫M行校驗!
因為代碼中的校驗級別高于配置文件中的!
2.不要將action-mapping中的/login.jsp前面的/掉了
3.<%@ page language="java" contentType="text/html; charset=UTF-8" %>
這里面的charset部分一定不能掉,否則將會出現(xiàn)亂碼!切記!
4.出現(xiàn)500問題,可能是沒有在sturts-config.xml文件中加載
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml" />
</plug-in>
5.struts 404
可能是由于myeclipse未加載完整的spring.jar包.
6.
500
hibernate3.1換成3.0試試!
7. org/springframework/orm/hibernate/support/HibernateDaoSupport 不能找到
原因:因為將hibernate3.1換到了3.0,所以,這里的hibernate應該變成hibernate3/support..
8.class="org.apache.commons.dbcp.BasicDataSource">
缺少DBCP包,在此處下載一個:http://commons.apache.org/downloads/download_dbcp.cgi
9.java.lang.NoClassDefFoundError: org.hibernate.cfg.Configuration
10.java.io.FileNotFoundException: Could not open class path resource [....hbm.xml],提示找不到xml文件?
原因一般有兩個:
(1)該xml文件沒有在classpath中。
(2)applicationContext-hibernate.xml中的xml名字沒有帶包名。
11.Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
其實,不管是哪種數(shù)據(jù)庫,只要把對應的JDBC包放入到tomcat 的common/lib下面即可,像本人現(xiàn)在使用的MYSQL
就要導入:mysql-connector-java-3.1.10-bin.jar
# re: Struts+Spring+Hibernate練習(完整) 回復 更多評論
2008-10-08 09:56 by guoyanlong# re: Struts+Spring+Hibernate練習(完整) 回復 更多評論
2008-10-08 09:57 by guoyanlong# re: Struts+Spring+Hibernate練習(完整) 回復 更多評論
2009-04-17 20:19 by 創(chuàng)意產(chǎn)品網(wǎng)# re: Struts+Spring+Hibernate練習(完整) 回復 更多評論
2009-12-01 12:09 by 創(chuàng)意產(chǎn)品批發(fā)請問,事務是在業(yè)務層進行控制吧?
<action attribute="loginLogForm"
name="loginLogForm"
parameter="op"
path="/loginLog"
scope="request"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="loginList"
path="/SystemManager/LoginLog.jsp" />
</action>
然后再Spring的配置文件中
<bean name="/personnel" class="org.myoffice.struts.action.PersonnelAction">
<property name="personnelBiz" ref="personnelBiz"/>
<property name="systemBiz" ref="systemBiz"/>
</bean>
<property>是注入的標簽
# re: Struts+Spring+Hibernate練習(完整) 回復 更多評論
2010-12-15 09:51 by zhangyicou# re: Struts+Spring+Hibernate練習(完整) 回復 更多評論
2011-06-27 14:05 by 1227134894只有注冊用戶登錄后才能發(fā)表評論。 | ||
![]() |
||
網(wǎng)站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
|
||
相關文章:
|
||