返回列表 发帖

《整合Struts+Hibernate+Spring应用开发详解》在线考试系统的问题

对着代码一行行打,打完整个项目,运行起来出现以下问题:运行项目,
运行不成功了,在后台登陆不了,通过log4j显示运行情况,信息如下:
DelegatingActionProxy with mapping path '/adminLogin' and module prefix '' delegating to Spring bean with name [/adminLogin]
No action instance for path /adminLogin could be created
java.lang.NullPointerException
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1270)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1201)
        at org.apache.struts.util.RequestUtils.applicationClass(RequestUtils.java:117)
        at org.apache.struts.util.RequestUtils.applicationInstance(RequestUtils.java:143)
        at org.apache.struts.action.RequestProcessor.processActionCreate(RequestProcessor.java:280)
        at org.springframework.web.struts.DelegatingRequestProcessor.processActionCreate(DelegatingRequestProcessor.java:150)
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:218)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
        at com.exam.struts.action.base.MyActionServlet.process(MyActionServlet.java:15)
        at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Unknown Source)
多次看,知道是没有产生相应action,检查几个配置文件,也不看不出是什么问题,搞了几天,现在头都大了,下面附上四个配置文件:大家帮忙看看:

struts-config.xml:
<struts-config>
  <data-sources />
  <form-beans >
    <form-bean name="loginAdminForm" type="org.apache.struts.validator.DynaValidatorForm">
      <form-property name="password" type="java.lang.String" />
      <form-property name="name" type="java.lang.String" />
    </form-bean>
   
    <form-bean name="loginexamForm" type="org.apache.struts.validator.DynaValidatorForm">
      <form-property name="stuname" type="java.lang.String"/>
      <form-property name="stunumber" type="java.lang.String"/>
    </form-bean>
   
    <form-bean name="addStudentForm" type="org.apache.struts.validator.DynaValidatorForm">
      <form-property name="id" type="java.lang.String"/>
      <form-property name="realname" type="java.lang.String"/>
      <form-property name="stuName" type="java.lang.String"/>
      <form-property name="className" type="java.lang.String"/>
      <form-property name="address" type="java.lang.String"/>
      <form-property name="phone" type="java.lang.String"/>
      <form-property name="email" type="java.lang.String"/>
      <form-property name="humanId" type="java.lang.String"/>
    </form-bean>
   
    <form-bean name="addQuestionForm" type="org.apache.struts.validator.DynaValidatorForm">
      <form-property name="title" type="java.lang.String"/>
      <form-property name="examType" type="java.lang.String"/>
      <form-property name="score" type="java.lang.String"/>
      <form-property name="level" type="java.lang.String"/>
      <form-property name="note" type="java.lang.String"/>
      <form-property name="choices" type="java.lang.String"/>
      <form-property name="standardAnswer" type="java.lang.String"/>
    </form-bean>
   
    <form-bean name="addTestForm" type="org.apache.struts.validator.DynaValidatorForm">
      <form-property name="testName" type="java.lang.String"/>
      <form-property name="testTime" type="java.lang.String"/>
    </form-bean>
   
    <form-bean name="studentLoginForm" type="org.apache.struts.validator.DynaValidatorForm">
      <form-property name="stuNumber" type="java.lang.String" />
      <form-property name="stuName" type="java.lang.String" />
    </form-bean>
   
    <form-bean name="replyFormForm" type="org.apache.struts.validator.DynaValidatorForm">
      <form-property name="idr" type="java.lang.String" />
      <form-property name="options" type="java.lang.String" />
    </form-bean>
  </form-beans>

  <global-exceptions>
    <exception key="examException"
                type="com.exam.exception.ExamException"
                scope="request"
                path="/WEB-INF/jsp/error.jsp">
    </exception>
    <exception key="otherException"
                type="java.lang.Exception"
                scope="request"
                path="/WEB-INF/jsp/error.jsp">
    </exception>
  </global-exceptions>
  
  <global-forwards>
    <forward name="admin" path="/WEB-INF/jsp/login.jsp"> </forward>
    <forward name="loginExam" path="/WEB-INF/jsp/loginExam.jsp"> </forward>
  </global-forwards>
  
  <action-mappings>
    <!-- 进入后台管理的登录页面 -->
    <action path="/admin" forward="/WEB-INF/jsp/login.jsp"> </action>
    <!-- 进入添加学生的表单页 -->
    <action path="/addStudent" forward="/WEB-INF/jsp/addStudent.jsp"> </action>
    <!-- 进入添加考试类型的表单页 -->
    <action path="/addTest" forward="/WEB-INF/jsp/addTest.jsp"> </action>
    <!-- 进入学生登录的表单页 -->
    <action path="/login" forward="/WEB-INF/jsp/loginExam.jsp"> </action>
    <action path="/loginExam" forward="/WEB-INF/jsp/loginExam.jsp"> </action>
      
    <!-- 处理后台管理员登录 -->
    <action
      path="/adminLogin"
      name="loginAdminForm"
      validate="false"
      scope="request">
      <forward name="success" path="/WEB-INF/jsp/addStudent.jsp"> </forward>
      <forward name="failure" path="/WEB-INF/jsp/login.jsp"> </forward>
    </action>
   
    <!-- 处理添加学生 -->
    <action
      validate="false"
      name="addStudentForm"
      path="/processAddStudent"
      scope="request">
      <forward name="success" path="/listStudent.do"> </forward>
    </action>
   
    <!-- 处理列出学生 -->
    <action
      validate="false"
      path="/listStudent"
      scope="request">
      <forward name="success" path="/WEB-INF/jsp/listStudent.jsp"> </forward>
    </action>
   
    <!-- 处理删除学生 -->
    <action
      path="/delStudent"
      scope="request"
      validate="false">
      <forward name="success" path="/listStudent.do"> </forward>
    </action>
   
    <!-- 处理添加考试类型 -->
    <action
      validate="false"
      name="addTestForm"
      path="/processAddTest"
      scope="request">
      <forward name="success" path="/addQuestion.do"> </forward>
    </action>
   
    <!-- 进入添加试题的表单页 -->
    <action
      path="/addQuestion"
      scope="request"
      validate="false">
      <forward name="success" path="/WEB-INF/jsp/addQuestion.jsp"> </forward>
    </action>
   
    <!-- 列出所有试题 -->
    <action
      validate="false"
      scope="request"
      path="/listQuestion">
      <forward name="success" path="/WEB-INF/jsp/listQuestion.jsp"> </forward>
    </action>
   
    <!-- 处理删除试题 -->
    <action
      validate="false"
      scope="request"
      path="/delQuestion">
      <forward name="success" path="/listQuestion.do"> </forward>
    </action>
   
    <!-- 处理添加试题 -->
    <action
      validate="false"
      scope="request"
      name="addQuestionForm"
      path="/processAddQuestion">
      <forward name="success" path="/listQuestion.do"> </forward>
    </action>
   
    <!-- 处理考生登录 -->
    <action
      validate="false"
      name="studentLoginForm"
      path="/processLogin"
      scope="request">
      <forward name="success" path="/prepare.do"> </forward>
      <forward name="failure" path="/WEB-INF/jsp/loginExam.jsp"> </forward>
    </action>
  
    <!-- 处理考生预备 -->
    <action
      scope="request"
      path="/prepare">
      <forward name="success" path="/WEB-INF/jsp/prepare.jsp"> </forward>
    </action>
   
    <!-- 处理考生开始考试 -->
    <action
      scope="request"
      path="/begin">
      <forward name="success" path="/WEB-INF/jsp/examMain.jsp"> </forward>
    </action>
   
    <!-- 处理考生答题 -->
    <action
      validate="false"
      scope="request"
      name="replyForm"
      path="/reply">
      <forward name="success" path="/WEB-INF/jsp/examMain.jsp"> </forward>
      <forward name="finish" path="/finish.do"> </forward>
    </action>
   
    <!-- 统计考试结果 -->
    <action
      scope="request"
      path="/finish">
      <forward name="success" path="/WEB-INF/jsp/show.jsp"> </forward>
    </action>
  </action-mappings>

  <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>
  
  <message-resources  parameter="message"/>
  
  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
          value="/WEB-INF/classes/actionContext.xml,/WEB-INF/classes/appContext.xml,/WEB-INF/classes/daoContext.xml" />
    <!--
<set-property property="contextConfigLocation"
              value="/WEB-INF/classes/applicationContext.xml" />-->
  </plug-in>

  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
<set-property property="stopOnFirstError" value="true" />
  </plug-in>
</struts-config>

TOP

daoContext.xml文件:
<bean name="daoTemplate" abstract="true">
    <property name="sessionFactory" ref="sessionFactory"> </property>
</bean>
<!-- 配置考试系统管理员DAO,通过指定parent属性来继承daoTemplate -->
<bean name="examUserDao" class="com.exam.impl.ExamUserDaoHibernate" parent="daoTemplate"> </bean>
<bean name="examTypeDao" class="com.exam.impl.ExamTypeDaoHibernate" parent="daoTemplate"> </bean>
<bean name="studentDao"  class="com.exam.impl.StudentDaoHibernate"  parent="daoTemplate"> </bean>
<bean name="questionDao" class="com.exam.impl.QuestionDaoHibernate" parent="daoTemplate"> </bean>
   


actionContext.xml文件
<bean name="actionTemplate" abstract="true">
    <property name="examService" ref="examService"> </property>
</bean>

<!-- 处理管理员登录 -->
<bean name="/amdinLogin" class="com.exam.struts.action.AdminLoginAction" scope="prototype" parent="actionTemplate"> </bean>
<!-- 处理添加学生 -->
<bean name="/processAddStudent" class="com.exam.struts.action.AddStudentAction" scope="prototype" parent="actionTemplate"> </bean>
<!-- 处理列出学生 -->
<bean name="/listStudnet" class="com.exam.struts.action.ListStudentAction" scope="prototype" parent="actionTemplate"> </bean>
<!-- 处理删除学生 -->
<bean name="/delStudent" class="com.exam.struts.action.DelStudentAction" scope="prototype" parent="actionTemplate"> </bean>
<!-- 处理添加考试类型 -->
<bean name="/processAddTest" class="com.exam.struts.action.AddTestAction" scope="prototype" parent="actionTemplate"> </bean>
<!-- 进入添加试题的表单页 -->
<bean name="/addQuestion" class="com.exam.struts.action.BeforeAddQuestionAction" scope="prototype" parent="actionTemplate"> </bean>
<!-- 处理列出问题 -->
<bean name="/listQuestion" class="com.exam.struts.action.ListQuestionAction" scope="prototype" parent="actionTemplate"> </bean>
<!-- 处理删除试题 -->
<bean name="/delQuestion" class="com.exam.struts.action.DelQuestionAction" scope="prototype" parent="actionTemplate"> </bean>
<!-- 处理添加试题 -->
<bean name="/processAddQuestion" class="com.exam.struts.action.AddQuestionAction" scope="prototype" parent="actionTemplate"> </bean>
<!-- 处理学生登录 -->
<bean name="/processLogin" class="com.exam.struts.action.StudentLoginAction" scope="prototype" parent="actionTemplate"> </bean>
<!-- 学生准备考试 -->
<bean name="/prepare" class="com.exam.struts.action.BeginAction" scope="prototype" parent="actionTemplate"> </bean>
<!-- 学生答题 -->
<bean name="/reply" class="com.exam.struts.action.ReplyAction" scope="prototype" parent="actionTemplate"> </bean>
<!-- 考试结束 -->
<bean name="/finish" class="com.exam.struts.action.FinishAction" scope="prototype" parent="actionTemplate"> </bean>

<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <property name="beanNames">
          <list>
                <value>/processAddStudent </value>
                <value>/listStudent </value>
                <value>/delStudent </value>
                <value>/processAddTestt </value>
                <value>/listQuestion </value>
                <value>/delQuestion </value>
                <value>/addQuestion </value>
                <value>/processAddQuestion </value> <!-- 不同原 -->
          </list>
    </property>
    <property name="interceptorNames">
          <list>
                <value>authorityInterceptor </value>
          </list>
    </property>
</bean>
<bean id="authorityInterceptor" class="com.exam.authority.AuthorityInterceptor"/>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <property name="beanNames">
            <list>
                <value>/reply </value>
                <value>/finish </value>
            </list>
    </property>
    <property name="interceptorNames">
            <list>
                <value>examInterceptor </value>
            </list>
    </property>
</bean>
<bean id="examInterceptor" class="com.exam.authority.ExamInterceptor"> </bean>

TOP

appContext.xml文件
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
   
    <!-- 定义数据源Bean,使用C3P0数据源实现 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver"> </property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/onlinexam"> </property>
<property name="user" value="root"> </property>
<property name="password" value="329435123"> </property>
<property name="maxPoolSize" value="40"> </property>
<property name="minPoolSize" value="1"> </property>
<property name="initialPoolSize" value="1"> </property>
<property name="maxIdleTime" value="20"> </property>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect </prop>
<prop key="show_sql">true </prop>
        <prop key="hibernate.hbm2ddl.auto">update </prop>
        <prop key="hibernate.jdbc.batch_size">20 </prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/exam/model/ExamUser.hbm.xml </value>
<value>com/exam/model/ExamType.hbm.xml </value>
<value>com/exam/model/Question.hbm.xml </value>
<value>com/exam/model/Student.hbm.xml </value>
</list>
</property>
</bean>

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

<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
    <!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
    <property name="transactionManager" ref="transactionManager"> </property>
    <property name="transactionAttributes">
          <!-- 下面定义事务传播属性 -->
          <props>
                <prop key="insert*">PROPAGATION_REQUIRED </prop>
                <prop key="find*">PROPAGATION_REQUIRED,readOnly </prop>
                <prop key="*">PROPAGATION_REQUIRED </prop>
          </props>           
    </property>
</bean>

<!-- 定义业务逻辑处理组件 -->
<bean id="examService" class="com.exam.service.impl.ExamServiceImpl">
    <property name="examUserDao" ref="examUserDao"> </property>
    <property name="examTypeDao" ref="examTypeDao"> </property>
    <property name="studentDao" ref="studentDao"> </property>
    <property name="questionDao" ref="questionDao"> </property>
</bean>

    <!-- 定义BeanNameAutoProxyCreator -->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <!-- 指定对满足哪些Bean name的Bean自动生成业务代理 -->
    <property name="beanNames">
          <!-- 下面是所有需要自动创建事务代理的Bean-->
              <list>
                    <value>examService </value>
              </list>
              <!-- 此处可增加其他需要自动创建事务代理的Bean-->
    </property>
    <!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
    <property name="interceptorNames">
          <list>
                <value>transactionInterceptor </value>
                <!-- 此处可增加其他新的Interceptor -->
          </list>
    </property>
</bean>
</beans>

TOP

生命没有假期!
如果生命只剩下最后一秒,你可会想到我?

TOP

原帖由 cbbs 于 2008-11-17 15:05 发表
appContext.xml文件

   
     

  
  
  
  
  
  
  
  








org.hibernate.dialect.MySQLDialect  
true  
        update  
        20  




com/exam/model/ExamUser.hbm.xml  
com/exam/m ...



<!-- 处理管理员登录 -->
<bean name="/amdinLogin" class="com.exam.struts.action.AdminLoginAction" scope="prototype" parent="actionTemplate"> </bean>


你写错了,应是adminLogin 不是amdinLogin
倚楼听风雨,笑看江湖路。。。

TOP

生命没有假期!
如果生命只剩下最后一秒,你可会想到我?

TOP

原帖由 kongyeeku 于 2008-11-17 16:42 发表
楼上的太强了,
这都被你发现了。


可惜没有金币啊!
倚楼听风雨,笑看江湖路。。。

TOP

TOP

原帖由 秋风飘涩落 于 2008-11-17 16:59 发表
heyitang 你眼里太强了 佩服你了


不是我太强,而是我对这本书上所有的内容和代码,都有过一定的仔细学习和研究!这本书,我原来仔细学习过两遍!
倚楼听风雨,笑看江湖路。。。

TOP

返回列表