樓主救命!我在做你的"Struts+Spring+Hibernate練習(xí)"的時(shí)候出錯(cuò)了
我用的開(kāi)發(fā)環(huán)境:
jdk1.5
eclipse3.12?
myeclipse 4.1
?spring 1.2
hibernate3.0
數(shù)據(jù)庫(kù)服務(wù)器:sqlserver2000
數(shù)據(jù)庫(kù)驅(qū)動(dòng): jtds1.2
web服務(wù)器:toncat5.0
我要實(shí)現(xiàn)的功能是:當(dāng)用戶(hù)登陸后顯示一個(gè)login連接,當(dāng)用戶(hù)單擊這個(gè)連接時(shí)程序執(zhí)行LoginAction.java
以下是程序的目錄結(jié)構(gòu):
src
? ---com
????? ----test
????????? ---hibernate
?????????????????? ----AbstractUser.java
?????????????????? ----SessionFactory.java
?????????????????? ----User.hbm.xml
?????????????????? ----User.java
????????? ----struts
????????????? --action
?????????????????? LoginAction.java
????????? -----UserDao.java
????????? -----UserDaoIMP.java
? -----WebRoot
????????? ----index.jsp
以下是applicationContext.xml的內(nèi)容:
????? <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<beans>
? <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
??<property name="driverClassName">
???<value>net.sourceforge.jtds.jdbc.Driver</value>
??</property>
??<property name="url">
???<value>jdbc:jtds:sqlserver://192.168.1.171:1433;DatabaseName=test;SelectMethod=cursor</value>
??</property>
??<property name="username">
???<value>sa</value>
??</property>
??<property name="password">
???<value></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>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.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>
UserDao.java的代碼:
package com.test;
public interface UserDAO {
?public abstract boolean isValidUser(String username, String password);
}
UserDaoIMP.java的代碼:
?package com.test;
import java.util.List;
import org.springframework.orm.hibernate3.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, (Object)username);
??List userList = this.getHibernateTemplate().find(hql,userlist);
??if (userList.size() > 0) {
???return true;
??}
??return false;
?}
}
LoginAction.java的代碼:
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 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) {
??if (userDAO.isValidUser("test","test")) {
???return mapping.getInputForward();
??} else {
???return mapping.getInputForward();
?}
?}
}
index.jsp的內(nèi)容:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()
+":"+request.getServerPort()+path+"/";
%>
<html>
? <head>
??? </head>
?? <body>
? <a href="<%=basePath%>login.do">login</a>
? </body>
</html>
以下是hibernate自動(dòng)生成的User.hbm.xml,hibernate.cfg.xml文件我已經(jīng)刪除了。
<?xml version="1.0"?> <struts-config> 讓人不解的是,當(dāng)我點(diǎn)擊login連接時(shí),出現(xiàn)了以下錯(cuò)誤信息: type Status report message Servlet action is not available description The requested resource (Servlet action is not available) is not available.
<?xml version="1.0" encoding="UTF-8"?> -beans.dtd">
posted on 2006-03-23 16:59 lscforever_2002 閱讀(306) 評(píng)論(0) 編輯 收藏
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"<!--
??? Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
??? <class name="com.test.Hibernate.User" table="user" schema="dbo" catalog="test">
??????? <id name="id" type="integer">
??????????? <column name="ID" />
??????????? <generator class="sequence" />
??????? </id>
??????? <property name="username" type="string">
??????????? <column name="USERNAME" length="50" />
??????? </property>
??????? <property name="password" type="string">
??????????? <column name="PASSWORD" length="50" />
??????? </property>
??? </class>
</hibernate-mapping>
struts-config.xml的代碼如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "
? <data-sources />
? <form-beans />
? <global-exceptions />
? <global-forwards />
? <action-mappings >
??? <action path="/login" type="org.springframework.web.struts.DelegatingActionProxy" />
?</action-mappings>
?<message-resources parameter="com.test.struts.ApplicationResources" />
? <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
??? <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
? </plug-in>
</struts-config>
--------------------------------------------------------------------------------
當(dāng)我把a(bǔ)pplicationContext.xml改成以下后:
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring
<beans>
??????? <bean name="/login" class="com.test.struts.action.LoginAction" singleton="false">
?</bean>
</beans>
程序能夠正常運(yùn)行并執(zhí)行到了我設(shè)在LoginAction.java中的段點(diǎn),由此看來(lái),應(yīng)該是
applicationContext.xml的配置出了問(wèn)題,
但不知道問(wèn)題出在什么地方?是不是數(shù)據(jù)源配錯(cuò)了??
?????????????????????